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