问题标签 [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.
java - Java 线程不会在 I/O 操作上暂停
我的印象是,在 Java 中,线程会在阻塞 I/O 操作(如 Socket.read() 或 DataGramsocket.receive() )期间暂停并让其他线程有机会做一些工作。由于某种原因,在我的多线程网络应用程序中,对 receive() 的调用导致我所有其他线程都饿死了(调用 receive() 的线程正在成为一个大老板并且永远不会放弃控制,因此永远阻塞!)
为什么会发生这种情况?我曾经有过相同的应用程序,但它不是基于 UDP 的,而是基于 TCP 的。Socket.read() 总是暂停线程并允许其他人工作一段时间,如果它阻塞太久。
-- 额外信息 -- 我的自定义线程的 TCP 版本是这个代码: http ://www.dwgold.com/code/proxy/proxyThread.java.txt
我的新代码(UDP 版本)几乎相同,但稍作修改以使用 UDP 方法和样式。然后我创建了其中两个线程并在两个线程上调用 start。第一个线程总是阻塞并且永远不会让另一个线程在 UDP 版本中工作。
c# - C# 函数执行时的异步等待
我有一个阻塞函数,它执行异步 MySQL 查询并在获得结果时返回结果。原因是异步的,因为该程序在查询期间不允许锁定。
当用户按下按钮时调用该函数,因此该函数可能会在第一个查询完成之前被调用多次。我想我可以添加一个布尔值来检查查询是否正在执行,并让函数等到它完成后再继续,但它没有按预期工作。我使用的两个 DoEvents() 存在一些问题。如果您注释掉其中任何一个,它运行得很好,除了 UI 冻结。
如何使函数在执行查询时进行非阻塞等待,以及在获取查询本身时进行非阻塞等待?我真的更愿意将其保留在一个线程上,因为函数本身会阻塞调用它的代码。任何帮助将不胜感激!
c# - C#如何在数据通信中实现等待确认?
我有一个类应该以数据包的形式发送/接收数据。此类包含一个事件处理程序,当新数据可从物理介质读取时运行。
在事件处理程序中,我从媒体读取数据并解析可用数据以获取完整的数据包。一旦识别出一个数据包,就会引发一个事件以将新数据包传递给订阅者。此事件的订阅者决定是否要使用该数据包。
到目前为止一切顺利......现在我的问题。虽然上面的场景可以将传入的数据分发给众多订阅者,并将进一步的处理逻辑放在应用程序中,但它给我留下了一个问题:
有时班级会收到一个数据包,它只是对班级发送的另一个数据包的回复(想想 ACK/FAIL)。
我将如何实现一种方法来发送等待此类确认的内容,同时又不破坏上述在事件处理程序中处理传入原始数据的概念?
一些伪代码来说明问题:
也许之前有一个好主意,甚至实现过这样的逻辑。我现在有点困惑该怎么办。很高兴有任何帮助或正确方向的指示;-)
lua - Lua - 从用户那里获取命令行输入?
在我的 lua 程序中,我想在继续操作之前停止并要求用户确认。我不确定如何停止并等待用户输入,怎么做?
api - 有一个函数调用块是一个糟糕的设计过程吗?
我正在编写一个 API,用于从另一个应用程序接收一些数据。目前,该功能旨在阻止直到接收到数据。在我看来,这限制了使用 API 的开发人员使用多线程或某种多进程设计。那么,一个函数是阻塞还是返回一个空值,然后休眠几毫秒,然后再试一次更好。
请注意,其他应用程序可能在未知的时间段内没有任何数据要通过 API 发送。
API 是用 C++ 编写的
java - CamelContext.start() 不会阻塞
我想运行一个简单的Apache Camel示例,将文件从一个目录复制到另一个目录:
如果我使用 Apache Camel 2.0.0 运行此示例,程序会立即退出context.start();
并且什么也不做。如果我Thread.sleep(30000);
在启动后添加CamelContext
,后台线程会完成它们的工作,并且文件会从源目录复制到目标目录 30 秒。
但是,如果我使用 Apache Camel 1.6.2 运行相同的代码,该start()
方法会自动阻塞,我不需要让主线程进入睡眠状态来复制文件。我没有发现这种行为从 Camel 1.x 更改为 2.x 的提示。这真的是预期的行为吗?是否可以让 start() 方法阻止 Camel 2.0.0 中的执行?
谢谢
c# - 在 C# 中阻止函数调用
如何在 C# 中阻止函数调用?
这个函数被不同的类重复调用。我想把它锁起来,这样在我执行当前操作之前没有人可以使用它。然后,我想再次发布它。
请帮忙..
谢谢
编辑:我实际上并没有使用线程......但我正在使用重复调用该函数的计时器,并且它也在不同的类之间被调用。
macos - NSURLConnection - 是否可以等待/阻止请求?
我需要等待来自 SOAP Web 服务的响应,我通过 NSURLConnection 调用,因为我需要操作返回的数据,然后将其从我的类返回给调用类。
这是我的代码:
CheckEmailAddress 被声明为返回一个整数值(我知道它在上面的示例中没有返回任何内容)。
我理想中想要的是通过 CheckEmailAddress 方法,返回从 Web 服务检索到的值。但是,由于调用 NSURLConnection 不会等到请求完成,所以我不能这样做。
如果有人能给我任何潜在的解决方法的想法,我将不胜感激。
c# - 设备驱动程序 DLL 阻塞与非阻塞?
我的公司生产一种通过 USB 连接到 PC 的产品。我正在为此产品编写一个使用 Visual C# 的 DLL 驱动程序,以便任何想要编写可以控制或设备的程序的人都可以这样做。驱动程序将执行的某些操作需要几秒钟才能完成设备(例如将电机在设备中移动 10,000 步)。我正在考虑对这个驱动程序使用两种不同的方法,但我不确定哪种方法是理想的。
第一种方法:使命令非阻塞。基本上,客户端应用程序会调用我的 dll 中的一个方法来启动电机转动,并且该方法会立即返回。然后我会有一个事件,“MoveFinished”,在移动完成时触发。这种方法将允许客户端应用程序在电机移动时不会冻结并执行其他操作,而无需使用多线程。
第二种方法:使命令阻塞。因此,当客户端应用程序调用 Move 方法时,该方法会阻塞并且在移动完成之前不会返回。这将导致客户端应用程序在移动发生时冻结(除非它们使用多线程),但它也可能很有用,因为它不会允许客户端应用程序犯愚蠢的错误,例如在设备时调用 move 方法已经在动了……
有没有人有任何经验、智慧、评论或想法可以分享?
c# - Uploadify + Castleproject Monorail:上传时无法进行 Ajax 调用
我正在使用 uploadify jquery 插件和 CastleProject Monorail 作为后端的项目。我遇到的问题是,在上传时它似乎阻止了 ajax 调用(同时被调用)。上传完成后调用 ajax。
奇怪的是,当我在一个新的 castleproject monorail 项目中实现 uploadify 时,同时调用的 ajax 调用确实有效。
在前一个项目中似乎有一些我目前无法想到的设置导致阻塞。Web.config 设置相同。
有谁知道这可能是什么原因?
谢谢
更新:
我想我发现了问题:一旦使用了 Session 对象,网络服务器就会阻止多个请求。这是为了规避更普遍的竞争条件问题。
有什么方法可以禁用它,这样我就可以自己处理比赛条件了吗?