线程的实现能够分为两类:用户级线程和内核级线程。linux
在用户级线程中,有关线程管理的全部工做都由应用程序完成,内核意识不到线程的存在。应用程序能够经过使用线程库设计成多线程程序。编程
在内核级线程中,线程管理的全部工做都由内核完成,应用程序没有进行线程管理的代码,只有一个到内核级线程的编程接口。内核为进程及内部的每一个线程维护上下文信息,调度也在内核基于线程架构的基础上完成。多线程
(1)线程的建立、撤销和切换等,都须要内核直接实现,即内核了解每个做为可调度实体的线程。
(2)这些线程能够在全系统内进行资源的竞争。
(3)内核空间内为每个内核支持线程设置了一个线程控制块(TCB),内核根据该控制块,感知线程的存在,并进行控制。
在必定程度上相似于进程,只是建立、调度的开销要比进程小。有的统计是1:10架构
(1)用户级线程仅存在于用户空间。
(2)内核并不能看到用户线程。
(3)内核资源的分配仍然是按照进程进行分配的;各个用户线程只能在进程内进行资源竞争。并发
一、多对一模型性能
将多个用户级线程映射到一个内核级线程,线程管理在用户空间完成。用户级线程对操做系统不可见(透明)。操作系统
优势:线程管理是在用户空间进行的,于是效率比较高线程
缺点:一个线程在使用内核服务时被阻塞,整个进程都会被阻塞。设计
二、一对一模型blog
将每一个用户级线程映射到一个内核级线程。
优势:当一个线程被阻塞时,容许另外一个线程继续运行,并发能力强。
缺点:每建立一个用户级线程都须要建立一个内核级线程与其对应,这样建立线程的开销比较大,会影响到应用程序的性能。
三、多对多模型
将n个用户级线程映射到m个内核级线程上,要求m<=n;
特色:前二者的折中。