问题标签 [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.
networking - java网络I/O阻塞与否?
希望这是一个关于 Java 中 BufferedOutputStreams 和 DataOutputStreams 的快速简单的问题。
当我将字节写入输出流时
这些方法是立即将它们写入流并返回还是阻塞?
我在核心 Java 文档中没有看到任何内容,但也许我的问题没有意义,因为写入从不阻塞?
有人请让我直截了当。
谢谢,jbu
c++ - C++ - Sleep() 和 cin 是如何工作的?
只是好奇。Sleep() 函数实际上是如何工作的(在 windows.h 中声明)?也许不仅仅是那个实现,而是任何人。我的意思是-它是如何实施的?它如何使代码在特定时间“停止”?还对 cin >> 和那些实际工作的方式感到好奇。他们具体做什么?
我知道如何“阻止”某些东西继续运行的唯一方法是使用 while 循环,但考虑到与调用从 stdin 读取方法时发生的情况相比,这需要大量的处理能力(只是比较一段时间(真实)从标准输入读取),我猜这不是他们所做的。
java - java如何做一个发送者线程
有人告诉我,通过输出流输出的任何数据(在我的情况下我使用的是 tcp/ip)可能会阻塞。在这种情况下,我不想通过等待数据出去来停止应用程序。
我需要一个如何做到这一点的模型。
我需要通过这个流发送消息对象。
我在想我需要一个包含这些消息对象的阻塞队列。线程的 run() 方法将抓取任何可用的消息对象并发送它们,虽然是真的。
我的问题是
有没有比 while true 循环更好的方法来做到这一点?也许在 while true 循环中,如果没有要发送的消息,我可以告诉线程让 / 休眠。
有没有更好的模型可以使用?我担心如果我的代码中有一段时间(true),它会占用等待消息的处理器周期。
请有这方面经验的人告诉我是否有更好的方法。
谢谢,jbu
c# - 如何等待阻塞队列被工作人员清空
我正在使用带有阻塞队列的单个生产者-单个消费者模型。我希望生产者在完成生产后等待队列清空后再返回。
我实现了Marc Gravell建议的BlockingQueue。
在我的模型中,生产者(渲染器)使用事件来通知工作人员(打印机)何时渲染文件(工作人员将项目排队)以及每个文件都已被渲染(完成)。
现在,当渲染器完成时,方法结束并且工作人员被杀死,所以我最终得到了 10-15 个尚未打印的渲染文件。
我希望完成的事件处理程序阻塞,直到队列被清空,例如,当所有文件都被打印时。我想添加类似于“WaitToClose()”的方法,该方法将阻塞直到队列为空。
(设置工作线程会IsBackground = true
有所作为吗?)
sql - SQL Server ALTER 字段 NOT NULL 需要永远
我想从有大约 400 万条记录的表中更改一个字段。我确保所有这些字段值都不是 NULL 并且想要将此字段更改为 NOT NULL
...似乎永远需要做这个更新。有什么方法可以加快速度,还是我只是在下班时间过夜?
这也可能导致表锁吗?
java - Java中的并发和阻塞队列
我有一个线程将事件推送到第二个线程的传入队列的经典问题。只是这一次,我对性能很感兴趣。我想要实现的是:
- 我想要同时访问队列,生产者推送,接收者弹出。
- 当队列为空时,我希望消费者阻塞到队列中,等待生产者。
我的第一个想法是使用 a LinkedBlockingQueue
,但我很快意识到它不是并发的并且性能受到影响。另一方面,我现在使用 a ,但我仍然为每个出版物ConcurrentLinkedQueue
支付wait()
/的费用。notify()
由于消费者在找到一个空队列后不会阻塞,因此我必须同步并wait()
锁定。另一方面,制作人必须notify()
在每次发布时都获得该锁定。总体结果是
sycnhronized (lock) {lock.notify()}
,即使在不需要的时候,我也要为每一个出版物支付费用。
我猜这里需要的是一个既阻塞又并发的队列。我想象一个push()
操作可以像 in 一样工作,当推送的元素是列表中的第一个时,对象会有ConcurrentLinkedQueue
一个额外的内容。notify()
我认为这样的检查已经存在于 中ConcurrentLinkedQueue
,因为推送需要连接下一个元素。因此,这将比每次在外部锁上同步要快得多。
这样的事情可用/合理吗?
events - 阻塞 IO 与非阻塞 IO;寻找好文章
曾几何时,我偶然看到Indy 简介文章,从那时起就无法停止思考阻塞与非阻塞 IO。
寻找一些好的文章来描述阻塞 IO 和非阻塞 IO 的优缺点以及如何在每种情况下设计您的应用程序以获得自然、易于理解和易于维护的代码。
想了解大图...
scala - 从 Actor 内部调用阻塞 Actor
鉴于我Actor
从内部调用一个反应,这会阻止调用Actor
还是仍在处理其他请求?
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()
,同时仍然允许原始线程在此期间处理其他消息?(那是我没有受过教育的猜测)
提前致谢
c++ - 使用 QTextStream 以非阻塞方式读取标准输入
使用 Qt,我试图以非阻塞方式读取标准输入流的内容。当套接字收到一些新数据时,我正在使用 QSocketNotifier 来提醒我。通知程序的设置如下所示:
onData()
插槽如下所示:
如您所见,我正在尝试使用 select() 系统调用来告诉我何时用完了要读取的数据。然而,实际上发生的事情是在我阅读了第一行文本后,select() 调用返回 0。因此,例如,如果我将 5 行文本写入进程的标准输入流,我只会读取第一行。
可能是什么问题呢?