并发编程

nice_lcj5207 天前
java·面试·并发编程·阻塞队列·concurrenthashmap·copyonwritearraylist
Java 并发容器入门:ConcurrentHashMap、CopyOnWriteArrayList、阻塞队列📌 先说结论普通集合(HashMap、ArrayList)都不是线程安全的,多线程同时改会出问题。并发容器就是 JDK 提供的线程安全版本。
nice_lcj5209 天前
java·开发语言·后端·面试·并发编程·内存泄漏·threadlocal
ThreadLocal 入门:它是怎么隔离数据的、为什么会导致内存泄漏📌 先说结论ThreadLocal 就干一件事:给每个线程存一份独立的变量副本,线程之间互不干扰。典型用途:一次请求的上下文(当前登录用户、traceId),一个线程从头用到尾,不用到处传参。
利威尔xu12 天前
后端·golang·并发编程·源码分析·sync
万字详解|Go 进阶(五):sync 包底层:Mutex 自旋 4 次转饥饿,WaitGroup 漏 1 个 Done 挂起 3000 goroutine你好,我是利威尔xu。这是《Go 进阶》系列的第五篇。前四篇我们把 GMP 调度器、GC 三色标记、内存分配器、channel 底层挨个拆了一遍——这篇轮到并发编程的另一半江山:sync 包。channel 负责"传话",sync 负责"站岗",线上 90% 的并发事故,案发现场都能在 sync 里找到同伙。
骑着蜗牛撵大象32718 天前
android·c++20·协程·并发编程·co_await·屏障同步
C++20 协程 × 屏障:手写一个 co_await 版 Barrier,让等待不再钉死线程C++20 把 co_await 带进了标准库,但很多人对协程的期待还停在「替代回调」上。其实它真正的价值之一,是重写那些「等待型」并发原语——最典型的就是屏障(barrier)。
AI人工智能+电脑小能手21 天前
java·线程池·并发编程·1024程序员节·批量处理·并行任务
一次请求打几个下游,这个Java并行任务工具类6个方法按序聚合📌 高并发系统设计: 基于Redis与MQ的秒杀系统架构:库存预减、防超卖与限流防刷全流程解析一组 Supplier 并行提交到指定线程池,按提交顺序聚合结果,支持整体超时与单任务异常隔离,把「一次请求要打好几个下游」收成一次调用。
zzu123zsw23 天前
java·网络·spring boot·网络协议·rpc·并发编程
面对多 RPC 扇入超时崩溃:深入 asyncTool 核心 DAG 编排与线程池隔离防护在现代分布式电商中台或高吞吐聚合网关(BFF)架构中,一个典型业务页面或接口(如商品详情页聚合、购物车结算收银台、个人中心仪表盘)往往需要在短短数百毫秒内,从底层数十个独立的微服务系统中并发拉取海量数据。
Thinker QAQ24 天前
java·python·go·并发编程·shared memory·message passing
并发编程(十一):Shared Memory 与 Message Passing——关系与组合使用前面的文章已经分别讨论了 Shared Memory 和 Message Passing 两种并发协作模型。
Thinker QAQ1 个月前
java·python·go·并发编程·channel·blockingqueue·message passing
并发编程(九):BlockingQueue 与 Channel——语言层的原子性、可见性与有序性在第零篇中,我们从多个并发执行单元如何交换数据、协调工作的角度,提出了两种典型的并发协作模型:前面几篇主要沿着 Shared Memory 展开,从 Mutex、Atomic 到 ReadWriteLock,解释了这些同步机制如何提供 Atomicity、Visibility 和 Ordering。
范中勤1 个月前
python·agent·协程·并发编程·asyncio
Python 协程(Coroutine)通俗讲解与技术原理:从 await 挂起到 Agent 高并发线程由操作系统内核调度;协程由代码(事件循环)在用户态自己调度的"轻量子程序"。类比(修正版)注意这个类比里最关键的一环:协程必须"主动让出"。如果有人占着工位不挪窝,整间办公室就他一个人干活。
范中勤1 个月前
python·llm·协程·并发编程·asyncio
Python Asyncio 协程与 LLM 异步并发原理技术文档(与 Java 对比|彻底澄清所有误区)Python 协程不是线程、不新开线程、不由 OS 调度。协程是:单 OS 线程内、用户态事件循环、协作式调度的轻量 IO 并发模型。
code2cat1 个月前
java·cas·并发编程
Java进阶篇之AtomicLongFieldUpdater:把累计额度留在对象字段中上一篇用AtomicIntegerFieldUpdater处理对象里的名额。这次把场景换成上传额度:一个账户最多累计接收100亿字节,多个上传任务同时申请额度。每次申请都要先判断容量,再把申请量加入累计值。
deepseek231 个月前
数据库·python·sqlite·并发编程·wal
SQLite WAL 开了仍报 database is locked?Python 后台任务的事务与幂等修复有团队把SQLite切换成WAL以后,以为多个Python进程能同时修改一个数据库文件。读请求确实更加顺畅,后台任务却仍然偶尔报database is locked。这不是WAL失效。SQLite官方明确说明:WAL允许读取和写入更好地并行,但一个时刻仍只有一名写入者。几个进程使用不同连接,也不会获得多名写入者同时提交的能力。了解这个限制以后,诊断重点就应当从一味增加超时,转到真正的事务边界。
code2cat1 个月前
java·开发语言·cas·并发编程·逻辑删除
Java进阶篇之AtomicMarkableReference:引用还在,标记已经改变上一篇用AtomicStampedReference记录引用的变化轮次。继续往下看,有些业务只需要表达两个状态:节点还有效,或者节点已被标记删除。把一个布尔值与引用一起观察,就能让提交条件带上这个状态。
无名猿1 个月前
c++·性能优化·并发编程·现代c++
手写一个线程池:任务队列、工作线程与停止顺序的三个设计点每个任务 new 一个 std::thread 是并发编程里最贵的偷懒方式:线程创建要走系统调用,栈空间按兆算,销毁又要再来一遍。当任务本身只有几微秒时,你花在「造线程」上的时间会比干活多几十倍。 线程池的思路很朴素:线程只创建一次,任务排队,谁空谁取。这篇从零把它写出来,然后把三个最容易写错的设计点讲透。
无名猿1 个月前
c++·性能优化·并发编程·现代c++
锁进阶:atomic_flag 自旋锁、shared_mutex 读写锁与无锁的代价std::mutex 不是免费的:一旦发生竞争,抢不到锁的线程会被挂进内核,等锁释放再被唤醒,这一挂一醒就是两次上下文切换,微秒级开销。可如果你的临界区只有「++counter」这么短,等锁的时间可能比干活的时间还长。这篇讲清锁的三条进阶路线:极短临界区用自旋锁(atomic_flag 实现)、读多写少用读写锁(shared_mutex)、以及「别迷信无锁,先测再选」。
code2cat1 个月前
java·cas·并发编程·aba
Java进阶篇之AtomicStampedReference:引用回到原值,版本戳仍能记住变化上一篇用AtomicReference发布一份完整状态。接着往下想:线程读到引用A,准备稍后提交;期间另一个线程把A换成B,再换回同一个A。这时,只比较引用还能看见中间那次变化吗?
code2cat1 个月前
java·并发编程·不可变对象·atomicreference
Java进阶篇之AtomicReference:一次替换引用,读到一份完整状态上一篇用LongAccumulator处理可以合并的统计样本。配置更新面对的是另一类问题:版本号、超时值和路由列表需要一起变化,读取者也希望拿到同一份状态。把这些字段装进不可变对象,再整体替换引用,能让更新边界更容易看清。
无名猿1 个月前
c++·内存管理·并发编程·现代c++
shared_ptr 的线程安全边界:计数安全不等于对象安全std::shared_ptr 大概是 C++ 里被误解最多的类型。很多人听说「它的引用计数是线程安全的」,就放心地把它当全局变量、在线程之间随手赋值,然后在大压力下偶发崩溃或者计数错乱。
无名猿1 个月前
c++·性能优化·并发编程·现代c++
shared_mutex 读写锁该不该用,以及 volatile 的三大误解「读多写少,那用读写锁肯定更快吧。」这句话是并发优化里最常见的直觉,也是最常翻车的一个。std::shared_mutex(C++17)确实做到了多读者并存、写者独占,但它的独占成本比 std::mutex 高,读者路径还要动一个共享计数器。下面先讲清该怎么用、什么时候别用,再顺手把 volatile 的三大误解拆掉。这两件事总是一起出现,因为动机都一样:想省掉那把锁。
Thinker QAQ1 个月前
java·python·go·并发编程·volatile·memory model
并发编程(七):volatile——从语言规则到 CPU前两篇从语言规则一路看到 CPU,解释了 Atomic 如何提供 Atomicity、Visibility 和 Ordering。