问题标签 [busy-waiting]

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.

0 投票
0 回答
59 浏览

linux - What could be the interpretation of these strace outputs?

I have a problem with a calculus software in Linux (Ubuntu 20.04). When I submit a calculus, the work is performed perfectly. The log file indicates that everything was completed successfully and all the results are perfect.

The problem arises when I try to submit another calculus: the numerical modulus stills busy. So, I traced the PID of the process with strace -p PID. This is the output:

And it goes on to infinite printing clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=2, tv_nsec=0}, 0x7fff57f793a0) = 0

Is there some useful information? What could this result be saying?

0 投票
1 回答
191 浏览

c++ - 为什么允许编译器优化这个繁忙的等待循环?

这是 CppCon 演讲中的一个示例https://www.youtube.com/watch?v=F6Ipn7gCOsY&ab_channel=CppCon(最少 17 分钟)

目标是首先打印Hello from A然后允许threadB开始。很明显,应该避免忙等待,因为它会占用大量 CPU。

作者说while (!ready) {}循环可以由编译器优化(通过将值ready放入寄存器),因为编译器看到threadB永远不会休眠,所以ready永远不会改变。但是即使线程从不休眠,另一个线程仍然可以改变值,对吧?没有数据竞争,因为ready它是原子的。作者声明这段代码是UB。有人可以解释为什么允许编译器进行这样的优化吗?

0 投票
1 回答
42 浏览

java - Java 同步方法/语句和锁(例如重入锁)是否忙于等待机制?

我正在学习Java中的并发,并且了解了信号量,它可以用于同步而无需忙于等待。

现在,我想知道 Java 同步方法/语句和锁(例如重入锁)是否是忙等待机制?

如果没有,其他线程如何得到通知,他们是否在后台实现信号量?

0 投票
1 回答
54 浏览

android - Android:等待用户输入但设置超时

在我的应用程序中,用户会收到一个练习提示,他有 5 秒钟的时间来解决它,如果他没有及时响应,应该显示下一个练习。
我的问题是:在 Android 中实现这种行为的最佳方式是什么?

我首先尝试使用 aCountDownTimer但由于某种原因CountDownTimer.cancel()不会取消计时器。

我的第二次尝试有效,(见下文)但它包含一个忙碌的等待,我不知道这是否是一个很好的模式。

它的工作原理是这样的:我创建了一个 Java Future,它的任务是等待 5 秒,并在回调方法中负责处理我调用的用户输入future.cancel(),因此while可以离开循环并进一步执行代码,这意味着for 循环进行另一次迭代。
如果用户没有及时响应,while则在 5 秒后退出循环,确保用户不会在一项练习上花费太多时间。

如果需要,请随时要求进一步澄清。先感谢您!

0 投票
0 回答
26 浏览

sql - SOS_SCHEDULER_YIELD - 意外等待

我们有 SQL 服务器所在的 VM。VM 有 36 个核心,而 SQL Server 消耗 24 个核心(由于版本限制,这里有一些捕获的指标以及我们有疑问的地方。

总 CPU 负载,用户和特权 在此处输入图像描述

SQL 服务器进程的总体 CPU 负载(SQL 服务器有 24 个可见的在线调度程序,因此服务器可以消耗的最大值为 2400%)

在此处输入图像描述

所以我们可以看到 SQL server 并没有消耗 100% 的 CPU 资源。

当 SQL 服务器的工作线程耗尽 4 毫秒时,它将进入可运行队列,SQL 服务器注册 SOS_SCHEDULER_YIELD 等待及其注册信号等待时间(工作线程在等待处理器队列中)。根据我的理解,当有大量工作线程在服务器上运行分配的任务时,它们经常进入可运行队列并且 CPU 负载很高,因为它应该执行持续的工作并且信号时间会增加。

这是 SOS_SCHEDULER_YIELD 的等待指标 在此处输入图像描述 在此处输入图像描述

因此,对于 30 分钟,我们有 700 分钟的 SOS_SCHEDULER_YIELD 等待时间,其中 100% 等待时间 = 100% 信号等待时间 - 当 CPU 成为瓶颈但 CPU 使用率不高时的模式。为什么会这样?这是正常行为吗?我们有这样的指标是正常情况吗?

0 投票
0 回答
35 浏览

python - 在 Flask 应用程序中显示某种等待状态指示器

我有一个 Flask 应用程序,我在其中实现了“before_insert”事件。此事件有时需要大约一分钟,因此我想在此期间设置沙漏光标或显示“处理中...”消息。

这怎么可能?