并发编程 共 110 篇文章

Python concurrent.futures.as_completed按完成顺序获取结果
2026-04-24 03:28:59
Python concurrent.futures.ascompleted按完成顺序获取结果 在并发编程中,处理批量任务(如网络请求、文件读写或复杂计算)时,通常会遇到两个核心需求:一是加速执行(利用多线程或多进程并行),二是实时处理结果(谁先跑完先处理谁)。concurrent.futures.a
Python 并发编程 多线程
98 0
Java ReentrantReadWriteLock的锁降级机制实现
2026-04-23 06:16:13
Java ReentrantReadWriteLock的锁降级机制实现 在Java并发编程中,ReentrantReadWriteLock 提供了一种比互斥锁更灵活的锁机制,允许多个线程同时读取,但写入时独占。锁降级是一种重要的优化策略,它指的是持有写锁的线程在释放写锁之前,先获取读锁,随后再释放写
Java 并发编程 读写锁
66 0
Java LongAdder在高并发计数场景下的分段锁优化
2026-04-23 04:25:28
Java LongAdder在高并发计数场景下的分段锁优化 在并发编程中,统计计数(如点击量、请求数)是极其常见的需求。JDK 8 之前,我们通常使用 AtomicLong 或 synchronized 来实现线程安全计数。然而,在极高的并发场景下,这两种方案都会遇到性能瓶颈。LongAdder 是
Java LongAdder 高并发
85 0
Go语言runtime.GOMAXPROCS对Goroutine并行度的影响
2026-04-22 15:17:18
Go语言runtime.GOMAXPROCS对Goroutine并行度的影响 理解GOMAXPROCS的基本概念 理解 runtime.GOMAXPROCS 是Go语言中控制并行度的关键参数。这个函数决定了Go程序同时运行多少操作系统线程来执行用户代码。默认情况下,GOMAXPROCS 的值等于逻辑
Go语言 GOMAXPROCS 并行处理
58 0
C++ std::thread局部存储thread_local的生命周期
2026-04-22 04:18:33
threadlocal 关键字在 C++11 中引入,用于声明线程局部存储(ThreadLocal Storage, TLS)对象。这意味着每个线程都拥有该对象的独立副本,互不干扰。理解其生命周期——即何时构造、何时销毁——是编写高并发、无数据竞争程序的关键。 以下是指引。 C++ std::thr
C++ 多线程 线程局部存储
75 0
Java AtomicStampedReference解决ABA问题的版本号机制
2026-04-22 02:23:53
Java AtomicStampedReference解决ABA问题的版本号机制 在多线程环境中使用 CAS(CompareAndSwap)操作时,会遇到一个被称为“ABA 问题”的典型陷阱。简单来说,就是一个共享变量的值从 A 变成了 B,又从 B 变回了 A。其他线程若只检查值,会误以为它从未被
Java 多线程 并发编程
83 0
Java CompletableFuture.thenAccept与thenRun的返回值差异
2026-04-22 01:13:09
Java CompletableFuture.thenAccept与thenRun的返回值差异 在 Java 异步编程中,CompletableFuture 是处理并发任务的核心工具。理解 thenAccept 和 thenRun 的区别,对于精准控制任务执行流程和数据传递至关重要。以下指南将手把手
Java 异步编程 并发编程
85 0
Go语言select在多个channel就绪时的伪随机选择
2026-04-22 00:23:57
Go语言select在多个channel就绪时的伪随机选择 Go 语言中的 select 语句是处理多个 channel 并发操作的利器。当多个 channel 同时满足读写条件(即“就绪”)时,Go 运行时并不会按照代码书写的顺序或者先进先出的原则进行选择,而是采用了一种伪随机的算法。这种机制的设
Go语言 并发编程 select
83 0
Python asyncio与多线程的性能对比:IO密集场景实测
2026-04-21 20:21:54
Python asyncio与多线程的性能对比:IO密集场景实测 在处理网络爬虫、数据库查询或API请求等IO密集型任务时,CPU大部分时间都在等待IO操作完成。为了提升效率,Python提供了多线程和异步IO两种主流并发方案。本文将通过模拟访问500台数据库的场景,实测对比两者的性能差异,并解析背
Python Asyncio 多线程
93 0
Java CompletableFuture.supplyAsync的默认线程池陷阱
2026-04-21 13:21:28
Java CompletableFuture.supplyAsync的默认线程池陷阱 在Java后端开发中,为了提高接口响应速度,常使用 CompletableFuture.supplyAsync 进行异步编排。然而,若使用不当,这个看似简便的API会成为系统性能的“隐形杀手”。当系统在高峰期出现莫
Java 并发编程 线程池
107 0
Java AQS独占锁与共享锁的实现差异
2026-04-21 02:20:08
Java AQS独占锁与共享锁的实现差异 Java 并发包(JUC)中的 AbstractQueuedSynchronizer(AQS)是构建锁和同步器的基础框架。AQS 内部主要维护了一个由双向链表组成的同步队列,并使用一个 volatile int state 变量来表示同步状态。理解独占锁与共
Java AQS 独占锁
92 0
Java ThreadGroup的activeCount与枚举活动线程的竞态条件
2026-04-20 20:30:44
Java ThreadGroup的activeCount与枚举活动线程的竞态条件 在Java多线程开发中,ThreadGroup 类提供了一种将多个线程归类管理的便捷方式。开发者经常需要获取组内所有活动线程的引用以进行监控或批量操作。通常的做法是结合使用 activeCount 和 enumerat
Java 多线程 线程组
82 0
Java双重检查锁单例为什么要加volatile
2026-04-20 19:18:46
Java双重检查锁单例为什么要加volatile 在Java单例模式的实现中,双重检查锁定是一种常见的写法。很多开发者都知道代码中要加 volatile 关键字,但往往不清楚其深层原因。如果忽略这个关键字,在高并发场景下,你的程序可能会返回一个未经完全初始化的对象,导致不可预料的错误。 1. 审视标
Java单例模式 双重检查锁 volatile
75 0
C++多线程中数据竞争导致的未定义行为排查
2026-04-20 18:14:04
C++多线程中数据竞争导致的未定义行为排查 数据竞争是多线程编程中最棘手的问题之一。当两个或多个线程同时访问同一块内存,且其中至少一个是写操作,且没有适当的同步机制时,就会发生数据竞争。在C++中,这属于未定义行为,意味着程序可能崩溃、产生错误结果,或者看似正常运行。本文将指导你如何编写复现案例,并
C++多线程 数据竞争 未定义行为
84 0
Java CopyOnWriteArrayList的写时复制机制与适用场景
2026-04-20 15:25:50
Java CopyOnWriteArrayList的写时复制机制与适用场景 1. 认识CopyOnWriteArrayList 查看 Java集合框架中的CopyOnWriteArrayList类,你会发现它是ArrayList的一个线程安全变体。理解 CopyOnWriteArrayList的基本
Java集合 线程安全 写时复制
62 0
Java LockSupport.park与unpark的线程阻塞唤醒机制
2026-04-19 12:19:10
Java LockSupport.park与unpark的线程阻塞唤醒机制 LockSupport 是 Java 并发包 java.util.concurrent.locks 中最基础的线程阻塞原语,用于构建锁和其他同步工具。与传统的 Object.wait/notify 相比,它不需要获取监视器锁
Java 多线程 并发编程
84 0
Go 并发模式:worker pool 实现
2026-04-19 03:27:07
Go 并发模式:worker pool 实现 处理高并发任务时,无限制地创建 goroutine 会导致系统资源耗尽。Worker Pool(工作池)模式通过固定数量的 Worker 协同处理任务队列,既能利用并发优势,又能有效控制系统负载。以下是具体实现步骤。 理解 Worker Pool 的工作
Go语言 并发编程 工作池
80 0
Rust 异步编程:async/await 与 futures
2026-04-18 06:28:21
Rust 异步编程:async/await 与 futures 在 Rust 中处理高并发 I/O 操作(如网络请求、文件读写)时,传统的同步阻塞模式会严重浪费 CPU 资源。Rust 提供的 async/await 语法和 Future 机制,允许我们在单线程中高效处理大量并发任务。以下指南将带你
Rust编程 异步编程 并发编程
109 0
Go 并发模式:工作池与扇入扇出
2026-04-17 07:15:11
Go 并发编程的核心在于高效利用多核 CPU,同时避免资源耗尽。通过控制并发粒度,我们可以显著提升数据处理速度。以下是构建工作池与扇入扇出模式的实操指南。 第一部分:工作池 工作池模式的核心思想是限制并发运行的 Goroutine 数量。想象你有一个无限长的任务列表,但只有 3 个工人来处理,这样可
Go语言 并发编程 工作池
81 0
Python 线程池:concurrent.futures.ThreadPoolExecutor
2026-04-17 04:27:54
Python 线程池:concurrent.futures.ThreadPoolExecutor 在处理 I/O 密集型任务(如网络请求、文件读写)时,为了提高程序运行效率,我们需要使用多线程。Python 标准库中的 concurrent.futures 模块提供了一个高级接口 ThreadPoo
Python 多线程 线程池
137 0