并发编程指南

     

Python 3.12将开启并发和并行编程模型

159 6K

PEP 684 引入了Per-Interpreter的 GIL,因此现在可以为每个解释器创建具有唯一 GIL 的子解释器。这样,Python 程序就能充分利用多个 CPU 内核。目前只能通过 C-AP.

线程安全Collections.synchronizedMap与并发ConcurrentHashMap之间区别

84

Collections.synchronizedMap()和ConcurrentHashMap都提供对数据集合的线程安全操作。SynchronizedMap: 每个方法都使用对象级锁进行同步。因此,s.

并发ConcurrentSkipListSet与线程安全Collections.SynchronizedSet()区别

98 5K

ConcurrentSkipListSet是SortedSet的并发版本,当然TreeSet也可以通过Collections.SynchronizedSet(new TreeSet())实现,这两者有.

线程安全与并发区别

215

在并发编程中,"线程安全 "和 "并发 "是相关的概念,但它们有着不同的含义。线程安全 如果一个类或方法可以同时被多个线程使用,而不会导致数据损坏或意外行为,那么这个类或方法就被认为是线程安全的。 即.

Java中实现合并排序的三种方法

110 14K

合并排序是一种流行的排序算法,它通过将数组或列表划分为较小的子数组,对它们进行独立排序,然后将它们合并在一起来有效地对数组或列表进行排序。它以其有效性、稳定性和处理庞大数据集的能力而闻名。简单多线程通.

Polyjuice:通过并发控制动态学习实现高性能事务

93 4K

Polyjuice 专为单节点多核设置而设计。它假设所有事务类型都是事先已知的,并且可以作为存储过程运行(请参阅下面的策略表部分)。它不支持 MVCC,因为它是在Silo 框架之上实现的。Polyju.

GoRoutine和通道并发教程

79 10K

GoRoutine 是一个与其他 goroutine 同时执行的函数。我们使用 goroutines 来启动多个线程,这有助于我们实现并发性。并发性是指程序在重叠的时间段内独立运行多个任务的能力。fu.

Java中列表List的可变性和不变性

212 11K

