标签:使用 之间 用户 wait 虚拟 局限 动作 调度 成本
线程主要有三种实现方式:使用内核线程实现(1:1实现),使用用户线程实现(1:N实现),使用用户线程加轻量级进程混合实现(N:M实现)
JDK1.3之后,采用内核线程实现的方式实现JAVA线程。
线程调度主要有两种模式:一种是协同式线程调度,另一种是抢占式线程调度。
协同式线程调度的多线程系统,线程的执行时间由线程本身来控制,线程把自己的工作执行完了之后,要主动同志系统切换到另一个线程上去。好处是实现简单,坏处就是时间不可控制,可能某些任务阻塞了线程,一直无法释放占用线程资源。
抢占式线程调度,线程由操作系统来分配执行时间,线程切换不由线程本身决定,Java语言使用的是抢占式线程调度。(java语言设置了10个线程优先级,优先级越高的线程越容易被系统执行)
Java语言定义了6种线程状态,在任意时间点,一个线程只能有一种状态,并且可以通过特定的方法进行线程状态的切换。
内核线程调度的开销主要来源于内核态和用户态之间的状态转换,而这两种状态的转换的开销主要来自于响应中断、保护和恢复执行现场的成本。
用户线程的出现改善了线程切换的问题,起初的用户线程采用协同是调度,所以他有一个别名叫做“协程”。
协程的主要优势是轻量级,局限就是应用层实现的内容比较多,因为所有的线程状态的操作都要用户自己实现。
标签:使用 之间 用户 wait 虚拟 局限 动作 调度 成本
原文地址:https://www.cnblogs.com/wangb0402/p/12628661.html