java线程模型

java线程模型:
内核线程 ( Kernel-Level Thread,KLT) 就是直接由操作系统内核( Kernel, 下称内核) 支持的线程, 这种线程由内核来完成线程切换, 内核通过操纵调度器( Scheduler) 对线程进行调度, 并负责将线程的任务映射到各个处理器上。 每个内核线程可以视为内核的一个分身,这样操作系统就有能力同时处理多件事情, 支持多线程的内核就叫做多线程内核( MultiThreads Kernel) 。程序一般不会直接去使用内核线程, 而是去使用内核线程的一种高级接口—— 轻量级进程 ( Light Weight Process,LWP) , 轻量级进程就是我们通常意义上所讲的线程, 由于每个轻量级进程都由一个内核线程支持, 因此只有先支持内核线程, 才能有轻量级进程。 这种轻量级进程与内核线程之间1:1的关系称为 一对一的线程模型。(基本上java中的线程就是这种模型)
由于内核线程的支持, 每个轻量级进程都成为一个独立的调度单元, 即使有一个轻量级进程在系统调用中阻塞了, 也不会影响整个进程继续工作, 但是轻量级进程具有它的局限性: 首先, 由于是基于内核线程实现的, 所以各种线程操作, 如创建、 析构及同步, 都需要进行系统调用。 而系统调用的代价相对较高, 需要在用户态( User Mode) 和内核态( KernelMode) 中来回切换。 其次, 每个轻量级进程都需要有一个内核线程的支持, 因此轻量级进程要消耗一定的内核资源( 如内核线程的栈空间) , 因此一个系统支持轻量级进程的数量是有限的。
关于线程调度模式,java中采用的是抢占式调度的多线程系统,每个线程将由系统来分配执行时间, 线程的切换不由线程本身来决定 。 在这种实现线程调度的方式下, 线程的执行时间是系统可控的, 也不会有一个线程导致整个进程阻塞的问题。

猜你喜欢

转载自blog.csdn.net/wb_snail/article/details/80739536
今日推荐