C/C++ 中的抢占式多任务:正在运行的线程可以被某个计时器中断并在任务之间切换吗?
许多使用绿色线程等的虚拟机和其他语言运行时都是以这些术语实现的;C/C++ 应用程序可以做同样的事情吗?
如果是这样,怎么做?
这将取决于平台,因此请根据特定平台对此的支持进行讨论;例如,如果您可以SIGALRM
在 Linux 上的处理程序中执行一些魔法来交换某种内部堆栈(可能使用longjmp
?),那就太好了!
我问是因为我很好奇。
我已经工作了几年来制作异步 IO 循环。在编写异步 IO 循环时,我必须非常小心,不要将昂贵的计算计算放入循环中,因为它会 DOS 循环。
因此,我对可以使异步 IO 循环恢复甚至完全支持某种绿色线程或此类方法的各种方式感兴趣。例如,对 a 中的活动任务和循环迭代次数进行采样SIGALRM
,然后如果检测到任务被阻塞,则将其他所有内容移至新线程,或者对此进行一些巧妙的变体以获得所需的结果。
最近在这方面有一些关于 node.js 的抱怨,在其他地方我看到了关于其他运行时(如 Go 和Haskell )的诱人评论。但是,让我们不要离是否可以在 C/C++ 中的单个线程中进行抢占式多任务处理的基本问题太远