新手问题 多线程多核的利用问题

netuser · October 10, 2015 · Last by lgn21st replied at October 11, 2015 · 3735 hits

需要跑一个耗费很大资源的多线程程序,问题在于 ruby 只能利用一个核,于是八核最终的 CPU 利用率就变成了 25%,效率还跟不上。。 怎么能解决这个问题呢,因为锁的存在么。JRuby 是不是可以解决这个问题,如果解决的话它内部解决多核同步的时候又是怎么做的,会不会产生各种灵异事件。。 感谢。

可以看一下这篇文章,Ruby Concurrency and Parallelism: A Practical Tutorial,从概念到实现都讲得很清楚。

用户级的线程是不参与 cpu 调度的

你的代码是 IO-bounded,还是 cpu-bound?

如果 io 为主的话,可以利用多核。因为 io 时,ruby 会释放 GIL,可以并行。

JRuby 可以解决这个问题,JRuby 没有 GIL,多线程情况下,JavaVM 会调度线程在不同的 CPU 核心上执行,关于是否出现灵异事件,建议你测试一下,你给出的信息不足以判断。

只要是在一个 Ruby VM 中运行的代码,在任何情况下,GIL 都保证了你的代码在同一个时间只能被一个 CPU 运行,如果你要用多核的话,需要看你的程序处理的任务能否分割,然后多进程的方式执行子任务。

You need to Sign in before reply, if you don't have an account, please Sign up first.