Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 线程还是DRb?_Ruby_Multithreading_Threadpool_Drb - Fatal编程技术网

Ruby 线程还是DRb?

Ruby 线程还是DRb?,ruby,multithreading,threadpool,drb,Ruby,Multithreading,Threadpool,Drb,我需要有2个(或者可能3个)在Ruby中连续运行程序的“方面”——一个通信线程,一个渲染线程,可能还有一个缓存线程 其思想是渲染线程显示一个幻灯片放映(其定义从文件中读取),所有幻灯片都由通信线程从远程HTTP服务器检索。渲染必须连续且无停止(因此可能需要缓存)。该文件可能在程序的生命周期内发生更改,因此需要(动态)重新解析 我希望在“facet”之间发送消息,例如,当comms线程获得整个节目的“章节”时,渲染线程可以在等待整个节目下载之前启动,等等 我应该使用Ruby线程还是DRb?如何在线

我需要有2个(或者可能3个)在Ruby中连续运行程序的“方面”——一个通信线程,一个渲染线程,可能还有一个缓存线程

其思想是渲染线程显示一个幻灯片放映(其定义从文件中读取),所有幻灯片都由通信线程从远程HTTP服务器检索。渲染必须连续且无停止(因此可能需要缓存)。该文件可能在程序的生命周期内发生更改,因此需要(动态)重新解析

我希望在“facet”之间发送消息,例如,当comms线程获得整个节目的“章节”时,渲染线程可以在等待整个节目下载之前启动,等等

我应该使用Ruby线程还是DRb?如何在线程之间传递消息


谢谢你的反馈

一开始就要简单-永远是最好的建议。从两个线程开始,看看性能是否满足您的需要。您可以使用条件变量或简单互斥体围绕检索到的章节列表进行同步。您可能会遇到运行不足的问题—没有任何章节可用于渲染,但您至少可以使用core Ruby找到一个可行的解决方案

然后想尽一切办法寻找提供其他可能性的解决方案。除了DRb之外,您还应该查看EventMachine(阅读章节时可能需要的异步功能)和RabbitMQ,以了解消息传递系统提供的更通用、更松散的耦合

从小处做起,不要试图走得太快。对于任何关心Ruby线程的人,我正在运行一个小型报告呈现客户端,它正在RabbitMQ队列上侦听。客户端使用四个线程呈现(google)图形、发送警报和自动重置各种队列(在收集数小时数据后)。一切都很好


Chris

我之所以考虑DRb,是因为它具有消息传递功能——我不能用线程来实现这一点。。。正确的?我的意思是,我可以用互斥锁破解它,但它仍然是一个破解。。。对吧?:)DRb看起来简单多了。只有在需要多个进程时才真正需要一个消息传递系统。听起来您不需要多个流程,因此我建议保持简单。我正在做一些类似于您自己的事情(收集远程数据,处理它并呈现输出),一个简单的线程系统将非常有效-我每个阶段都有一个线程和一个额外的线程-不需要DRb。但是使用你认为你需要的东西!祝你好运喂,拉比的建议是正确的。我以前对DRb和RabbitMQ都做过类似的事情,但DRb解决方案并不理想。RabbitMQ的速度快了几个数量级,如果您使用celldee的Bunny库,它也会简单得多。实际上,我在我们的解决方案中使用了Bunny,而且效果非常好。