Home
工程师部落
Cancel

Thread-Per-Message 模式、Worker Thread 模式、生产者-消费者模式

Thread-Per-Message 模式、Worker Thread 模式、生产者-消费者模式 是多线程中最基础且实用的分工设计模式,它们在任务分离、资源复用、吞吐优化方面各有优势。 一、Thread-Per-Message 模式(每个请求一个线程) 解释: 每个外部请求(如一个 socket 连接)由一个独立线程来处理。常见于早期 HTTP、TCP 服务实现中。 特点: ...

Reactor 和 Proactor 这两个高性能网络模式

演进 如果要让服务器服务多个客户端,那么最直接的方式就是为每一条连接创建线程。 其实创建进程也是可以的,原理是一样的,进程和线程的区别在于线程比较轻量级些,线程的创建和线程间切换的成本要小些,为了描述简述,后面都以线程为例。 处理完业务逻辑后,随着连接关闭后线程也同样要销毁了,但是这样不停地创建和销毁线程,不仅会带来性能开销,也会造成浪费资源,而且如果要连接几万条连接,创建几万个线程去应...

并发编程:无锁方案 CAS

在并发编程中,“无锁方案”是指不使用传统的互斥锁(如 synchronized、ReentrantLock)来实现线程安全,而是依赖 CAS(Compare-And-Swap)、原子变量、volatile、内存屏障等机制,达到无阻塞(Non-blocking)或最小阻塞的高性能并发效果。 一、无锁方案的设计思想 基于 CAS 操作的原子更新: CAS 保证变...

并发编程:起源

并发编程是计算机科学中的一个重要领域,尤其在多核 CPU 广泛使用、任务响应要求更高的今天,越来越成为开发者必须掌握的能力。 一、并发编程的历史来源 背景演进: 单核时代(1950s-1980s): 初期计算机处理速度慢,CPU资源非常宝贵。 为了提高CPU利用率,引入了多任务调度(如批处理系统、时分多道程序设计)。 ...

并发编程:单核计算机如何通过交替执行实现并发

任务A 与任务B 在单核 CPU 上交替运行 时间线 → ┌────────────────────────────────────────────────────────────┐ │ 单核CPU执行流程(通过时间片调度) │ ├────────────┬────────────┬────────────┬────────────┬─...

并发编程:可重入锁、不可重入锁、公平锁、非公平锁

并发编程:可重入锁、不可重入锁、公平锁、非公平锁 一、可重入锁(Reentrant Lock) 概念 同一个线程在外层方法获取锁之后,在进入该锁保护的内层方法时,可以再次获得锁,不会被自己阻塞。 特点: 锁维护一个持有线程的引用和重入计数器 每 lock() 一次,计数 +1,unlock() 一次,计数 -1 Java 示例 public class Reen...

并发编程:为什么并发编程容易出问题

在 Java 并发编程 中,容易出问题的根本原因主要来源于 Java 的内存模型(JMM)、线程调度机制、锁机制 Java 并发编程容易出问题的根本原因 1. Java 内存模型(JMM)导致的“可见性问题” 原因: Java 中每个线程有自己的工作内存(缓存),和主内存之间同步是延迟的。 一个线程修改变量后,另一个线程可能看不到最新值。 解决方式: 使...

并发编程:Java 线程生命周期

Java 线程生命周期 各状态解释与转换触发条件 状态 含义 转换触发条件 NEW(新建) 创建了线程对象,但未调用 start() 调用 start() 进入 Runnable RUNNABLE(可运行) 已启动线...

并发编程:Java 如何解决 可见性,有序性和原子性

在 Java 并发编程中,可见性、有序性、原子性是并发错误的三大核心根源。 其中 JMM (Java内存模型)用来解决 可见性 和 有序性 一、如何解决 可见性问题? 问题回顾: 一个线程修改了共享变量,其他线程看不到(缓存没有刷新)。 🔧 Java 解决方式: 机制 说明 volat...

并发编程:JDK7 和 JDK8 的 ConcurrentHashMap 锁实现方案

一、背景与目标 ConcurrentHashMap 是 Java 并发包中的高性能线程安全 Map,在 JDK7 与 JDK8 里,其底层实现机制发生了 重大变革。 主要目标: 支持高并发读写; 保证线程安全; 尽量减少锁竞争,提升吞吐性能。 二、JDK7:分段锁(Segment)机制 1. 结构概览 ConcurrentHashMap └── Segm...