并发可以提高性能吗?

use*_*029 3 ruby concurrency multithreading

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

tem*_*def 5

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

  1. 等待很长时间才能完成某个单个事件,而其他事件已经完成并等待您查看它们,或者
  2. 浪费CPU功率循环数百个未触发的事件,寻找实际触发的事件.

并发性在设计本质上由事件驱动的程序时也很有用,例如等待发生不同的UI事件.在这种情况下,您可以指定应响应不同UI事件而触发的任务,并且处理器可以只是处于休眠状态或处理其他任务而无需显式等待未触发的任务运行.一旦发生事件,这些线程就会唤醒并共享CPU处理时间.

希望这可以帮助!