技术栈
并发编程
poemyang
17 小时前
golang
·
并发编程
Goroutine间的“灵魂管道”:Channel如何实现数据同步与因果传递?
Channel是连接Goroutine的“管道”,是CSP理念在Golang中的具象化实现。它不仅是数据传递的队列,更是Goroutine间同步的天然工具,让开发者无需诉诸显式的锁或条件变量。
poemyang
2 天前
golang
·
并发编程
“不要通过共享内存来通信”——深入理解Golang并发模型与CSP理论
Golang 在设计上另辟蹊径,其并发哲学的核心信条是:“不要通过共享内存来通信,而要通过通信来共享内存。” (Do not communicate by sharing memory; instead, share memory by communicating.) 这一理念源自通信顺序进程(Communicating Sequential Processes, CSP)理论。
gopyer
2 天前
golang
·
go
·
游戏开发
·
并发编程
180课时吃透Go语言游戏后端开发11:Go语言中的并发编程
第11课我们来讲Go语言中的并发编程。在游戏开发里,并发编程可是个厉害的“武器”,它能让游戏同时做很多事情,就像游戏角色一边移动,一边播放技能特效,还能实时处理网络消息,这些都可以通过并发编程来实现。
23516
3 天前
java
·
开发语言
·
jvm
·
分布式
·
后端
·
并发编程
·
原理
【并发编程】详解volatile
volatile是什么?它能解决什么问题?它的底层实现原理是什么?和synchronized有啥区别?哪些场景适合用volatile?
切糕师学AI
8 天前
多线程
·
并发编程
【多线程】无锁数据结构(Lock-Free Data Structures)是什么?
本文来自于我关于多线程系列文章。欢迎阅读、点评与交流 1.【多线程】互斥锁(Mutex)是什么? 2.【多线程】临界区(Critical Section)是什么? 3.【多线程】计算机领域中的各种锁 4.【多线程】信号量(Semaphore)是什么? 5.【多线程】信号量(Semaphore)常见的应用场景 6.【多线程】条件变量(Condition Variable)是什么? 7.【多线程】监视器(Monitor)是什么? 8.【多线程】什么是原子操作(Atomic Operation)? 9.【多线程
切糕师学AI
10 天前
cpu
·
并发编程
·
计算机体系结构
·
芯片技术
·
缓存锁
缓存锁(Cache Lock)是什么?
缓存锁 是现代处理器中为了提升性能,对传统的总线锁进行优化后的一种更精细的锁机制。缓存锁 是指CPU在执行原子操作时,不锁定整个系统总线,而是只锁定当前CPU核心的局部缓存行,并通过缓存一致性协议(如MESI)来保证操作原子性的一种机制。
hour_go
12 天前
c++
·
并发编程
·
互斥锁
·
线程同步
·
原子操作
C++多线程编程入门实战
本文旨在帮助初学者快速理解和跑通C++多线程编程,涵盖从基础概念到实际应用的完整路径。在多核处理器成为主流的今天,多线程编程是提高程序性能的关键技术。它允许程序同时执行多个任务,充分利用硬件资源。
poemyang
18 天前
多线程
·
并发编程
·
java并发编程
揭秘JUC:volatile与CAS,并发编程的两大基石
JUC(java.util.concurrent)并发包,作为Java语言并发编程的利器,由并发编程领域的泰斗道格·利(Doug Lea)精心打造。它提供了一系列高效、线程安全的工具类、接口及原子类,极大地简化了并发编程的开发流程与管理复杂度。
poemyang
20 天前
java
·
并发编程
·
java并发编程
从MESA模型到锁升级:synchronized性能逆袭的底层逻辑
管程(Monitor)是一种用于管理共享资源访问的程序结构,能确保同一时刻只有一个线程访问共享资源,解决并发编程中的互斥和同步问题。MESA模型是管程的经典实现,主要由入口等待队列和条件变量等待队列构成。 1)入口等待队列:确保线程互斥,多个线程试图进入管程时,仅一个线程能成功,其余线程在入口等待队列中排队。 2)条件变量等待队列:解决线程同步问题,线程在管程内执行时,若条件不满足需等待其他线程操作结果,则进入相应条件变量的等待队列。 当线程被notify或notifyAll唤醒后,不会立即执行,而是
poemyang
21 天前
多线程
·
并发编程
·
java并发编程
一把锁的两种承诺:synchronized如何同时保证互斥与内存可见性?
在多线程环境中,临界区(Critical Section)是指一次只能由一个线程执行的代码段,这些代码通常涉及对共享资源(如变量、数据结构、文件或数据库连接)的访问或修改。临界区的存在是为了解决并发控制中的两大核心问题。 1)数据不一致性:如果多个线程同时对共享资源进行写操作,可能会破坏数据的完整性,导致其状态与预期不符。 2)竞态条件:程序的执行结果依赖于线程调度和执行的偶然顺序,这使得程序行为变得不可预测,难以调试。
失散13
1 个月前
java
·
缓存
·
架构
·
并发编程
并发编程——17 CPU缓存架构详解&高性能内存队列Disruptor实战
CPU高速缓存,是介于CPU与主内存之间,容量小但速度很快的存储器;由于CPU速度远高于主内存,若CPU直接从主内存存取数据需等待。而高速缓存中保存着CPU刚用过或循环使用的部分数据,当CPU再次使用这些数据时,可直接从缓存调用,减少等待时间,提升系统效率;
失散13
1 个月前
java
·
架构
·
并发编程
并发编程——06 JUC并发同步工具类的应用实战
JDK 提供了比synchronized更加高级的各种同步工具,包括ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier等,可以实现更加丰富的多线程操作;
失散13
1 个月前
java
·
架构
·
并发编程
并发编程——11 并发容器(Map、List、Set)实战及其原理分析
Java 基础集合(如 ArrayList、LinkedList、HashMap)非线程安全。为了解决线程安全问题,Java 最初提供了同步容器(如 Vector、Hashtable、SynchronizedList),但它们通过 synchronized 实现全局锁,多线程竞争时会“串行化”执行,并发性能差。为了兼顾线程安全和并发性能,JUC(java.util.concurrent)包提供了并发容器,通过更精细的锁机制或无锁算法,大幅提升多线程场景下的吞吐量;
创创ccccc
2 个月前
java
·
并发编程
·
juc
·
aqs
十三、抽象队列同步器AQS
AQS是AbstractQueuedSynchronizer的简称,也即抽象队列同步器,从字面来理解:
poemyang
2 个月前
多线程
·
并发编程
·
java并发编程
·
happens-before
没有Happens-Before?你的多线程代码就是‘一锅粥’!
内存模型与happens-before:开发者与硬件的和平条约在前文中,提到处理器通过一些特殊指令(如 LOCK、CMPXCHG、内存屏障等)来保障多线程环境下程序的正确性。然而,这种做法仍然存在几个显著问题。 1)底层指令实现复杂且晦涩:处理器指令的细节往往难以理解,开发者需要付出大量的时间和精力来掌握这些低级实现。 2)不同平台间的兼容性问题:不同硬件架构和操作系统对这些指令的支持和实现方式各不相同,这要求程序在设计时考虑到跨平台的兼容性和一致性。 3)多线程数据操作的复杂性:随着程序业务逻辑的多变,
GEM的左耳返
3 个月前
性能优化
·
并发编程
·
java面试
·
jvm调优
·
数据库优化
·
gc算法
Java面试实战:企业级性能优化与JVM调优全解析
面试官:谢飞机同学,今天我们聚焦企业级Java性能优化,重点考察JVM调优、并发编程和数据库性能优化技术。 谢飞机:(自信地)面试官好!性能优化我最拿手了!JVM参数我能背二十多个,线程池也调过,SQL优化更是强项!
poemyang
3 个月前
多线程
·
并发编程
·
java并发编程
·
有序性
我的代码出现幻觉?说好的a = 1; x = b,怎么成了x = b; a = 1?
有序性:代码执行的幻觉前面讲到通过缓存一致性协议,来保障共享变量的可见性。那么是否还有其他情况,导致对共享变量操作不符合预期结果。可以看下面的代码:
poemyang
3 个月前
并发编程
·
volatile
·
java并发编程
·
可见性
我的代码背叛了我?为什么 a=1, b=2,最后x和y都等于0?
随着多核架构的普及,并发编程已成为开发者不可或缺的核心技能。在学习过程中,开发者常会遇到这样的困惑:正确编写的单线程代码,为何在并发环境下可能瞬间失效?看似有序的语句执行后,为何结果却混乱不堪?这些问题,都指向了编程领域的一个关键课题——内存模型。 本文以Java语言为例,剖析共享数据在并发环境中的传播机制、指令执行的有序性保障,以及原子操作的实现原理,从而揭示多线程程序从代码到处理器执行的底层逻辑。同时,通过剖析工程实践中常见的并发异常,并追溯其根本原因,帮助读者构建对并发编程本质的系统理解。
一只IT攻城狮
3 个月前
java
·
算法
·
多线程
·
并发编程
构建一个简单的Java框架来测量并发执行任务的时间
假设我们使用一个简单的任务(如打印线程名称和任务编号),并运行这个方法。为了更直观地理解这段代码的运行逻辑和输出效果,我们可以补充具体的输入参数,并展示完整的运行过程和最终输出。假设我们使用一个简单的任务(如打印线程名称和任务编号),并运行这个方法。
charlie114514191
3 个月前
笔记
·
qt
·
面试
·
刷题
·
并发编程
·
异步
我的Qt八股文笔记2:Qt并发编程方案对比与QPointer,智能指针方案
Qt 提供了多种并发编程方案,每种方案都有其优势和适用场景。方案描述:QThread 是 Qt 提供的低级线程抽象。它允许你创建和管理独立的执行流。通常,你不会直接在 QThread 子类中重写 run() 方法来执行任务(尽管这在旧版或简单场景中可以),而是将一个 QObject 子类的实例移动到 QThread 实例中,让该 QObject 来执行任务。这种方式更符合 Qt 的事件驱动模型。