Java中内核线程理论及实例详解
作者:小妮浅浅
1、概念
内核线程是直接由操作系统内核控制的,内核通过调度器来完成内核线程的调度并负责将其映射到处理器上执行。内核态下的线程执行速度理论上是最高的,但是用户不会直接操作内核线程,而是通过内核线程的接口——轻量级进程来间接的使用内核线程。这种轻量级进程就是所谓的线程。
2、优点
由于内核线程的支持,每一个线程都是一个独立的单元,因此就算某一个线程挂掉了,也不会导致整个进程挂掉。
3、缺点
这种实现方式也存在局限性。由于是基于内核线程实现的,所以当涉及到线程的操作时(创建、运行、切换等)就涉及到系统调度,而系统调度则会导致用户态和内核态之间的来回切换,代价是比较昂贵的。
知识点扩展:
线程的实现
线程是比进程更轻量级的调度执行单位,在linux里面,线程和进程没有什么区别,唯一的就是在地址空间,线程的切换虚拟内存空间依然是相同的,但是进程切换是不同的。
目前主流的操作系统都提供的线程实现,java则提供的线程实现方法都是native的,因为不同的硬件和操作系统提供线程调度方式并不尽相同,所以java没用采用和平台无关的统一手段来实现。
用户线程实现
用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。
不需要用户态/核心态切换,速度快,操作系统内核不知道多线程的存在,因此一个线程阻塞将使得整个进程(包括它的所有线程)阻塞。使用用户线程实现的程序一般都比较复杂,java曾经用过,不过最后还是放弃了。
优点:
切换由用户态程序自己控制内核切换,不需要内核干涉,少了进出内核态的消耗。
缺点:
多核处理器很难讲线程映射到其他处理器上,单线程阻塞会造成该进程阻塞。
到此这篇关于Java中内核线程理论及实例详解的文章就介绍到这了,更多相关Java中内核线程是什么内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!