问题标签 [busy-loop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 忙等待不一致吗?
我想要一个特定时间的繁忙等待循环,我测试了以下 java 代码,它在不同的运行(有时)上给出不同的输出。大多数时候它给出 16 和 0。这意味着一个人不能相信忙碌的等待。是什么原因?
java - 为什么小于15ms的busy-wait不一致?
我正在做模拟项目,我有数百个 CPU 密集型作业运行 10 到 50 毫秒。Job 是一个 Runnable 对象,具有指定的运行时间,作业将使 CPU 保持忙碌。有 10 个线程在线程池中等待作业到达。我将请求速率设置为每秒 40 个请求,所有作业的运行时间设置为 10 毫秒。但结果太可怕了。所有作业至少运行 15 毫秒。没有运行 10 毫秒的作业。我用 15ms 的工作测试了实验,我得到了正确的结果。为什么 10 毫秒的作业至少运行 15 毫秒?(我使用的是 WINDOWS8)。
busy-waiting - 自旋等待、自旋循环和忙自旋
自旋等待、自旋循环和忙自旋是否针对同一情况使用不同的名称?
我阅读了不同的线程,它们似乎都与“忙”检查资源可用性的循环有关。
c - 繁忙等待循环的可变性能?
我正在评估以一致的时间间隔触发事件的繁忙等待循环的性能。我注意到使用以下代码的一些奇怪行为:
在测试机上(双 14 核 E5-2683 v3 @ 2.00Ghz,256GB DDR4),for 循环的 200k 次迭代大约为 1ms。或者可能不是:
当时间第三次向下移动时,它们基本上保持一致(大约 2 或 3 微秒内),除了偶尔会跳到大约 450us 进行几百次迭代。这种行为在类似的机器上和多次运行中是可重复的。
我知道编译器可以优化繁忙的循环,但我认为这不是问题所在。我不认为缓存应该影响它,因为不应该发生失效,也不会解释突然的优化。我还尝试使用寄存器 int 作为循环计数器,但没有明显效果。
关于正在发生的事情以及如何使这(更)一致的任何想法?
编辑:有关信息,使用 usleep、nanosleep 运行此程序或显示的忙等待 10k 次迭代都显示 ~20000 次非自愿上下文切换time -v
。
c++ - 调试时Kubuntu中的繁忙进程
我正在尝试使用 Qt Creator 编写我的第一个 Linux 应用程序。有时,在调试过程中,我编写的代码会导致我的应用程序进入某种无限循环。
这会导致我的 KDE 会话冻结。使用调试器或任何其他方式停止/暂停进程似乎是不可能的。几分钟后,桌面会话会自动终止,这会阻止重新启动整个 PC。
那么如何调试在 Linux 下疯狂的进程呢?为什么它会阻止整个桌面和 Qt Creator IDE,我该如何防止这种情况发生?
c++ - 是否有标准功能忙于等待条件或直到超时
我需要在我的程序中等待子系统。在不同的地方一个必须等待不同的条件。我知道我也可以使用线程和条件变量。但是由于子系统(用 C 语言编程的裸机)是通过共享内存连接的,没有注册中断——一个线程无论如何都需要轮询。
所以我做了下面的模板能够等待任何事情。我想知道是否已经有一个可以用于此的 STL 函数?
2019-05-23:关于评论和答案的代码更新
c# - 从 C# Stream 读取而无需忙于等待
我需要从 C# 中的 Stream 读取内容。我不知道它会是哪种流。让我们假设它是网络流并且网络非常慢。所以我不能立即读取所有字节。我知道流中的 4 个字节是整数,这个 int 定义了我们需要从流中获取的内容长度。如何在不忙于等待(循环)的情况下做到这一点?
java - 忙循环时使用 Thread.yield() 是不好的做法吗?
在执行任何读/写操作之前,我有一个线程忙于循环,直到我的ServerSocket
对象绑定到端口。
我Thread.yield()
在busy-loop中使用过让其他线程在这个线程循环时运行(如果有的话),但是javadocThread.yield()
说
很少使用这种方法。它对于调试或测试目的可能很有用,它可能有助于重现由于竞争条件导致的错误。
现在,我这里没有竞争条件,我只需要等到套接字被绑定,并且由于套接字被绑定时没有回调,所以我坚持使用这种方法。有什么建议吗?
concurrency - 在 erlang 中轮询接收块是一种好的做法吗?
我是 Erlang 新手,对接收块有疑问。我正在尝试从正在执行任务的子进程接收一条或多条消息。我发现如何接收消息的方法是使用接收块。
例如
问题1:假设孩子可能会向需要处理消息的父母发送多条消息,“轮询”这个接收块是好的做法吗?例如,这应该如何管理?
问题 2:感觉像是某种忙碌的等待,是吗?例如,它会导致性能问题吗?
问题 3:在 Objective-C 中,我会使用委托来接收回调并避免轮询。Erlang有替代品吗?