标签: busy-loop

更好的解决方案,用于Python Threading.Event半忙等待

我正在使用非常标准的Threading.Event:主线程在一个循环中运行:

event.wait(60)
Run Code Online (Sandbox Code Playgroud)

其他阻止请求,直到回复可用,然后启动:

event.set()
Run Code Online (Sandbox Code Playgroud)

我希望主线程选择40秒,但事实并非如此.从Python 2.7源代码Lib/threading.py:

# Balancing act:  We can't afford a pure busy loop, so we
# have to sleep; but if we sleep the whole timeout time,
# we'll be unresponsive.  The scheme here sleeps very
# little at first, longer as time goes on, but never longer
# than 20 times per second (or the timeout time remaining).
endtime = _time() + timeout
delay = 0.0005 # 500 us -> initial delay of 1 ms
while …
Run Code Online (Sandbox Code Playgroud)

python events multithreading busy-loop

7
推荐指数
1
解决办法
1595
查看次数

睡眠(0)和暂停指令的繁忙循环有什么不同?

我想在我的应用程序中等待一个应该立即发生的事件,所以我不想让我的线程等待并稍后唤醒它。我想知道使用Sleep(0)和硬件暂停指令有什么区别。

我看不到以下程序的 CPU 利用率有任何差异。我的问题不是关于省电的考虑。

#include <iostream>
using namespace std;
#include <windows.h>

bool t = false;
int main() {
       while(t == false)
       {
              __asm { pause } ;
              //Sleep(0);
       }
}
Run Code Online (Sandbox Code Playgroud)

c++ x86 hardware-interface busy-loop lockless

6
推荐指数
2
解决办法
1925
查看次数

为什么阻止而不是循环?

为什么写下面的代码被认为是不好的做法有什么原因?

  while (someList.isEmpty()) {
    try {
      Thread.currentThread().sleep(100);
    }
    catch (Exception e) {}
  }
  // Do something to the list as soon as some thread adds an element to it.
Run Code Online (Sandbox Code Playgroud)

对我来说,选择一个任意值进行睡眠并不是一种好的做法,我会BlockingQueue在这种情况下使用a ,但我想知道为什么不应该写这样的代码有多个原因.

java concurrency multithreading busy-loop

6
推荐指数
1
解决办法
204
查看次数

自旋等待、自旋循环和忙自旋

对于相同的情况,自旋等待、自旋循环和忙自旋是否是不同的名称?

我阅读了不同的线程,它们似乎都与一个“忙”检查资源可用性的循环有关。

busy-loop busy-waiting

5
推荐指数
1
解决办法
3371
查看次数

在C#中创建空闲循环的好方法?

我有一个应用程序,它设置了FileSystemWatcher.它应该无限期地运行.

让它在空闲循环中运行的最佳方法是什么?

我现在正在做

FileSystemWatcher watch = ... //setup the watcher
watch.EnableRaisingEvents = true;
while (true) 
{
    Thread.Sleep(int.MaxValue);
}
Run Code Online (Sandbox Code Playgroud)

这似乎工作(即捕获事件,并没有在繁忙的循环中使用核心).

还有其他成语吗?这种方法有什么问题吗?

.net c# busy-loop

3
推荐指数
2
解决办法
5234
查看次数

在异步cuda流执行期间摆脱繁忙的等待

我正在寻找一种方法来摆脱闲置代码中的主机线程中的繁忙等待(不复制该代码,它仅表示我的问题,它具有许多基本错误):

cudaStream_t steams[S_N];
for (int i = 0; i < S_N; i++) {
    cudaStreamCreate(streams[i]);
}
int sid = 0;
for (int d = 0; d < DATA_SIZE; d+=DATA_STEP) {
     while (true) {
         if (cudaStreamQuery(streams[sid])) == cudaSuccess) { //BUSY WAITING !!!!
             cudaMemcpyAssync(d_data, h_data + d, DATA_STEP, cudaMemcpyHostToDevice, streams[sid]);
             kernel<<<gridDim, blockDim, smSize streams[sid]>>>(d_data, DATA_STEP);
             break;
         }
         sid = ++sid % S_N;
     }
Run Code Online (Sandbox Code Playgroud)

}

有没有一种方法可以使主机线程空闲并以某种方式等待某个流完成,然后准备并运行另一个流?

编辑:我在代码中添加了while(true),以强调忙等待。现在,我执行所有流,并检查其中哪个流完成以运行另一个新流。cudaStreamSynchronize等待特定的流完成,但是我想等待首先完成工作的任何流。

EDIT2:我摆脱了以休闲方式的繁忙等待:

cudaStream_t steams[S_N];
for (int i = 0; i < S_N; i++) {
    cudaStreamCreate(streams[i]);
} …
Run Code Online (Sandbox Code Playgroud)

cuda busy-loop cuda-streams

3
推荐指数
1
解决办法
5519
查看次数

通过boost :: asio :: io_service运行避免繁忙的循环

我正在使用boost实现一些asio操作,遇到一个接口问题,在初始化时没有收到“处理程序”,但是之后,

这迫使我编写一个“忙”循环,我想做的是即使没有至少一个处理程序也要运行io_service,这可能吗?如何处理呢?等待服务的处理程序吗?这是我的代码。

    /** : */
    void                Run             () { while(true) {m_srv.run(); Sleep(1);} } // once 1 handler is inside service, thread will not be in busy loop
private: // members:

    io_service  m_srv;
Run Code Online (Sandbox Code Playgroud)

有什么建议么?谢谢

这是代码问题:(m_drv是操作boost :: thread(io_service :: run ..)的任务)

class App : public Base::Application
{
public:
    /** : */
    App(char* name, char* id) : Application(name, id), m_drv("NetTask"), m_worker("Worker"), m_acceptor(m_worker, Drv(), &OnAccept, 4567)
    {
        m_acceptor.Accept(Drv());
    }

    /** : */
    inline DriverImp& Drv() { return static_cast<DriverImp&>(m_drv.Imp());}

    /** : */
    inline Reactor& Worker() …
Run Code Online (Sandbox Code Playgroud)

c++ boost network-programming boost-asio busy-loop

1
推荐指数
1
解决办法
1509
查看次数