并发编程指南

     

使用Java虚拟线程实现IO高吞吐量与CPU密集型结合编程 - DZone

740 8K

虚拟线程作为 Java 19 的一部分于 2022 年 9 月作为预览功能发布,它们是平台线程的轻量级版本,与传统平台线程不同,虚拟线程的内存占用很小。虚拟线程支持为每个工作单元模型创建一个线程,无论.

在 Project Loom 的虚拟线程上运行 Kotlin 协程

975 2K

如果你想在Kotlin中运行异步或非阻塞代码,你必须在CoroutineScope中运行它。如果你要处理回调,你必须用suspendCancellableCoroutine将其转换为一个暂停的函数,这.

BucketMap:golang快速并发 HashMap 开源实现

862

一个非常快速、线程安全、简单的 hashmap 实现。在高度竞争的情况下,它比sync.Map和带mutexes的map快4-10倍以上;所需的堆空间是sync.Map的25%-50%,如果在堆中分配.

Rust异步Asyn的特点

2043 1 8K

经常听到有人把Rust和其他语言描述为 "穿风衣的N种语言"。在Rust中,我们有Rust的控制流结构,我们有decl-macro元语言,我们有trait系统(它是图灵完备的),我们有cfg注释语言-.

Java并发编程中双重检查锁漏洞

960 5K

