点击关注和关注同名公众号,即时获取更新~
内核线程
Kernel-Level Threads,内核线程是由操作系统内核直接创建、管理和调度的线程,是内核调度的实体,是CPU时间分配的基本单位。映射关系为:1:1,即一个用户线程直接映射到一个内核线程,内核清楚的知道系统中存在的每一个内核线程,并可以独立的调度他们。
当应用程序发起线程创建请求时,这个请求会通过系统调用传递给操作系统内核;内核在内核空间为该线程创建并维护一个线程控制块(TCB),分配必要的内核资源;内核的调度器将所有内核线程放在统一的就绪队列中,根据优先级、时间片等策略进行调度;每个内核线程都可以独立的分配到任何一个CPU核心上运行;当线程发生切换时,无论是统一进程还是不同进程间的线程切换,都需要内核介入,需要保存当前线程上下文并恢复下一个线程的上下文。
内核可以感知到每一个线程,并能独立调用,可以将不同内核线程同时分配到不同的CPU核心上运行,这使得多线程程序能够真正利用多核处理器的计算能力,实现并行计算;并且内核可以在系统范围内进行多路复用,如果一个线程发生了阻塞操作,内核会将该线程置于阻塞状态,然后调用其他线程继续运行,这极大的提高了系统的整体并发性和响应能力。但是内核的创建和管理成本高,创建、销毁、同步和调度操作都需要进行系统调用,系统调用需要在内核态和用户态之间切换,这个开销远大于在用户空间内完成的函数调用。每个内核线程都需要在内核中分配一些数据结构和资源,系统能同时支持的线程数量是有限的,无法支持海量并发;内核线程的功能和性能依赖于内核实现,如果内核支持较差,上层应用的性能也会受到影响。
内核线程是现在并发编程的基石,它通过在操作系统层面的原生支持,在性能(并行性)和功能(阻塞安全)之间取得很好的平衡,使得开发稳定、高效的多线程应用程序成为可能,真正释放了多核硬件的潜力。
用户线程+轻量级进程混合实现
为了结合上述两种线程实现模式的优点,克服各自的缺点,提出了混合模型,其核心是引入了轻量级进程(Light Weight Process,LW

最低0.47元/天 解锁文章
750

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



