线和纤维有什么区别?我听说过 ruby 中的纤维,并且我听说它们有其他语言版本,有人可以简单地向我解释一下线程和纤维之间的区别。
用最简单的术语来说,线程通常被认为是抢占式的(尽管这可能并不总是正确的,具体取决于操作系统),而光纤被认为是轻量级的协作线程。两者都是您的应用程序的单独执行路径。
使用线程:当前执行路径可能随时被中断或抢占(注意:此语句是一个概括,可能并不总是适用,具体取决于操作系统/线程包/等)。这意味着对于线程来说,数据完整性是一个大问题,因为一个线程可能会在更新一大块数据的过程中停止,从而使数据的完整性处于不良或不完整的状态。这也意味着操作系统可以通过同时运行多个线程来利用多个 CPU 和 CPU 内核,并将其留给开发人员来保护数据访问。
使用纤程:当前执行路径仅在纤程产生执行时才会中断(与上述相同)。这意味着光纤总是在明确定义的位置开始和停止,因此数据完整性不再是问题。此外,由于光纤通常在用户空间中进行管理,因此无需进行昂贵的上下文切换和 CPU 状态更改,这使得从一根光纤更改为下一个光纤非常有效。另一方面,由于没有两条纤程可以完全同时运行,因此仅使用纤程并不能利用多个 CPU 或多个 CPU 内核。