产生线程内部的线程是标准的还是不好的做法?

时间:2011-07-20 14:38:59

标签: ruby multithreading

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

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

示例:

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

干杯

1 个答案:

答案 0 :(得分:2)

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

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

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

通常,将线程封装到对象中并且只调用那些方法是个好主意。它使代码更容易理解。