摘要:在Java8中,每一个Java线程都会直接映射到一个操作系统线程,是1:1线程模型,线程的创建、调度和销毁都由操作系统负责,JVM 只需要与操作系统交互即可。
资料引用:B站寒食君、《Java高并发核心编程·卷2》
资料引用:B站寒食君、《Java高并发核心编程·卷2》
了解Java线程前,需要先了解一下线程与CPU的关系。
三种线程模型
1:1线程模型
用户线程和内核线程1对1关系,用户线程的阻塞和唤醒会直接映射到内核线程,容易频繁引起内核态和用户态的切换,降低性能。
可以使用CAS来避免一部分的状态切换,Java使用AQS函数级锁减少使用内核级锁来提升性能。
N:1
多个线程映射到一个内核线程上,线程之间的调度在用户空间完成。
缺点:一个线程阻塞的话,其他线程也无法进行内核调用。
M:N
Java线程
在
Java8中,每一个Java线程都会直接映射到一个操作系统线程
,是1:1线程模型,线程的创建、调度和销毁都由操作系统负责,JVM 只需要与操作系统交互即可。
CPU与线程
CPU密集型程序
指任务的大部分时间都用于CPU计算,CPU的使用率较高。这类任务的特点是计算量大,对CPU的依赖性强,而对I/O操作的需求相对较少。
- 特点
- 计算密集,如图像处理、科学计算、数据加密解密等。
- CPU利用率高,I/O等待时间少。
- 并发性能提升有限,增加CPU核心数可以提高性能。
- 适合使用多线程或并行计算来提高效率。
- 优化策略
IO密集型程序
指任务的大部分时间都用于I/O操作,如磁盘读写、网络通信等,CPU的使用率较低。这类任务的特点是I/O操作频繁,对I/O资源的依赖性强,而计算量相对较小。
- 热点
- I/O操作频繁,如文件读写、数据库查询、网络通信等。
- CPU利用率低,I/O等待时间长。
- 并发性能提升明显,使用异步I/O、多线程或多进程可以显著提高性能。
- 适合使用异步编程模型,如回调、协程、事件驱动等。
- 优化策略
- 应用
总结
- CPU密集型任务主要关注计算效率,适合使用多线程或并行计算来提高性能。
- IO密集型任务主要关注I/O操作的效率,适合使用异步编程模型和多线程来提高性能。
理解这两类任务的特点和优化策略,有助于在实际开发中选择合适的编程模型和技术方案,从而提高系统的整体性能。
进程与线程
在
Java8中,每一个Java线程都会直接映射到一个操作系统线程
,是1:1线程模型,线程的创建、调度和销毁都由操作系统负责,JVM 只需要与操作系统交互即可。
启动一个JVM进程理论上至少有两个线程,一个main线程,一个GC垃圾回收线程。
进程:由程序段、数据段和进程控制块三部分组成的运行于操作系统上的应用程序的表现形式。CPU调度的最小单位。
线程:轻量级进程,主要组成为基本信息、程序计数器、栈内存。
基本信息一般有线程ID、线程名称、线程优先级、线程状态、其他信息等。没有自己独立的地址空间,共享同一个轻量级线程组下的地址空间。
因为栈帧(方法帧)的操作是先进后出的标准栈操作模式,因此存放栈帧的内存也叫做栈内存。
线程调度模型
线程的调度模型目前主要分为两种:分时调度模型和抢占式调度模型。
分时调度模型:系统平均分配CPU的时间片,所有线程轮流占用CPU,即在时 间片调度的分配上所有线程“人人平等”。
抢占式调度模型:系统按照线程优先级分配CPU时间片。优先级高的线程优先 分配CPU时间片,如果所有就绪线程的优先级相同,那么会随机选择一个,优先级高的线 程获取的CPU时间片相对多一些。
Java的线程调度就是“抢占式调度模型”,因此Java线程都有优先级。


被折叠的 条评论
为什么被折叠?



