ruby - 在线程内部生成线程是标准做法还是不好的做法?

标签 ruby multithreading

简而言之:在线程内部生成线程是标准过程还是应该尽可能避免?

一个例子:想象一个并行蜘蛛同时检索和解析多个文档。 在我的推理中,有问题的蜘蛛需要两个线程(FetcherPool、ParserPool)生成 Fetcher 和 Parser 工作线程,以便使所有内容同时工作(见下文)。

示例:

Main Thread  
|------FetcherPool  
|      |------Fetcher  
|      |------Fetcher  
|  
|------ParserPool 
       |------Parser  
       |------Parser  

干杯

最佳答案

不 - 因为你不能从其他任何东西生成线程。您在脚本中生成的第一个线程是从“主”线程生成的。如果您在非多线程应用程序中执行“Thread.current”,您将获得此主线程。 “Thread.main”也返回它。

但是,如果您的问题是关于从“main”以外的线程生成,我认为这也没有什么本质上的坏处。为了您自己(或您的团队)的理智,您应该设计线程管理,以便工作人员不会失去控制(例如,产生的数量超出您的预期)。还应考虑代码可读性和控制对共享资源的访问。

这是一篇关于多线程问题的有趣文章:http://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-1.pdf

一般来说,将线程封装到对象中并只调用这些对象的方法是一个好主意。它使代码更容易理解。

关于ruby - 在线程内部生成线程是标准做法还是不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6763666/

相关文章:

ruby-on-rails - 如何评估年、月和日的日期差异( ruby )?

c++ - C++ 是否提供内置的多线程支持?

c++简单地用自己的线程启动一个函数

来自未声明为线程安全的多个线程的java调用函数

ruby-on-rails - 防止未定义的链式方法

ruby - ruby/rails 中的 openssl smime

ruby - 雷神 : How can I get my Thor task to display help when I have defined an argument?

ruby - 使用 Ubuntu sudo apt-get 找不到 404

java - Android中如何等待一个线程启动另一个线程?

multithreading - 为什么 Windows NT 线程具有独立的用户模式/内核模式堆栈?