以下Java代码示例List分可变的,不可变的两种:1、可变ArrayList 是 List 的可变实现@Testpublic void arrayList(){    // Mutable    L.

为什么Java引入List.of()方法?

155

Java 9 中引入的 `List.of()` 方法提供了生成不可变列表的便捷方法。这是 JDK 开发人员为提供简洁而富有表现力的方法来处理集合而迈出的进步一步。 添加此方法背后的主要背景和灵感是跟随.

LMAX Disruptor:高性能线程间消息传递库

245

LMAX 过名为 Disruptor 的无锁 Java 框架实现低延迟高吞吐量交易。MAX的目标是成为世界上最快的交易平台。为了实现这一目标,他们需要优化数据在系统各阶段之间传递的方式。他们发现使用队.

基于虚拟线程的结构化并发

210 12K

在本文中,我们将讨论并发系统的一些新模式,这些模式是由 Java 21 中的新虚拟线程、结构化并发 (JEP 453 )和范围值(JEP 446: Scoped Values)组成的新的结构化并发模式.

Java中semaphore信号量使用场景

159 3K

在Java的并发API中,信号量是另一种同步工具,它同时控制访问特定资源或代码段的线程数量。它管理一组许可证; 线程在继续之前必须获得许可。 如果许可可用,则线程获取它并继续执行。 如果没有,则线程将.

Java中CountDownLatch使用场景

205 3K

在Java的并发API中,CountDownLatch是一个同步器,它允许一个或多个线程等待一组操作完成。如果您正在开发一个服务器应用程序,该应用程序在开始处理请求之前需要初始化各种资源。这些资源可能.

LMAX Disruptor 4.0.0 发布

332

LMAX Disruptor是高性能线程间消息传递库: 现在最低 Java 版本为 11 问题#323 -WorkerPool已WorkProcessor被删除,不再存在Disruptor::hand.

Java 中使用 wait、notify、notifyAll快速指南

196 11K

首先,你永远不应该直接使用wait, notify, 或notifyAll(除非你有充分的理由)。如果您需要执行多线程操作,请使用并发库。使用 wait/notify/notifyAll 构建生产者/.

使用Rust还是Go语言?

206

本文作者曾经写了一本关于 Rust 的书,但他建议不要在大多数项目中使用 Rust,原因有多种,包括其快节奏的开发、缺乏健壮的标准库以及异步编程的困难。Rust 项目腐烂从 2020 年 1 月到 2.

面试题:进程和线程有什么区别?

151

热门面试问题:流程和线程有什么区别?为了更好地理解这个问题,我们先来看看什么是程序。程序是包含一组指令的可执行文件,被动地存储在磁盘上。一个程序可以有多个进程。例如,Chrome 浏览器会为每个标签页.

Rust不适合大并发?

250

对于大规模并发用户空间软件来说,Rust 可能不是一个好工具 (bitbashing.io): 本文讨论了使用异步 Rust 实现并发的挑战和限制。它解释了并行性和并发性之间的区别,以及如何将问题分解.

Java虚拟线程会杀死响应式编程?

713

投入时间和精力学习领先的反应式框架(如 Webflux、RxJava 等)是否是个好主意?鉴于虚拟线程(Project Loom)在几次迭代后将在 JVM 中成为 GA。甚至 Spring 也引入了虚.

Java虚拟线程不能使用同步synchronized锁!

817 1 4K

Project Loom将虚拟线程的概念引入了 Java 运行时,并将在 9 月份作为JDK 21中的稳定功能提供。Loom 项目旨在将异步编程的性能优势与直接“同步”编程风格的简单性结合起来。为了实.

基于Http的ETags和If-Modified-Since实现乐观并发性

461 2K

HTTP的特点是ETags和条件性请求,并启用乐观的并发性。ETagETag(又称实体标记entity-tag)解决了 "丢失更新 "的问题,即一个API的两个客户端已经收到了一个实体的版本的数据。但.

使用Kafka 和 Spring Boot 实现并发编程

602 14K

本文将教您如何使用 Spring Boot 和 Spring for Kafka 为 Kafka 消费者配置并发。Spring for Kafka 的并发与Kafka 分区和消费者组密切相关。消费者组.

Rust 类型系统可以防止死锁吗?

494 4K

在您最意想不到的时候,死锁潜伏在每个角落。我们可以使用 Rust 类型系统在编译时避免它们吗?也就是说,在编译时能证明没有死锁吗?假设我们有两个互斥体(或互斥体,如果你喜欢的话)M1 和 M2。如果线.

揭秘 Golang 通道、Goroutine 和最佳并发的测试源码

390 2K

本github源码试图追问Golang 中的并发何时有意义,什么时候收益递减?作者背景当我深入研究 Golang 时,我想回答这个问题:Golang 中的并发何时有意义,什么时候收益递减?因此,我创建.

Meta自适应LIFO概念

589

Facebook在队列中使用了自适应LIFO的概念: - 它们在正常情况下使用FIFO顺序 - 他们在高负荷下改用后进先出顺序 理由呢?通过在高负载下保持FIFO顺序,用户可能已经放弃了他们的请求。因.

基于虚拟线程Loom的执行器是Tomcat标准线程池的可行替代方案?

893 1

使用基于虚拟线程的执行器是 Tomcat 标准线程池的可行替代方案。就容器开销而言,切换到虚拟线程执行器的好处是微不足道的。Tomcat 的标准线程池和基于虚拟线程的执行器之间性能差异的主要驱动因素是.

什么时候使用 golang 而不是 nodeJs? - Reddit

616

对于几乎所有NodeJS也能工作的项目来说,Go都是更好的,因为Go的实际并发原语是内置的,而且容易使用。Node仍然有(据我所知,如果我过时了,有人会纠正我)一个集中的事件循环结构,没有真正的多线程.

服务器制约伸缩性的四种关键资源

925 1

计算机服务器有4种关键资源来驱动其功能。大多数可伸缩性问题都是在这些资源耗尽或分配不当时出现的。内存(也称为RAM)在服务器中起着至关重要的作用,因为它临时存储数据,以供中央处理器(CPU)快速访问和.

conc:更简单编写Golang并发编程

1321 1 2K

对于 Go,并发性已经是一等公民,因此将并发代码添加到 Go 项目通常是一个很低的门槛。但是正确地做到这一点仍然很困难,而且我在并发 Go 代码中看到(并犯下)了很多错误,例如: 没有正确清理资源。 .

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

734 10K

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