有时一个进程也需要同时完成多个任务,比如微信聊天的同时还要给对方发文件,这时就我们就在进程内部给各个功能划分出不同的线程,相当于轻量级的进程。引入线程后,线程就成为最小的CPU执行单元,在分配非CPU的系统资源时,我们才用到进程。
线程的特点
多核CPU计算机,进程内部的各个线程可以占用不同的CPU。
共享内存地址空间,线程通信无需系统干预。
共享进程的资源。
每个线程都有线程ID、线程控制块(TCB)。
几乎不拥有系统资源。
操作系统中,线程又分为用户级和内核级线程。用户级线程(ULT,User-Level Thread)就是用户看到的进程内部的线程,线程管理工作都由应用程序在用户态下进行,不需要系统干预。内核级线程(KLT,Kernel-Level Thread)就是系统看到的进程,线程管理工作都由操作系统内核在核心态下进行。
多线程模型
多对一:多个用户级线程映射一个内核级线程。一旦一个线程阻塞后,其他线程就使用不了内核级进程。
一对一:一个用户级线程映射一个内核级线程。有时一个用户级线程可能需要多个内核级线程,这时就需要CPU切换到核心态,成本较高。
多对多:n个线程映射m个线程(m<=n),克服以上模型的缺点。