单例模式在实际工作或面试中出现的频率更高,double-checked lock是单例常见实现:public class SimpleSingleton4 {    private static Si.

Java并发编程如何防止死锁?

797 1 5K

死锁可能是大家都不想遇到的问题,因为一旦程序出现死锁,如果没有外力的话,程序会因为资源竞争一直处于假死状态。死锁示例代码如下:public class DeadLockTest {    public.

Java使用默认线程池的陷阱问题

958 2K

我们都知道JDK1.5之后提供了ThreadPoolExecutor类,可以用来自定义线程池。线程池有很多好处,比如: 减少资源消耗,避免频繁创建和销毁线程,可以直接复用已有线程。 提供速度,任务来了.

SpringBoot异步注释@Async的并发陷阱

1465 2K

在 Java 并发编程中实现异步函数之前,一般需要使用线程或线程池。线程池的底层也使用线程。要实现一个线程,要么继承Thread类,要么实现Runnable接口,然后在run方法中编写具体的业务逻辑代.

Java并发编程中自旋锁会浪费 CPU 资源并导致错误

925 2K

在并发编程中,自旋锁(spin locks )想必大家都不陌生。自旋锁一个非常经典的使用场景是CAS(即比较和交换),是一种无锁的思想(说白了就是使用了无限循环),用来解决更新数据的问题高并发场景。a.

Java并发编程Bug:ThreadLocal已用完但未清除

923 2K

在Java中,有许多技术可以确保线程安全。你可以使用synchronized和Lock等关键字来锁定代码块。但它们有一个共同的特点,那就是锁定会对代码的性能产生一定的损失。其实,JDK中还提供了另一种.

大规模实时流计算的系统设计 - Kashyap

1552 1 3K
使用 Spring、Pub/Sub、Dataflow、Redis、Reentrant Lock 模式和 guava 缓存构建实时视图计数服务以处理 20k tps 规模。​系统架构对于任何现场表演,观.

Akka许可证从免费改为收费了

2213 1

Akka 的新许可证是 Business Source License (BSL) v1.1,附加使用授权以涵盖 Akka 的一些开源使用,例如 Play Framework 的一部分。BSL 由 D.

使用LMAX Disruptor构建快速、线程安全的热点跟踪库

1743 2 8K
LMAX Disruptor 是 Java 中最好的库之一,用于构建具有无锁队列的有界队列。Hubspot 撰写了有关 LMAX Disruptor 如何帮助构建快速、线程安全的跟踪库的文章:HubS.

Java新提案:Extent-Local变量

921

Extent-Local 被提议作为一种在线程之间共享数据的新方式,它比 ThreadLocals 更轻量、更不可变,它包含更不容易出错的语法,并且与虚拟线程很好地配合使用。目标 易用性——提供一种在.

Java loom会使其并发性与erlang相媲美吗? - Reddit

1257 1

来自 erlang 解决方案的博客文章:其中比较了 JVM 和 BEAM(erlang 的 VM),文章认为JVM没有用于高度优化并发的原语。但是现在Java有了Loom虚拟线程,是否实现了与 erl.

分布式系统中的内存限速器 - ajin

1006
在多台服务器分布在世界各地不同地区的情况下,为每台服务器实施速率限制器将导致两个主要问题: 不一致 竞争条件 在本文中,我们将探讨这两个主要问题,以及我们如何实施更好的策略来解决分布式系统的这些问题。.

比较.NET四种流行Actor框架

3152 3K

让我们来看看在.NET生态系统中我们有哪些工具可以使用。在接下来的几节中,我们将介绍流行的框架选择。Orleans, Proto.Actor, Akka.Net, 和Dapr。我们将重点介绍它们的独特.

优步爆Go语言容易发生的数据并发争夺问题

1776 1 4K

Uber已经采用Golang(简称Go)作为开发微服务的主要编程语言。我们的Go monorepo由大约5000万行代码组成(还在增长),包含大约2100个独特的Go服务(还在增长)。Go使并发性成为.

Python的django无锁并发处理

944

并发性不是很直观的。你需要训练你的大脑来考虑当多个进程同时执行某个代码块时会发生什么。我经常遇到的问题有几个。未能识别潜在的并发性问题。无论是初学者还是经验丰富的开发者,完全错过潜在的并发问题是很常见.

Java可扩展的读写锁 - puzpuzpuz

746

锁或互斥体(互斥)是最基本的并发原语之一。很难找到一个无法解释互斥锁的开发人员,至少在基本层面上是这样。然而,互斥锁远不止这些。他们可能是: 操作系统级(想想,一个 pthread 互斥锁)或用户级(.

Loom会造成CPU密集型线程的不公平调度

1278 1

Project Loom ( JEP 425 ) 可能是 Java 有史以来最受期待的新增功能之一。它对虚拟线程(或“绿色线程”)的实现保证了开发人员能够创建高度并发的应用程序,例如具有数十万个打开的.

JEP 428:针对JDK 19提出的结构化并发

1339

Java开发人员通过将任务分解为多个子任务来管理复杂性。在普通的单线程代码中,子任务按顺序执行。但是,如果子任务彼此足够独立,并且有足够的硬件资源,则可以通过并发执行子任务来使任务运行得更快(延迟更低.

Go和C语言的32 位的无锁、并发、通用队列的源码

886

在考虑并发队列设计时,我想到了一个通用的、无锁的队列,它适合于32位整数。这个队列是 "通用 "的,因为一个单一的实现支持任何任意类型的元素,尽管它是用C语言实现的。它是无锁的,因为它保证了全系统的进.

用Java 19实现类似Go并发 - mccue

1128 2

线程通常很昂贵:操作系统没有办法准确知道一个线程需要多少堆栈空间,所以它分配的数量大约是一兆字节。解决这个问题的方法是实现一种机制,即利用有限数量的操作系统线程,并在其之上处理大量的 "逻辑线程"。对.

project-loom-c5m:用Project Loom虚拟线程实现500万长连接的实验

1318 2 2K

5,000,000 个持久连接,200,000,000 条消息,使用 Project Loom 的单个进程出现 0 个错误。Project Loom C5M 是一个使用OpenJDK Project .

Java中实现1,000,000个并发连接

824 1

WhatsApp和Phoenix已经展示了数以百万计的连接在监听一个单一端口。那么,基于TCP/IP协议的理论上的可能性是什么?任何人都可以在自己的机器上运行一个简单的Java实验。Java实验内容点.

Project Loom EA抢先体验版本发布

844 1 3K

Build 19-loom+5-429 (2022/4/4):此构建基于 JDK 19的不完整版本。与之前的版本相比,没有任何API变化。有很多 有很多变化,特别是在GC和运行时领域有很多变化,有几个.

Go 1.19将拥有更快的竞争争夺检测器

994

Go 1.19 将拥有更快的race detector! 无限数量的 goroutine.运行类似命令即可:$ go test -racerace: 超过了同时存活goroutines限制8128,d.

Project Loom带来Java并发模型革命? - infoworld

1578 2

Project Loom是Java/JVM 生态系统(由OpenJDK托管)中的一个较新的项目,它试图解决传统并发模型中的限制。特别是,Loom 提供了一种更轻量的线程替代方案以及用于管理线程的新语言.

使用Loom创建虚拟线程 - david

1321 1 4K

在这篇文章中,我们展示如何使用Loom实现类似Go语言的绿色虚拟线程。Project loom 仍处于预览阶段,这意味着 api 可能随时更改。如果您想自己尝试这些示例,可使用Early-access.