协程调度的开销相对内核调度的开销低。但也算比较大的开销。因为有 cpu cache miss 还要保存恢复寄存器。
写大带宽 IO 程序最大的开销应该是陷入内核取数据,处理完成后,再次调用操作系统 API 把数据发送出去。收发数据都要陷入内核,即使是用上 mmap() 也是一样陷入内核。
现在 linux 的 io_uring 出来,有了这东东,可以做成不陷入内核了。这个才是王道。
【 在 finlab 的大作中提到: 】
: 协程调度同样有开销。
: 不过现在硬件线程切换核心的成本确实太高。 除了线程切换本身,切换后核心缓存作废影响也很大。
: 所以要硬件和操作系统一起想办法。
: ...................
--
FROM 59.61.196.*