why
what
how
为什么要有线程?
- 单进程性能问题
- 多进程间 资源共享,通信,进程创建,切换,结束带来的开销问题
线程的定义
进程中的一条执行流程,成为cpu调度的最小单元
同一个进程内的线程共享同一片地址空间,代码,数据,内存,文件,网络等资源
TCB 线程控制块
代替进程的执行过程
优点:
并发执行 共享数据
缺点:
一个线程崩溃,同一个进程内其他线程也崩溃,共享资源被破坏
网页:早期是线程实现,现在防止某个网页上的恶意代码导致浏览器崩溃,因此现在的浏览器采用进程方式打开网页,网页间互不影响,注重安全性
线程和进程的比较
线程的创建和结束更快
线程的切换开销更小(不用切换页表)
线程间可以不通过内核通信
实现方式
用户线程
os看不到的线程,具体由用户级的线程库函数进行管理
线程的状态变换,tcb 都由线程库管理,不涉及用户态,内核态切换,可以自定义调度算法
用户线程不主动交出cpu执行权,进程中其他线程无法获得cpu
线程发出阻塞的系统调用,整个进程会被阻塞
内核线程
windows
操作系统可以看得见的线程
tcb 位于 内核中, 一个pcb 对应 tcb list,tcb 管理调度
一个线程的切换带来用户态到内核态的转换,带来额外开销
轻量级进程
Linux,solaris
linux 一个进程对应多个轻量级进程lwp,每个量级的进程对应一个内核线程