背景
进程通常需要同时做很多事,传统进程只能串行执行程序,引入线程增加并发度,线程成为程序执行流的最小单位
概念
轻量级进程,线程是一个基本的cpu的执行单元,线程间也可并发,进程变为除cpu之外的系统资源的分配单元
比较
线程为调度和程序执行流的最小单位,而进程是资源分配的基本单位
线程和进程都能并发
进程间并发,切换进程的运行环境,开销很大
线程间并发,若在同一进程内则无需切换环境,开销小
属性
线程是处理机调度的单位
多cpu计算机中,各个线程可占用不同的cpu
每个线程都有一个线程ID、线程控制块TCB
线程也有就绪、阻塞、运行三种状态
线程几乎不拥有系统资源
同一进程的不同线程间共享进程的资源
由于共享内存地址空间,同一进程的线程间通信甚至无需系统干预
同一进程中的线程切换不会引起进程切换,开销小
实现方式
分为用户级线程和内核级线程
用户级线程
用户级线程由应用程序通过线程库实现,线程管理由应用程序负责,在用户态下完成,对系统透明
内核级线程
内核线程管理由系统内核完成,在核心态下完成
存在同时支持用户级线程和内核级线程的系统,n个用户级别线程映射到m个内核线程上,但由于内核只看得见内核级线程,因此当只有两条内核级线程,而有4核cpu,无论如何,都只有两个核能被分配到。
多线程模型
多对一模型
多个用户级线程对应一个内核级线程
用户级线程切换在用户空间即可完成,不需切换核心态,线程管理开销小,但当一个线程阻塞,整个进程阻塞,并发度不高
一对一模型
n个用户级线程映射到n个内核级线程
当一个线程阻塞时,别的线程还可继续执行,并发能力强,但由于一个进程会占用多个内核线程,线程切换在内核完成,线程管理成本高
多对多模型
完美解决上述问题