- 主题:C++20的协程是劫持了系统调用?
--
FROM 120.244.140.*
就是普通的用户态线程啊
【 在 stub 的大作中提到: 】
: --
: FROM 120.244.140.*
--来自微微水木3.5.12
--
FROM 36.112.201.*
【 在 buildtolast 的大作中提到: 】
: 就是普通的用户态线程啊
那io怎么办
--
FROM 114.242.250.*
碰到 IO 的时候切换到事件循环协程。所谓的切换就是汇编的 jmp 指令。
【 在 stub 的大作中提到: 】
: 那io怎么办
--
FROM 120.33.10.*
【 在 hgoldfish 的大作中提到: 】
: 碰到 IO 的时候切换到事件循环协程。所谓的切换就是汇编的 jmp 指令。
:
还是劫持了系统调用啊
--
FROM 123.126.3.*
不是啊。。原本就有 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.*
【 在 hgoldfish 的大作中提到: 】
: 不是啊。。原本就有 nonblocking 版本。一般说来,为协和构建的 IO 库都会主动调用 nonblocking io. 不必搞啥劫持系统调用。协程并不减少 read/write 这些系统调用的次数。甚至还多了。
: 考虑 sleep(), lock(), unlock() 这些函数原本会陷入内核态中,但是在协程库里面,一般实现为带着参数 jmp 到事件循环协程就行了。没有任何系统调用。协程主要减少线程陷入内核态的时间,实现得好的话,能够提升一点 IO 性能。
: 但是也有一些协程库,通过 hook libc 的 read/write 等函数,将它改造成 nonblocking io 同时切换协程来无缝适配现有的代码。不过这种做法现在很少了。严格来说,他们 hook 的 libc,并不能 hook 系统调用。
: ...................
还是太弱了啊,对存量lib没用
--
FROM 120.244.140.*
libgo 那些就是 hook 存量的 app.
【 在 stub 的大作中提到: 】
: 还是太弱了啊,对存量lib没用
--
FROM 120.33.10.*
【 在 hgoldfish 的大作中提到: 】
: libgo 那些就是 hook 存量的 app.
:
不知道什么时候可以语言级支持printf的时候切换协程
--
FROM 120.244.140.*
不是
C++20并不提供具体的以协程方式实现的IO
某种意义上,我粗浅的不准确的理解是,C++20只是规定了协程的接口,
而至于怎么调度一个一个的协程对象,那是要用协程来实现某种IO库的人的职责,
而且最终的IO以及协程对象的调度,还是需要构建在OS提供的IO机制,比如一个读socket的协程,会在某个线程epoll到socket可读之后,来resume这个协程resume,而这个某个线程,可能是某个线程池中的一个线程,甚至,也有可能就是程序的主线程
【 在 stub 的大作中提到: 】
--
FROM 123.168.94.*