Ruby - 如何跨内核/处理器线程化

标签 ruby multithreading sockets

我正在用 ruby​​(重新)编写一个套接字服务器,希望能对其进行简化。在阅读有关 ruby​​ 套接字的信息时,我遇到了 site也就是说,多线程 ruby​​ 应用程序仅在一台机器中使用一个内核/处理器。

问题:

  1. 这准确吗?
  2. 我在乎吗?该服务器中的每个线程都可能运行几分钟,并且会有很多。操作系统 (CentOS 6.5) 是否足够智能以分担负载?
  3. 这与 C++ 中的线程有什么不同吗? (当前套接字服务器的语言)IE pthreads 自动使用多核吗?
  4. 如果我用 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/

相关文章:

multithreading - 使用 python 线程模块的 Jython WLST (Weblogic 10)

multithreading - 每个 Actor 的 Akka 套接字

Python SSLError : Client-side-error(EOF occurred in violation of protocol), 服务器端错误(SSL3_GET_RECORD:错误的版本号)

ruby-on-rails - Rails:将当前用户的已发布项目和未发布项目显示为 ActiveRecord::Relation

ruby - gem 安装失败,出现 "Could not find a valid gem ' yaml'"

javascript - 在 Rails 中提交表单,无需重新加载页面

Java,多线程,ExecutorService

java - 我正在尝试增加 ConcurrentHashMap 的值

c++ - Winsock 客户端 - 通过 TCP/IP4 连接到网络摄像机

ruby - 如何在 Nokogiri/Ruby 解析期间检查页面上是否存在元素?