问题标签 [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.
php - 在不阻塞的情况下查询 PHP 信号量?
是否可以在不像 sem_acquire 函数那样实际阻塞的情况下查询使用 sem_get 创建的信号量?
干杯,丹。
vb.net - 为什么会阻塞?(带有事件和委托的 VB.NET 多线程)
我有一个功能,即 dll 中的一个类显示一个表单,要求用户在单击按钮说“重试”之前清除打印机上的故障。用户一直在重试而没有清除故障,所以我现在正在编写一个互锁代码:调用表单上的按钮被禁用,直到调用表单上的“启用”方法。
这是通过委托调用完成的,因为触发这些更改的事件来自在不同线程上运行的其他 dll。
表单的“启用”方法被连接到事件处理程序中,用于处理来自不同线程(监控以太网 IO 服务器的线程)的事件。
我遇到的问题是“_Fault_StateChanged”事件永远不会触发。我怀疑原因是我在这里使用的“ShowDialog”和“DialogResult”技术,但我在此应用程序的其他地方使用了完全相同的技术。
任何建议都会很棒
请参阅下面的代码摘录:
主要课程摘录
重试表单类摘录
回应丹尼尔评论的更多细节
这里的代码不完整,只是摘录。故障对象是对外部库的订阅,并且是以太网 IO 服务器的处理程序。_fault StateChanged 事件在 IOServer 上的数字输入发生更改时触发。我知道以下内容:我的跟踪文件显示信号变高,这会调用重试表单。当重试屏幕仍然显示时,信号物理上再次变低。...但事件没有触发
就好像应用程序在 ShowDialog/DialogResult 完成之前无法为传入的事件提供服务 - 但我对此感到困惑,因为我知道 .NET 2.0 中的 ShowDialog 没有阻塞,我应该仍然能够为事件提供服务,并且已经使用在应用程序的其他地方使用相同的模式。
需要注意的几点: MAIN CLASS 在运行时通过基于配置的反射动态实例化。这是VS2005 SP2
如果这有帮助,我会将整个课程发布在另一个代码框中,但它可能会挤满现场......
谢谢安迪
python - 多线程 python 应用程序在运行其线程时挂起
我正在尝试创建一个可用作 DBus 服务的 MainObject。此 MainObject 应始终保持对其他对象/进程的响应,并且即使在处理其项目时也应保持这种非阻塞状态。因此,项目在一个单独的线程中一个接一个地处理(队列样式)。您可以通过 DBus 或 CommandLine 将项目添加到 MainObject。我简化了示例(没有 dbus,没有命令行)来显示我的问题。
我的问题是,如果我重新启用“tt.join()”,应用程序按预期工作,但它会阻塞其他进程。难怪, tt.join 使应用程序等到单独的线程完成其工作。另一方面,如果 'tt.join()' 保持禁用状态,应用程序不会阻止外部 dbus 事件,但永远不会出现 'ThreadTest done!' (看实际输出)
我想要的是,我的预期输出,但应用程序应该保持响应。
预期输出:
实际输出:
java - 高效阻塞查询的建议
我想将元组对象存储在并发的 java 集合中,然后有一个高效的阻塞查询方法,它返回与模式匹配的第一个元素。如果没有这样的元素可用,它将阻塞,直到出现这样的元素。
例如,如果我有一堂课:
还有一个像这样的集合:
我想像这样查询它:
它返回字段等于“foo”或块的第一个可用对,second
直到添加这样的元素。另一个查询示例:
应该返回第一个可用的对,无论其值如何。
解决方案是否已经存在?如果不是这种情况,您建议如何实施该get( Pair p )
方法?
澄清:该方法get( Pair p)
还必须删除元素。名字的选择不是很聪明。一个更好的名字将是take( ... )
。
c - 使用 select 读取和写入同一个套接字 (TCP)
我们正在编写一个客户端和一个服务器来执行(我认为是)非常简单的网络通信。多个客户端连接到服务器,然后服务器应该将数据发送回所有其他客户端。
服务器只是处于阻塞select
循环中等待流量,当流量到来时,将数据发送给其他客户端。这似乎工作得很好。
问题是客户端。为了响应读取,它有时会想要进行写入。
但是,我发现如果我使用:
我的代码将阻塞,直到有新数据要读取。但有时(从另一个线程异步)我会有新数据要写入网络通信线程。所以,我希望我的选择定期唤醒并让我检查是否有数据要写入,例如:
我尝试将选择设置为轮询模式(或非常短的超时):
但发现然后客户端永远不会收到任何传入数据。
我还尝试将套接字 fd 设置为非阻塞,例如:
但这并不能解决问题:
- 如果我的客户
select()
没有struct timeval
,则读取数据有效,但它永远不会解除阻止让我查找可写数据。 - 如果我的客户
select()
有一个timeval
让它轮询,那么它永远不会发出有要读取的传入数据的信号,并且我的应用程序冻结认为没有建立网络连接(尽管所有其他函数调用都已成功)
关于我可能做错了什么的任何指示?是否不可能在同一个套接字上进行读写(我不敢相信这是真的)。
(编辑:正确的答案,以及我在服务器上而不是在客户端上记得的事情,是有第二个 fd_set,并在每次调用 select() 之前复制 master_list:
)
c++ - 如何从被阻止的呼叫中返回?
是否可以强制线程从对阻塞函数的调用返回,例如从流中阻塞读取?
例如...
java - 垃圾收集和线程
AFAIK 当 GC 正在做它的事情时,VM 会阻塞所有正在运行的线程——或者至少在它压缩堆时。在 CLR 和 JVM (2010 年 1 月的生产版本)的现代实现中是这种情况吗?请不要提供有关 GC 的基本链接,因为我了解基本的工作原理。
我假设全局锁定是这种情况,因为当压缩发生时,引用可能在移动期间无效,并且似乎最简单的方法只是锁定整个堆(即通过阻塞所有线程间接地)。我可以想象更强大的机制,但 KISS 经常占上风。
如果我不正确,我的问题将通过对用于最小化阻塞的策略的简单解释来回答。如果我的假设是正确的,请对以下两个问题提供一些见解:
如果这确实是这种行为,那么像 JBOSS 和 Glassfish 这样的重量级企业引擎如何保持始终如一的高 TPS 率?我在 JBOSS 上进行了一些谷歌搜索,我期待在 APACHE 上找到一些适合 Web 处理的内存分配器。
面对 NUMA 式的架构(可能在不久的将来),这听起来像是一场灾难,除非进程是受线程和内存分配限制的 CPU。
winforms - 最佳实践:在等待 Async 方法时阻塞执行
我正在尝试调整现有程序(内部编写)以使用与最初不同的库。我已经抽象出大部分特定于库的代码(似乎是更容易的部分)。
问题是,旧库将使用阻塞方法执行调用,而我们的内部程序期望调用阻塞方法,但新库使用异步方法。
我想知道等待异步操作完成的最佳做法是什么。我的第一个想法是有一个名为完成的布尔标志,并在 while 循环中旋转,直到完成 == true。
我应该注意,这是为了快速证明我试图为我的利益相关者整理的概念,如果利益相关者签署该项目,我将重写我们程序的违规部分。但是暂时我只需要等待阻塞调用异步方法的函数,直到异步调用完成
php - 是否可以阻止上传文件夹中的 php 脚本?
我在 php 中体验了我的第一个表单,可以上传图像。
我在网上看到一些文章解释它可能很危险,所以有什么方法可以阻止指定文件夹上的脚本?有.htaccess
或 php.ini
指令的东西?
c++ - 如何中止winsock阻塞调用?
我在 C++ 中使用 Winsock 2,想知道如何让我的服务器停止从客户端连接读取。阅读线程被阻塞recv()
,我不知道如何中止它。一种方法是使用带有 的非阻塞套接字select()
,但该线程必须等待才能检查新的select()
.
停止读取套接字的正确方法是什么?