Con*_*ion 4 erlang multithreading kernel coroutine green-threads
无论何时提到Erlang进程或绿线程或协同程序,与内核线程相比,它们总是被描述为"轻量级".通常给出的原因是内核线程涉及缓慢的上下文切换.
但究竟关于上下文切换的速度有多慢呢?与在用户区切换绿色线程相比,它有多慢?
上下文切换是主要(仅?)因素,它解决了事件驱动程序(如Nignx)和多处理程序(如Apache)之间性能和内存消耗的差异?
小智 12
在抢占式,单片式,多任务操作系统上的上下文切换涉及两个路径之一,通过某些系统服务调用(睡眠,互斥锁获取,等待事件,阻塞I/O)或通过中断来调度调度程序.调度程序决定交换正在运行的任务.
当调度程序交换任务时,会发生一些重量级的事情:
正如我所理解的那样,绿色线程任务非常简单.用户模式调度程序指示协程运行,直到协程生成.以上几点不同:
简而言之,用户模式中的上下文切换涉及一些库调用和写入堆栈指针寄存器.内核模式中的上下文切换涉及中断,用户/内核转换以及系统级行为,如地址空间状态更改和缓存刷新.
归档时间: |
|
查看次数: |
2532 次 |
最近记录: |