知识卡片

线程是调度粒度

普通读书笔记卡 · 1502

内容

线程把“资源拥有”和“执行调度”拆开:进程是操作系统分配内存、文件等资源的最小单位,线程才是 CPU 调度的最小单位,一个进程内的多个线程共享同一份方法区内存、堆内存和系统资源。这种共享让线程间通信更轻(不需要跨进程 IPC),但也把竞态条件带进程序——后续所有锁、CAS、JMM 机制,本质上都是在管理“共享内存换来的这份代价”。

参考来源

- 位置:《Java高并发核心编程.卷2,多线程、锁、JMM、JUC、高并发设计模式》第1章《多线程原理与实战》1.2.2节《线程的基本原理》、1.2.3节《进程与线程的区别》(源文件:_epub-src/OEBPS/Text/chapter6.xhtml、chapter7.xhtml) - 结论依据:原文明确给出“线程是CPU调度的最小单位,进程是操作系统分配资源的最小单位”的定义,并指出“进程内部的各个线程之间共享进程的方法区内存、堆内存、系统资源”,因此可以推出线程把资源拥有和调度执行分离、共享内存是竞态根源的结论。 - 原始内容:线程是“进程代码段”的一次顺序执行流程……线程是CPU调度的最小单位,进程是操作系统分配资源的最小单位。线程的划分尺度小于进程,使得多线程程序的并发性高……进程内部的各个线程之间并不完全独立,各个线程之间共享进程的方法区内存、堆内存、系统资源(文件句柄、系统信号等)。