我正在用 ruby(重新)编写一个套接字服务器,希望能对其进行简化。在阅读有关 ruby 套接字的信息时,我遇到了 site也就是说,多线程 ruby 应用程序仅在一台机器中使用一个内核/处理器。
问题:
- 这准确吗?
- 我在乎吗?该服务器中的每个线程都可能运行几分钟,并且会有很多。操作系统 (CentOS 6.5) 是否足够智能以分担负载?
- 这与 C++ 中的线程有什么不同吗? (当前套接字服务器的语言)IE pthreads 自动使用多核吗?
- 如果我用 fork 而不是 thread 会怎么样?
最佳答案
CRuby 有一个 global interpreter lock ,所以它不能并行运行线程。 Jruby 和其他一些实现可以做到这一点,但 CRuby 永远不会并行运行任何类型的代码。这意味着,无论您的操作系统多么智能,它都无法分担负载。
这与 C++ 中的线程不同。 pthreads 创建真正的 OS 线程,内核的调度程序将同时在多个内核上运行它们。从技术上讲,Ruby 也使用 pthreads,但 GIL 阻止它们并行运行。
Fork 创建一个新进程,您的操作系统的调度程序几乎肯定会足够聪明,可以在单独的内核上运行它。如果你需要 Ruby 中的并行性,要么使用没有 GIL 的实现,要么使用 fork。
关于Ruby - 如何跨内核/处理器线程化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26579532/