我正在阅读并发。 我的脑海中有一些混淆相似的定义。 即: stream程 主题 “绿色线索” Protothreads 纤维 协同程序 Go语言中的“Goroutines” 我的印象是,区别在于:(1)是真正的并行还是多路复用; (2)是否在CPU,操作系统或程序中进行pipe理; 和(3..5)其他一些我无法识别的东西。 对于这些并行性方法之间的差异,有没有一个简洁而明确的指导?
我正在寻找在c#中实现协程(用户调度线程)的方法。 当使用C ++时,我正在使用光纤。 我在互联网上看到光纤不存在于C#中。 我想获得类似的function。 有没有什么“正确”的方式来实现在c#中的协程? 我曾经想过使用线程来实现这一点,它在调度程序线程上获取单个执行互斥量+ 1,并为每个协程释放这个互斥量。 但是这看起来非常昂贵(它迫使每个协程之间的上下文切换) 我也看到了yield iterator的function,但据我所知,你不能在内部函数内产生(只在原始的ienumerator函数中)。 所以这对我来说不是好事。
线和纤维有什么区别? 我听说过ruby的纤维,我听说他们有其他语言可以使用,有人可以简单地向我解释线程和光纤之间的区别。
我前段时间偶然发现了node.js,喜欢它。 但很快我发现它缺乏执行CPU密集型任务的能力。 所以,我开始使用Google,并得到这些答案来解决这个问题:纤维,networking工作者和线程(thread-a-gogo)。 现在哪一个使用是一个混乱,其中一个肯定需要使用 – 毕竟有一个服务器,只是在IO好,没有别的目的是什么? 需要build议! 更新: 我正在想办法, 只是需要build议。 现在,我想到的是:让我们有一些线程(使用thread_a_gogo或者webworkers)。 现在,当我们需要更多的时候,我们可以创造更多。 但是创作过程会有一些限制。 (不是由系统暗示,但可能是因为开销)。 现在,当我们超出限制时,我们可以分叉一个新的节点,并开始创build线程。 这样,它可以继续下去,直到我们达到一定的限度(毕竟,进程也有一个很大的开销)。 当达到这个限制时,我们开始排队任务。 每当一个线程变为空闲时,它将被分配一个新的任务。 这样,它可以顺利进行。 所以,那是我想到的。 这个想法好吗? 我对这个过程和线程有点新鲜,所以没有任何专业知识。 请分享你的意见。 谢谢。 🙂