Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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 如何在不忙碌等待的情况下等待布尔值?_Ruby_Boolean_Mutex_Condition Variable - Fatal编程技术网

Ruby 如何在不忙碌等待的情况下等待布尔值?

Ruby 如何在不忙碌等待的情况下等待布尔值?,ruby,boolean,mutex,condition-variable,Ruby,Boolean,Mutex,Condition Variable,我有一个使用DRb编写的Ruby应用程序,其中远程对象向本地对象发出信号,表示它是通过翻转本地对象上的布尔值来完成的。目前,我等待的布尔值如下: sleep(0.05) until o.done? 这使CPU保持在低0.2%左右,不像真正忙碌的人那样100%地等待,响应速度很快,但感觉不太对劲。应该有更好的方法等待一个值,或者用信号通知我的进程退出等待状态。有吗 注意:重要的是等待代码要尽可能多地产生CPU/告诉操作系统不要安排太多的CPU密集型任务,因为会有重要的CPU密集型任务同时运行。通

我有一个使用DRb编写的Ruby应用程序,其中远程对象向本地对象发出信号,表示它是通过翻转本地对象上的布尔值来完成的。目前,我等待的布尔值如下:

sleep(0.05) until o.done?
这使CPU保持在低0.2%左右,不像真正忙碌的人那样100%地等待,响应速度很快,但感觉不太对劲。应该有更好的方法等待一个值,或者用信号通知我的进程退出等待状态。有吗


注意:重要的是等待代码要尽可能多地产生CPU/告诉操作系统不要安排太多的CPU密集型任务,因为会有重要的CPU密集型任务同时运行。

通过翻转布尔值后调用回调的单独方法进行设置如何?@Doester:这正是我正在做的,除非我需要在另一个方法中等待它,而不是调用回调。您的并发代码是在单进程线程中运行还是在不同的进程中运行?如果是后者,我认为您的简单睡眠/轮询是一次性的,除非您希望将整个应用程序重新设计为消息队列或类似的顶级结构。@NeilSlater:不同机器上的不同进程通过DRb进行通信。