首页
文章列表
标签墙
返回找工具啦
并发编程
共 105 篇文章
Go语言HTTP请求默认不超时导致Goroutine泄漏的问题
2026-04-29 05:24:46
Go语言HTTP请求默认不超时导致Goroutine泄漏的问题 Go语言标准库中的 net/http 包极其易用,特别是通过 http.Get 或 http.Post 等便捷函数发起请求时。然而,这种便捷性掩盖了一个潜在的风险:默认情况下,HTTP客户端是没有超时设置的。一旦服务端响应缓慢或发生网络
Go语言
HTTP请求
Goroutine泄漏
38
0
Java ThreadLocal在线程池复用时的内存泄漏风险
2026-04-29 03:19:15
Java ThreadLocal在线程池复用时的内存泄漏风险 Java中的 ThreadLocal 是实现线程隔离的利器,但在使用线程池的场景下,如果处理不当,它会变成内存泄漏的元凶。线程池的核心特性是“线程复用”,这导致ThreadLocal的生命周期变得不可控。本文将手把手带你分析其原因,并提供
Java
线程池
内存泄漏
57
0
Python asyncio.Event在协程间事件通知的用法
2026-04-29 01:15:27
asyncio.Event 是 Python asyncio 库中用于协程间简单通信的同步原语。它的作用类似于一个线程安全的标志位,允许一个或多个协程等待某个事件发生,直到另一个协程将该事件标志位设为“真”。这就好比比赛中的发令枪,裁判(主控协程)鸣枪(设置事件),所有运动员(等待协程)听到枪响后同
Python
asyncio
协程
68
0
Java线程池为什么不建议用Executors创建?参数配置的坑
2026-04-27 19:23:58
Java线程池为什么不建议用Executors创建?参数配置的坑 在Java并发编程中,线程池是提升性能、管理资源的重要工具。然而,很多开发者在创建线程池时,习惯直接使用 Executors 工具类提供的静态方法。这种做法在生产环境中极具风险,可能导致内存溢出(OOM)或资源耗尽。了解这些隐患并掌握
Java
线程池
并发编程
52
0
Go语言通道Channel关闭后读取的零值行为解析
2026-04-27 14:14:32
Go语言通道Channel关闭后读取的零值行为解析 创建 Go语言中的通道Channel是实现goroutine之间通信的核心机制。理解通道关闭后的行为对于编写高效的并发程序至关重要。 Go语言通道基础 定义 通道是Go语言中用于在goroutine之间传递数据的管道,是类型安全的,只能传输特定类型
Go通道
并发编程
零值行为
50
0
Go语言sync.Map的LoadAndDelete原子操作实现
2026-04-27 00:29:23
Go语言sync.Map的LoadAndDelete原子操作实现 在并发编程中,从 map 中读取一个键值对并立即将其删除是一个常见的需求。如果使用普通的 map 加锁操作,通常需要两步:先 Load 再 Delete。这不仅繁琐,而且在两步操作之间,其他协程可能会修改该键的值,导致数据不一致。Go
Go语言
sync.Map
并发编程
52
0
Java ThreadPoolExecutor的prestartCoreThread预启动机制
2026-04-26 14:16:16
Java ThreadPoolExecutor的prestartCoreThread预启动机制 在Java并发编程中,ThreadPoolExecutor 默认采用“懒加载”策略来管理核心线程,即只有在任务到来时才创建线程。这种机制虽然节省了资源,但在高并发初始化或对延迟敏感的场景下,会导致第一个任
Java
并发编程
线程池
52
0
Java StructuredTaskScope结构化并发的子任务管理
2026-04-26 07:25:11
Java StructuredTaskScope结构化并发的子任务管理 Java 21 正式推出了结构化并发,它通过 StructuredTaskScope 将一组相关的子任务视为一个单元进行管理。这种方式极大地简化了多线程编程,特别是当主任务需要等待多个子任务完成或任意一个完成时。本文将详细介绍如
Java
StructuredTaskScope
结构化并发
54
0
Go语言context.WithCancel的取消函数调用幂等性
2026-04-26 00:16:00
Go语言context.WithCancel的取消函数调用幂等性 在Go语言的并发编程中,context 包是控制goroutine生命周期的核心工具。许多开发者在处理错误退出或超时逻辑时,常常会产生一个顾虑:如果我多次调用同一个取消函数,程序是否会panic?或者是否会产生未知的副作用? 答案是:
Go语言
并发编程
Context包
56
0
Go语言atomic.Value在并发场景下的类型安全存储
2026-04-25 20:25:37
Go语言atomic.Value在并发场景下的类型安全存储 在并发编程中,频繁使用互斥锁(sync.Mutex)会导致读写性能瓶颈,特别是在读多写少的场景下。Go 标准库中的 atomic.Value 提供了一种无需加锁即可安全读取和写入值的机制。然而,直接使用 atomic.Value 极易因类型
Go语言
并发编程
类型安全
52
0
Python asyncio.gather的return_exceptions异常处理模式
2026-04-25 10:23:07
Python asyncio.gather的returnexceptions异常处理模式 asyncio.gather 是 Python 并发编程中用于批量运行协程的常用工具。默认情况下,只要其中有一个任务出错,整个流程就会立即抛出异常,导致未完成的任务被中断或无法获取已完成任务的结果。为了解决“部
Python
asyncio
并发编程
46
0
Go语言Race Detector在复杂并发场景下的误报排查
2026-04-25 06:14:42
Go语言Race Detector在复杂并发场景下的误报排查 Go 语言自带的 Race Detector(竞态检测器)是基于 ThreadSanitizer(TSan)构建的动态分析工具,它能帮助我们在运行时发现数据竞争。但在复杂的并发场景下,特别是在涉及 Cgo、Unsafe 指针操作或特定的同
Go语言
并发编程
数据竞争
58
0
Java ReentrantLock的公平锁与非公平锁性能差异实测
2026-04-25 05:21:49
Java ReentrantLock的公平锁与非公平锁性能差异实测 Java并发包中的ReentrantLock提供了两种锁获取模式:公平锁与非公平锁。了解两者的性能差异对于编写高并发程序至关重要。虽然公平锁听起来更符合直觉,但在实际的高性能场景中,非公平锁往往才是默认且更优的选择。 1. 理解核心
Java
ReentrantLock
并发编程
58
0
Go语言sync.Map的Range遍历与普通map的性能对比
2026-04-24 22:21:47
Go语言sync.Map的Range遍历与普通map的性能对比 在Go语言高并发编程中,选择合适的数据结构对性能至关重要。sync.Map 专为特定场景(如读多写少、Key集合稳定)优化,而普通 map 配合 sync.RWMutex 则是通用的并发安全解决方案。本指南将通过编写基准测试,直接对比两
Go语言
sync.Map
性能对比
50
0
Java线程的六种状态转换与sleep/wait/yield的区别
2026-04-24 07:27:16
Java线程的六种状态转换与sleep/wait/yield的区别 Java多线程编程中,线程状态的控制是核心难点。理解线程的生命周期以及常用方法的区别,能够帮助我们编写出更高效、更稳定的并发程序。 1. 理解Java线程的六种状态 Java线程的生命周期被明确定义在 Thread.State 枚举
Java多线程
线程状态
并发编程
53
0
Python concurrent.futures.as_completed按完成顺序获取结果
2026-04-24 03:28:59
Python concurrent.futures.ascompleted按完成顺序获取结果 在并发编程中,处理批量任务(如网络请求、文件读写或复杂计算)时,通常会遇到两个核心需求:一是加速执行(利用多线程或多进程并行),二是实时处理结果(谁先跑完先处理谁)。concurrent.futures.a
Python
并发编程
多线程
58
0
Java ReentrantReadWriteLock的锁降级机制实现
2026-04-23 06:16:13
Java ReentrantReadWriteLock的锁降级机制实现 在Java并发编程中,ReentrantReadWriteLock 提供了一种比互斥锁更灵活的锁机制,允许多个线程同时读取,但写入时独占。锁降级是一种重要的优化策略,它指的是持有写锁的线程在释放写锁之前,先获取读锁,随后再释放写
Java
并发编程
读写锁
44
0
Java LongAdder在高并发计数场景下的分段锁优化
2026-04-23 04:25:28
Java LongAdder在高并发计数场景下的分段锁优化 在并发编程中,统计计数(如点击量、请求数)是极其常见的需求。JDK 8 之前,我们通常使用 AtomicLong 或 synchronized 来实现线程安全计数。然而,在极高的并发场景下,这两种方案都会遇到性能瓶颈。LongAdder 是
Java
LongAdder
高并发
54
0
Go语言runtime.GOMAXPROCS对Goroutine并行度的影响
2026-04-22 15:17:18
Go语言runtime.GOMAXPROCS对Goroutine并行度的影响 理解GOMAXPROCS的基本概念 理解 runtime.GOMAXPROCS 是Go语言中控制并行度的关键参数。这个函数决定了Go程序同时运行多少操作系统线程来执行用户代码。默认情况下,GOMAXPROCS 的值等于逻辑
Go语言
GOMAXPROCS
并行处理
39
0
C++ std::thread局部存储thread_local的生命周期
2026-04-22 04:18:33
threadlocal 关键字在 C++11 中引入,用于声明线程局部存储(ThreadLocal Storage, TLS)对象。这意味着每个线程都拥有该对象的独立副本,互不干扰。理解其生命周期——即何时构造、何时销毁——是编写高并发、无数据竞争程序的关键。 以下是指引。 C++ std::thr
C++
多线程
线程局部存储
57
0
上一页
1
2
3
4
5
6
下一页