Skip to content

Commit

Permalink
docs: 修改了一些排版问题
Browse files Browse the repository at this point in the history
  • Loading branch information
tangx committed Apr 16, 2021
1 parent ff2aa00 commit 5b67179
Showing 1 changed file with 4 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -93,21 +93,21 @@

协程切换比线程切换快主要有两点:

(1)协程切换**完全在用户空间进行**线程切换涉及**特权模式切换,需要在内核空间完成**
(1)协程切换**完全在用户空间进行**线程切换涉及**特权模式切换,需要在内核空间完成**

(2)协程切换相比线程切换**做的事情更少**,线程需要有内核和用户态的切换,系统调用过程。



#### 协程切换成本:

协程切换非常简单,就是把**当前协程的 CPU 寄存器状态保存起来,然后将需要切换进来的协程的 CPU 寄存器状态加载的 CPU 寄存器上**就 ok 了。而且**完全在用户态进行**,一般来说一次协程上下文切换最多就是**几十ns** 这个量级。
协程切换非常简单,就是把**当前协程的 CPU 寄存器状态保存起来,然后将需要切换进来的协程的 CPU 寄存器状态加载到 CPU 寄存器上**就 ok 了。而且**完全在用户态进行**,一般来说一次协程上下文切换最多就是**几十ns** 这个量级。



#### 线程切换成本:

系统内核调度的对象是线程,因为线程是调度的基本单元(进程是资源拥有的基本单元,进程的切换需要做的事情更多,这里占时不讨论进程切换),而**线程的调度只有拥有最高权限的内核空间才可以完成**,所以线程的切换涉及到**用户空间和内核空间的切换**,也就是特权模式切换,然后需要操作系统调度模块完成**线程调度(task***struct),*而且除了和协程相同基本的 CPU 上下文,还有线程私有的栈和寄存器等,说白了就是上下文比协程多一些,其实简单比较下 task_strcut 和 任何一个协程库的 coroutine 的 struct 结构体大小就能明显区分出来。而且特权模式切换的开销确实不小,随便搜一组测试数据 [3],随便算算都比协程切换开销大很多。
系统内核调度的对象是线程,因为线程是调度的基本单元(进程是资源拥有的基本单元,进程的切换需要做的事情更多,这里占时不讨论进程切换),而**线程的调度只有拥有最高权限的内核空间才可以完成**,所以线程的切换涉及到**用户空间和内核空间的切换**,也就是特权模式切换,然后需要操作系统调度模块完成**线程调度(task_struct)**而且除了和协程相同基本的 CPU 上下文,还有线程私有的栈和寄存器等,说白了就是上下文比协程多一些,其实简单比较下 task_strcut 和 任何一个协程库的 coroutine 的 struct 结构体大小就能明显区分出来。而且特权模式切换的开销确实不小,随便搜一组测试数据 [3],随便算算都比协程切换开销大很多。



Expand Down Expand Up @@ -222,7 +222,7 @@ KiB Swap: 969960 total, 563688 free, 406272 used. 168812 avail Mem

free的mem为1675844,

所以**20万个协程占用了约 50万KB****平均一个协程占用约2.5KB**
所以 **20万个** 协程占用了约 **50万KB**, **平均** 一个协程占用约 **2.5KB**



Expand Down

0 comments on commit 5b67179

Please sign in to comment.