首页
文章列表
标签墙
返回找工具啦
并发编程
共 110 篇文章
Java Fork/Join框架的工作窃取算法解析
2026-06-14 12:47:23
Java Fork/Join框架的工作窃取算法解析 Fork/Join框架是什么? 想象一个复杂的大任务,比如对一个大型数组排序。你可以拆分这个任务:先把它分成两个更小的子数组分别排序,最后再把两个有序子数组合并起来。每个子任务还可以继续拆分,直到任务足够小,可以直接解决。这种“分而治之”的策略就是
JavaFork/Join框架
工作窃取算法
线程池
17
0
Elixir GenServer的call和cast在消息处理顺序上的语义差异
2026-06-04 18:45:50
Elixir GenServer的call和cast在消息处理顺序上的语义差异 理解Elixir中GenServer的 call 和 cast 的区别,是编写高效、可靠并发代码的关键。它们的核心差异不仅在于同步与异步,更在于它们如何影响消息在进程邮箱中的处理顺序。本指南将手把手带你解析这一关键语义,
Elixir
GenServer
call
48
0
Go语言的sync.Map与并发安全Map
2026-06-02 02:18:15
Go语言的sync.Map与并发安全Map 在Go语言中,当多个Goroutine(可以理解为轻量级线程)需要同时读写同一个map时,会发生竞争条件,导致程序崩溃或数据错乱。本文将指导你如何利用Go标准库中的sync.Map以及通过sync.RWMutex自制“并发安全Map”来解决这一问题,并帮助
Go语言
sync.Map
并发安全
47
0
Go语言的channel无缓冲与有缓冲的使用场景
2026-06-01 12:18:02
Go语言的channel无缓冲与有缓冲的使用场景 理解 channel 的工作模式是编写高效、无竞态的 Go 并发程序的关键。无缓冲 channel 和有缓冲 channel 虽然都是通信管道,但其行为和适用场景截然不同。 无缓冲 Channel:强制同步的握手协议 无缓冲 channel 在创建时
Go语言
channel
无缓冲channel
39
0
Java ThreadPoolExecutor的拒绝策略与自定义
2026-05-31 08:16:28
Java ThreadPoolExecutor的拒绝策略与自定义 在多线程编程中,ThreadPoolExecutor 是Java线程池的核心实现。当提交给线程池的任务数量超过其最大容量(即队列已满且线程数达到 maximumPoolSize)时,线程池会采取一个拒绝策略来处理新提交的任务。理解并正
Java线程池
拒绝策略
ThreadPoolExecutor
75
0
Go recover 为什么只能拦截当前 Goroutine 的 panic 而无法跨协程
2026-05-24 15:14:21
Go recover 为什么只能拦截当前 Goroutine 的 panic 而无法跨协程 理解 panic 与 recover 的本质 思考一个场景:你和同事各自负责独立的项目模块,你在工作中遇到了一个无法解决的致命错误(panic)。你需要的是在自己负责的范围内尝试修复或妥善处理这个错误(rec
Go语言
panic机制
recover机制
62
0
Go 语言 Goroutine 泄漏的常见模式与 runtime.NumGoroutine 监控
2026-05-24 09:21:08
Go 语言 Goroutine 泄漏的常见模式与 runtime.NumGoroutine 监控 Goroutine 泄漏是 Go 程序中一种隐蔽且危害巨大的资源问题。泄漏的 Goroutine 会持续消耗内存和调度资源,最终拖垮整个服务。本文将直接介绍几种最典型的泄漏模式,并提供一套基于 runt
Go语言
Goroutine泄漏
并发编程
71
0
Go sync.Cond 为什么必须在 Wait 前加锁与伪唤醒的防范
2026-05-24 03:13:13
Go sync.Cond 为什么必须在 Wait 前加锁与伪唤醒的防范 Go 语言的 sync.Cond 是一个强大的同步原语,用于在共享状态发生变化时通知等待的 goroutine。然而,它的使用比 mutex 和 channel 更容易出错。本文将直接剖析两个核心问题:为什么 Wait 方法调用
Go语言
sync.Cond
Wait方法
74
0
Go context.WithValue 为什么不适合用来传递业务参数
2026-05-23 18:09:25
Go context.WithValue 为什么不适合用来传递业务参数 在Go语言的并发编程中,context 包是一个核心工具,用于在goroutine之间传递截止时间、取消信号和请求范围的值。其中,context.WithValue 函数似乎提供了一种便捷的方式,在调用链中“捎带”一些数据。但许
Go语言
context.WithValue
业务参数
48
0
Java Phaser 同步屏障为什么比 CyclicBarrier 更适合动态注册任务
2026-05-22 15:19:38
Java Phaser 同步屏障为什么比 CyclicBarrier 更适合动态注册任务 在需要多个线程同步完成某个阶段任务,然后才能一起进入下一阶段的场景中,CyclicBarrier 是一个常用的工具。但当参与同步的线程数量在运行时可能发生变化,或者任务被动态划分时,CyclicBarrier
JavaPhaser
同步屏障
CyclicBarrier
58
0
Java StampedLock的乐观读失败后转换为悲观读锁
2026-05-17 23:30:38
Java StampedLock的乐观读失败后转换为悲观读锁 Java 并发包中的 StampedLock 提供了一种乐观读机制,通常比标准的 ReentrantReadWriteLock 更快。它的核心思路是:先试着读数据,如果发现数据正在被修改,再升级为悲观读锁。 核心操作流程 乐观读不会阻塞写
Java
并发编程
乐观读
68
0
Java Semaphore信号量实现限流与资源池控制
2026-05-15 18:21:35
Java Semaphore信号量实现限流与资源池控制 Java并发编程中,Semaphore(信号量)是一种核心同步工具,用于控制同时访问特定资源的线程数量。它通过维护一组“许可”,精确限制并发线程数,广泛应用于接口限流、数据库连接池控制等场景。 核心原理解析 Semaphore 的核心逻辑基于“
Java
并发编程
信号量
63
0
Go语言Map并发读写panic的复现与sync.Map的替代方案
2026-05-15 15:21:41
Go语言Map并发读写panic的复现与sync.Map的替代方案 Go语言的原生map并不支持并发读写操作。如果在多个协程中同时对同一个map进行读写,程序会直接触发panic导致崩溃。本文将指导你如何复现这一问题,并提供两种标准解决方案。 一、 复现并发读写Panic 通过一段简单的代码,可以快
Go语言
并发编程
Map
56
0
Java CompletableFuture组合异步操作的超时处理策略
2026-05-14 18:19:34
Java CompletableFuture组合异步操作的超时处理策略 在异步编程中,单个任务的超时控制相对简单,但多个 CompletableFuture 组合操作(如并行执行、链式调用)的超时处理往往容易失控。若未正确设置超时,系统线程可能被长时间阻塞,导致资源耗尽。 本文将针对三种常见场景,提
Java
异步编程
超时处理
88
0
Go语言sync.Once为什么能保证只执行一次
2026-05-11 04:40:26
Go语言sync.Once为什么能保证只执行一次 sync.Once 是 Go 标准库中一个非常实用的工具,用于确保某个操作在程序运行期间只执行一次。无论有多少个 goroutine 调用 Do 方法,传入的函数都只会被执行一次。这种机制在单例模式、资源初始化等场景中非常有用。本文将深入剖析 syn
Go语言
sync.Once
并发编程
73
0
Java ThreadPoolExecutor的allowCoreThreadTimeOut配置
2026-05-10 13:18:15
Java ThreadPoolExecutor的allowCoreThreadTimeOut配置 Java的ThreadPoolExecutor是线程池的核心实现,用于管理线程的生命周期和任务执行。其中,allowCoreThreadTimeOut是一个关键配置,它决定了核心线程是否可以超时并终止。
Java线程池
核心线程超时
线程管理
75
0
Go语言select在多个case同时就绪时的选择概率分布
2026-05-10 00:11:31
Go语言select在多个case同时就绪时的选择概率分布 引言 Go语言的select语句用于从多个channel操作中选择一个执行。当多个case同时就绪时,select会选择其中一个执行,但具体的选择机制和概率分布是许多开发者关心的问题。 select基本概念 select语句是Go语言中处理
Go语言
select语句
概率分布
60
0
Go语言Select语句的伪随机选择机制源码解析
2026-05-09 07:27:00
Go语言的select语句是并发编程中处理多个通道(channel)操作的关键工具。当select语句中存在多个可执行的case时,Go运行时会从中随机选择一个执行。这种“随机”并非完全的随机,而是基于特定算法实现的“伪随机”。本文将深入Go运行时源码,解析select语句的伪随机选择机制。 1.
Go语言
Select语句
并发编程
82
0
Java CAS操作的ABA问题与AtomicStampedReference的解决
2026-05-09 01:16:40
Java CAS操作的ABA问题与AtomicStampedReference的解决 Java中的CAS(CompareAndSwap)是一种无锁算法,用于实现多线程环境下的原子操作。它通过比较内存中的值与预期值,如果相等则更新为新值,否则不做任何操作。这种机制在java.util.concurre
Java
CAS
ABA问题
91
0
Go语言Goroutine泄漏检测:pprof与runtime.NumGoroutine
2026-05-07 16:26:14
Go语言Goroutine泄漏检测:pprof与runtime.NumGoroutine Goroutine泄漏是Go语言开发中常见且隐蔽的问题。当一个Goroutine被创建但未能正常退出,且系统不断创建此类Goroutine时,内存和CPU资源会被耗尽,导致服务崩溃。本文将指导你如何通过代码监控
Go语言
Goroutine泄漏
pprof
69
0
1
2
3
4
5
6
下一页