1.用户级线程的缺点
用户级线程时完全在用户态内存中创建的一个指令序列,及用户级线程的TCB,栈等内容都是创建在用户态中的,操作系统完全不知道当前进程里有多个线程的存在。那么如果一个用户级线程阻塞了,为了确保CPU不空转,操作系统很可能就会切换到另一个进程执行。也就是说,如果一个用户级线程在内核中阻塞了,则这个进程的的所有用户级线程将全部阻塞(该模式下,进程的所有线程,都对应一个内核调度实体(KES),并且内核不知道这个进程有哪些线程。KES无法将其他线程,调度到其他处理器上。该进程(所有的线程)被阻塞,直到本次系统调用(比如I/O)结束。),这就限制了用户级线程的并发程度。从而限制了由并发性带来的计算机效率的提升。

因此我们需要一种能让操作系统感知到其存在的线程形式,在一个线程阻塞时,操作系统懂得切换到另一个线程中执行。这就是和内核级线程。
一个线程崩溃将会导致整个进程崩溃
因为所有线程共享进程地址空间,线程之间是完全透明的,一个线程崩溃就说明该线程此时已经出现了不可逆转的错误,该错误极有可能已经破坏掉了或者即将破坏掉进程的地址空间,因此在操作系统眼里看来继续运行其它线程是有很大风险的,因为大家共同运行的基础已经没有了(完好的地址空间),这就是典型的一粒老鼠屎坏了一锅粥。
2.内核级线程
内核级线程就是要让内核态内存和用户态内存合作创建一个指令执行序列,内核级线程的TCB等信息是创建在操作系统内核中的,操作系统通过这些数据结构可以感知和操纵内核级线程。

本文探讨了用户级线程的缺点,如并发限制和进程崩溃风险,以及内核级线程的优势,如多核优化和地址空间共享。重点介绍了线程切换过程和两者之间的关系,以及内核级线程的创建与切换细节。

2750

被折叠的 条评论
为什么被折叠?



