//进程切换开销大的原因?
//需要保存和恢复CPU上下文的信息
线程的属性
1、轻型实体
基本不拥有资源,只有一点能保证其独立运行的资源。如TCB,程序计数器
2、独立调度和分派的单位
3、可并发执行
4、共享进程资源
所有线程共享地址空间(所属进程的地址空间)和所属进程已打开的文件等
线程的实现
内核态和用户态
内核:软件程序,用来访问硬件的软件程序。
内核态和用户态的切换
当一个进程陷入内核代码中执行时,我们就称进程处于内核态
进入内核态的方式主要有三种:系统调用、异常和外围设备的中断
用户级线程
通过运行时系统来管理线程,运行时系统实际上是一套库函数,存在于用户空间内;
内核管理的还是进程,感觉不到线程的存在
线程切换不需要内核管理
优点:线程切换速度快,调度算法可根据应用程序需要而定制,可运行在任何操作系统上
缺点:内核只能将CPU以进程为单位分配,同一进程中的两个线程就无法分配到不同的CPU。
进程被阻塞,则进程内所有线程都会被阻塞
内核支持线程
内核管理所有线程,并向用户提供API接口来创建线程
内核即维护进程相关数据结构还维护线程相关数据结构
线程切换由内核来支持
调度以线程为单位
优点:在多处理器系统中,内核能够同时调度同一进程中的多