为什么要线程:
线程管理:thread
read()阻塞了整个进程
多进程实现:
线程:进程当中的一条执行流程
重新看待进程:
资源平台(管理资源)+线程=进程
资源平台:地址空间(代码段、数据段)、打开的文件等
有独立的部分,也有共享的部分
线程=进程-共享资源
安全可靠性没有保障
应用场景:
强调性能-线程
浏览器基本都采用进程的机制来实现(CHROME),某一个网页崩溃后,不会影响其他网页
独立的寄存器(程序计数器等)和堆栈
共享的代码段、数据及文件网络等等
进程是资源分配的单位、线程是cpu调度的单位
创建时间短:内存管理、文件管理
终止时间短:不需要考虑资源释放的问题
同一个进程的线程切换时,不需要切换页表,这就是高效的原因(cache信息、TLB信息)
线程的实现:
用户线程:由用户线程库来管理,内核线程看不见用户线程信息
内核线程由内核来管理
看不见,没特权
操作系统可以看得见
进程做资源管理
每次线程切换都需要进行由用户态->内核态的切换(?????)
https://www.jianshu.com/p/38ea929e1668(用户态与内核态)
轻量级进程:
内核支持的用户线程。一个进程可以有一个或多个轻量级进程,每个轻量级进程由一个单独的内核线程来支持(solaris/linux)