问题标签 [blocking]

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 投票
4 回答
1650 浏览

networking - java网络I/O阻塞与否?

希望这是一个关于 Java 中 BufferedOutputStreams 和 DataOutputStreams 的快速简单的问题。

当我将字节写入输出流时

这些方法是立即将它们写入流并返回还是阻塞?

我在核心 Java 文档中没有看到任何内容,但也许我的问题没有意义,因为写入从不阻塞?

有人请让我直截了当。

谢谢,jbu

0 投票
7 回答
7904 浏览

c++ - C++ - Sleep() 和 cin 是如何工作的?

只是好奇。Sleep() 函数实际上是如何工作的(在 windows.h 中声明)?也许不仅仅是那个实现,而是任何人。我的意思是-它是如何实施的?它如何使代码在特定时间“停止”?还对 cin >> 和那些实际工作的方式感到好奇。他们具体做什么?

我知道如何“阻止”某些东西继续运行的唯一方法是使用 while 循环,但考虑到与调用从 stdin 读取方法时发生的情况相比,这需要大量的处理能力(只是比较一段时间(真实)从标准输入读取),我猜这不是他们所做的。

0 投票
2 回答
524 浏览

java - java如何做一个发送者线程

有人告诉我,通过输出流输出的任何数据(在我的情况下我使用的是 tcp/ip)可能会阻塞。在这种情况下,我不想通过等待数据出去来停止应用程序。

我需要一个如何做到这一点的模型。

我需要通过这个流发送消息对象。

我在想我需要一个包含这些消息对象的阻塞队列。线程的 run() 方法将抓取任何可用的消息对象并发送它们,虽然是真的。

我的问题是

  1. 有没有比 while true 循环更好的方法来做到这一点?也许在 while true 循环中,如果没有要发送的消息,我可以告诉线程让 / 休眠。

  2. 有没有更好的模型可以使用?我担心如果我的代码中有一段时间(true),它会占用等待消息的处理器周期。

请有这方面经验的人告诉我是否有更好的方法。

谢谢,jbu

0 投票
1 回答
2101 浏览

c# - 如何等待阻塞队列被工作人员清空

我正在使用带有阻塞队列的单个生产者-单个消费者模型。我希望生产者在完成生产后等待队列清空后再返回。

我实现了Marc Gravell建议的BlockingQueue。

在我的模型中,生产者(渲染器)使用事件来通知工作人员(打印机)何时渲染文件(工作人员将项目排队)以及每个文件都已被渲染(完成)。

现在,当渲染器完成时,方法结束并且工作人员被杀死,所以我最终得到了 10-15 个尚未打印的渲染文件。

我希望完成的事件处理程序阻塞,直到队列被清空,例如,当所有文件都被打印时。我想添加类似于“WaitToClose()”的方法,该方法将阻塞直到队列为空。

(设置工作线程会IsBackground = true有所作为吗?)

0 投票
3 回答
11337 浏览

sql - SQL Server ALTER 字段 NOT NULL 需要永远

我想从有大约 400 万条记录的表中更改一个字段。我确保所有这些字段值都不是 NULL 并且想要将此字段更改为 NOT NULL

...似乎永远需要做这个更新。有什么方法可以加快速度,还是我只是在下班时间过夜?

这也可能导致表锁吗?

0 投票
6 回答
36447 浏览

java - Java中的并发和阻塞队列

我有一个线程将事件推送到第二个线程的传入队列的经典问题。只是这一次,我对性能很感兴趣。我想要实现的是:

  • 我想要同时访问队列,生产者推送,接收者弹出。
  • 当队列为空时,我希望消费者阻塞到队列中,等待生产者。

我的第一个想法是使用 a LinkedBlockingQueue,但我很快意识到它不是并发的并且性能受到影响。另一方面,我现在使用 a ,但我仍然为每个出版物ConcurrentLinkedQueue支付wait()/的费用。notify()由于消费者在找到一个空队列后不会阻塞,因此我必须同步并wait()锁定。另一方面,制作人必须notify()在每次发布时都获得该锁定。总体结果是 sycnhronized (lock) {lock.notify()},即使在不需要的时候,我也要为每一个出版物支付费用。

我猜这里需要的是一个既阻塞又并发的队列。我想象一个push()操作可以像 in 一样工作,当推送的元素是列表中的第一个时,对象会有ConcurrentLinkedQueue一个额外的内容。notify()我认为这样的检查已经存在于 中ConcurrentLinkedQueue,因为推送需要连接下一个元素。因此,这将比每次在外部锁上同步要快得多。

这样的事情可用/合理吗?

0 投票
2 回答
51590 浏览

events - 阻塞 IO 与非阻塞 IO;寻找好文章

曾几何时,我偶然看到Indy 简介文章,从那时起就无法停止思考阻塞与非阻塞 IO。

寻找一些好的文章来描述阻塞 IO 和非阻塞 IO 的优缺点以及如何在每种情况下设计您的应用程序以获得自然、易于理解和易于维护的代码。
想了解大图...

0 投票
2 回答
814 浏览

scala - 从 Actor 内部调用阻塞 Actor

鉴于我Actor从内部调用一个反应,这会阻止调用Actor还是仍在处理其他请求?

0 投票
2 回答
4472 浏览

c++ - 如果 MessageBox()/related 是同步的,为什么我的消息循环不冻结?

为什么如果我MessageBox()在消息循环中调用看似同步的 Windows 函数,循环本身不会像我调用Sleep()(或类似的函数)一样冻结?为了说明我的观点,请使用以下骨骼WndProc

在上面的例子中,程序的主要功能是运行一个定时器并每秒显示一次计数器的值。但是,如果用户单击我们的窗口,程序会显示一个消息框,然后在该框关闭后发出哔哔声。

这里是有趣的地方:我们可以看出MessageBox()它是一个同步函数,因为MessageBeep()在消息框关闭之前不会执行。但是,计时器会继续运行,并且即使在显示消息框时也会每秒重新绘制一次窗口。因此,虽然MessageBox()显然是一个阻塞函数调用,但仍然可以处理其他消息( WM_TIMER/ )。WM_PAINT没关系,除非我将 MessageBox 替换为另一个阻塞调用,例如Sleep()

这完全阻止了我的应用程序,并且在 10 秒内没有发生任何消息处理(WM_TIMER/WM_PAINT未处理,计数器未更新,程序“冻结”等)。那么为什么MessageBox()允许消息处理继续而Sleep()不允许呢?鉴于我的应用程序是单线程的,它MessageBox()允许这个功能是什么?系统是否“复制”了我的应用程序线程,这样它就可以在完成WM_LBUTTONDOWN代码后完成代码MessageBox(),同时仍然允许原始线程在此期间处理其他消息?(那是我没有受过教育的猜测)

提前致谢

0 投票
2 回答
15205 浏览

c++ - 使用 QTextStream 以非阻塞方式读取标准输入

使用 Qt,我试图以非阻塞方式读取标准输入流的内容。当套接字收到一些新数据时,我正在使用 QSocketNotifier 来提醒我。通知程序的设置如下所示:

onData()插槽如下所示:

如您所见,我正在尝试使用 select() 系统调用来告诉我何时用完了要读取的数据。然而,实际上发生的事情是在我阅读了第一行文本后,select() 调用返回 0。因此,例如,如果我将 5 行文本写入进程的标准输入流,我只会读取第一行。

可能是什么问题呢?