- 线程?
- 可被并行执行的指令序列
- 可被操作系统调度处理的最小单元
- 线程也可被理解为轻量的进程
- 通常情况下线程是被包含在进程内
- 一个进程可包含多个线程,常规情况下,这些线程相互之间会共享资源
- 在多核心CPU上线程是的确可以同时运行的,同时运行的线程受核心数量影响
- 在单核CPU上线程是分时运行的,因为足够快我们感觉不到有什么问题
线程的一些应用场景
- 处理和执行异步性质的任务,GUI中通常需要单一Panel下显示多个实时图表。
- 运算更快,合理的利用当前已经普及的双核或多核CPU。
- 非阻塞、定时任务,I/O、调度、定期检测。
- 并行化,可并行化算法,如各循环分支被分步在不同的CPU上执行,但因为各循环的数据有存在依赖的情况所以依据具体场景实施方式也不同。
- 应用程序的响应,使我们产生程序性能非常好的错觉,但的确使我们工作的更加流畅。
基本概念
- 虚拟内存,操作系统对所有可访问的主存储资源的抽象
- CPU模式,实模式、保护模式
- 内核空间,CPU保护模式下会对系统自身运行环境进行保护,所以会把虚拟内存空间进行分离。内核空间不会参与系统虚拟内存管理的换入换出它会常驻内存。
- 用户空间,简单理解为非内核应用程序的虚拟内存空间,参与系统虚拟内存管理操作的换入换出,
进程与线程
进程是重量级的系统内核调度单元,它拥有操作系统给它分配的资源,如内存、File Handles、device Handles、sockets。进程一般不共享地址空间和资源,除非通过明确的方法如继承的资源句柄或共享内存段。
随着操作系统发展演化,进程演化为操作系统资源分配和管理的对象,而操作系统调度执行的最小单位演化为线程。
内核线程
- 内核线程是内核调度执行的最小单元
- 每个进程中至少存在一个内核线程
- 如果一个进程允许存在多个内核线程,这些内核线程将共享资源(内存、file Handles)
- 内核线程有自己内部非共享的资源(栈、程序计数器、内部存储空间)。
- 系统内核为每个逻辑核心分配一个线程,它可以将被阻塞的线程从逻辑核心中交换出去。
- 内核线程需要比用户线程更多的交换时间。
用户线程
- 用户线程运行在用户空间
- 操作系统通过在用户空间增加运行库来支持线程
- 运行库负责用户线程的调度执行、创建\销毁、多个用户线程间的消息传递、用户线程上下文管理。
- 内核是不会感知到用户线程存在,对用户线程的调度和管理工作都在用户空间内进行。
- 用户线程与内核线程的通信加入了轻型进程(LWP)概念。
- Green Thread是指通过虚拟机技术实现用户线程
纤程
- 比进程单位更小、更灵活
- 纤程不参与内核调度
- 纤程的调度执行由所归属的应用程序独立控制
用户线程、内核线程、轻型进程
- 1. 用户线程与内核线程是有映射关系的
- 2. JVM线程模型
- 内核线程在内核空间和用户空间会有线程映射关系
- JVM在内核空间只有一个内核线程与之对应
- JVM在用户空间创建的线程依据操作系统可以不同,但也可理解成在用户空间创建的线程都是用户级的对内核透明。