Java线程——Java线程模型理解
随笔目录
- 线程分类
- 线程模型
- 各语言使用线程模型
线程分类
- 内核线程:有操作系统内核支持的线程,这种线程有内核来完成线程切换
- 用户线程:从广义上来讲,一个线程不是内核线程,就是用户线程;额下一上的用户线程是建立在用户空间的线程库上,系统内核不感知线程存在的实现,用户线程的加你、同步、销毁和调度完全在用户状态中完成。
线程模型
- 一对一线程模型
- 实现方式:使用内核线程实现
- 相关概念
- 调度器(Thread Scheduler):内核通过操纵调度器对内核线程进行调度,并负责将线程的任务映射到各个处理器上
- 轻量级进程(LWP):属于用户线程,每个LWP都由一个内核线程支持,因此只有先支持内核线程,才能有轻量级进程。
- 定义:轻量级进程和内核线程之间1:1的关系称为一对一线程模型。
- 优点:实现简单,有内核分配处理线程的调度
- 缺点
- 所有线程的操作,比如创建、析构、同步都需要系统进行调用,系统调用的代价相对较高,需要在内核态和用户态相互切换
- 每一个轻量级进程都需要一个内核线程来支持,因此需要消耗一定的内核资源。因此一个系统支持内核线程的数量是有限制的
- 一对多线程模型
- 实现方式:使用用户线程实现
- 定义:用户线程是完全建立在用户控制的线程库上,系统内核是不需要感知线程存在的。如果线程实现得当,就可以支持规模更大的线程数量。这种进程与用户线程之间1:N的关系称之为一对多模型。
- 优点:不需要内核支援,消耗低
- 缺点
- 实现复杂——所有的的线程操作,比如创建、切换、调度等都需要用户去考虑
- 由于多个用户线程对应到同一个内核线程,如果其中一个用户线程阻塞,那么该其他用户线程也无法执行;
- 多对多线程模型
- 实现方式:内核线程与用户线程一起使用
各语言使用线程模型
- Java:一对一线程模型
- Go:多对多线程模型
- Python:多对一线程模型
分类:
Java
标签:
Java线程——线程模型理解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」