linux进程空间、线程、协程

1. 

  关于协程    计算机原理

  各种寄存器的介绍:参考

  软中断、硬中断:参考

"硬中断是外部设备对CPU的中断""软中断通常是硬中断服务程序对内核的中断""信号则是由内核(或其他进程)对某个进程的中断"

  golang 的 gmp 原理: 参考

  六种内存序的总结:参考

  锁机制:参考

  linux上下文切换:参考(结合进程空间,搞清楚发生cpu切换的时机,进程上下文切换和系统调用有什么区别,进程切换和线程切换、中断切换的区别)

进程是由内核管理的,进程切换只能发生在内核态。因此,进程上下文不仅包括虚拟内存、栈和全局变量等用户空间资源,还包括内核栈和寄存器等内核空间的状态。

所以进程上下文切换比系统调用要多出一步:

在保存当前进程的内核状态和 CPU 寄存器之前,需要保存进程的虚拟内存、栈等;并加载下一个进程的内核状态。

根据 Tsuna 的测试报告,每次上下文切换需要几十纳秒至微秒的 CPU 时间。这个时间是相当可观的,尤其是在大量进程上下文切换的情况下,很容易导致 CPU 花费大量时间来保存和恢复寄存器、内核栈、虚拟内存等资源。这正是我们在上一篇文章中谈到的,一个导致平均负载上升的重要因素。
线程的上下文切换其实可以分为两种情况:
首先,前后两个线程属于不同的进程。此时,由于资源不共享,切换过程与进程上下文切换相同;
其次,前后两个线程属于同一个进程。此时,由于虚拟内存是共享的,所以切换时虚拟内存的资源保持不变,只需要切换线程的私有数据、寄存器等未共享的数据。
显然,同一个进程内的线程切换比切换多个进程消耗的资源要少。这也是多线程替代多进程的优势。

 

posted @ 2022-06-08 17:07  AlexOne  阅读(132)  评论(0编辑  收藏  举报