并发可以提高性能吗?

时间:2012-02-13 19:49:26

标签: ruby multithreading concurrency

据我所知,在运行YARV的Ruby中,线程意味着并发而不是并行。我的问题是:只有并发才能提高性能的情况是什么?例如,我可以想象并发性会在同时处理多个IO流时提高性能 - 如果一个任务很慢,这并不意味着堆栈中的所有下一个任务都必须等待该任务完成。我对吗?还有其他这样的情况吗? [hopes that YARV will ever remove the GIL]/[overhead of creating threads with the GIL]比值是否值得在目前开始使用Ruby中的线程?

2 个答案:

答案 0 :(得分:5)

在您有多个任务需要等待一些不经常发生的外部刺激(例如,网络数据变得可用,磁盘读取完成等)的情况下,并发可能非常有用。如果您只是坐在等待其中一个操作发生的循环,你要么

  1. 等待很长时间才能完成某个单一事件而其他人已经完成并等待您查看它们,或者
  2. 浪费CPU功率循环数百个未触发的事件,寻找实际触发的事件。
  3. 并发性在设计本质上由事件驱动的程序时也很有用,例如等待发生不同的UI事件。在这种情况下,您可以指定应响应不同UI事件而触发的任务,并且处理器可以只是处于休眠状态或处理其他任务而无需显式等待未触发的任务运行。一旦发生事件,这些线程就会唤醒并共享CPU处理时间。

    希望这有帮助!

答案 1 :(得分:0)

Ruby模型运行良好的一种情况是使用Ruby来驱动其他应用程序。例如,如果你产生了编译,那么你可以让一个Ruby线程处理一个外部进程。

另一个好处是它允许您将应用程序划分为逻辑部分,并让一个线程处理每个部分。仅使用一个线程执行此操作可能需要您编写更复杂的应用程序。

相关问题