不是啊。。原本就有 nonblocking 版本。一般说来,为协和构建的 IO 库都会主动调用 nonblocking io. 不必搞啥劫持系统调用。协程并不减少 read/write 这些系统调用的次数。甚至还多了。
考虑 sleep(), lock(), unlock() 这些函数原本会陷入内核态中,但是在协程库里面,一般实现为带着参数 jmp 到事件循环协程就行了。没有任何系统调用。协程主要减少线程陷入内核态的时间,实现得好的话,能够提升一点 IO 性能。
但是也有一些协程库,通过 hook libc 的 read/write 等函数,将它改造成 nonblocking io 同时切换协程来无缝适配现有的代码。不过这种做法现在很少了。严格来说,他们 hook 的 libc,并不能 hook 系统调用。
【 在 stub 的大作中提到: 】
: 还是劫持了系统调用啊
--
FROM 120.33.10.*