问题标签 [nonblocking]
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.
dialog - Applescript 中的非阻塞对话框
我必须编写一个小脚本来为我们的应用程序部署补丁。该补丁将替换应用程序中的几个文件。我决定使用 Applescript 部署该补丁。要复制的文件很大,复制文件需要一些时间。我想知道是否有任何方法可以获得一个不会阻止脚本执行的对话框,以便我可以在应用补丁时显示一些消息,如更新..等,然后在病房后关闭对话框.
谢谢希瓦普拉萨德
perl - Perl 中的非阻塞 I/O 操作是否仅限于一个线程?好的设计?
我正在尝试开发一种服务,该服务包含通过IO::Select
. 这个想法是处理通过工作线程池产生的 I/O 和/或请求处理需求。
shared
在 Perl ( ) 中使数据可跨线程共享的关键字threads::shared
有其局限性——句柄引用不在可以共享的原语中。
在我发现无法共享句柄和/或句柄引用之前,计划是有一个select()
线程来处理轮询,然后将相关句柄放在ThreadQueue
分布在线程池中的某些 s 中以实际执行读取和写入. (当然,我是这样设计的,以便对所使用的实际描述符集的修改select
是线程安全的,并且只发生在一个线程中——运行的同一个线程select()
,因此显然不会在它运行时进行。)
现在似乎不会发生这种情况,因为句柄本身无法共享,因此轮询以及读取和写入都需要从一个线程中进行。有什么解决方法吗?我指的是跨线程的实际系统调用的分解;显然,有一些方法可以使用队列和缓冲区在其他线程中生成数据并在其他线程中实际发送。
这种情况产生的一个问题是我必须给出select()
一个超时,并期望它足够高,不会导致轮询相当大的一组描述符时出现任何问题,同时又足够低,不会在我的计时中引入太多延迟事件循环——不过,我确实明白,如果在轮询过程中检测到实际的 I/O 集成员资格,select()
将提前返回,这在一定程度上缓解了问题。我宁愿有某种方式select()
从另一个线程中唤醒,但由于无法共享句柄,我无法轻易想到这样做的方法,也看不到这样做的价值;无论如何,其他线程会知道什么时候适合醒来select()
?
如果没有解决方法,那么在 Perl 中这种类型的服务有什么好的设计模式?我需要相当高的可扩展性和并发 I/O,因此走的是非阻塞路线,而不是仅仅为每个侦听套接字和/或客户端和/或服务器进程生成线程,因为许多人使用更高-这些天来,级别语言在处理套接字时已经习惯了——这似乎是 Java 领域的一种标准做法,似乎没有人关心java.nio.*
在面向系统编程的狭窄领域之外。也许这只是我的印象。无论如何,我不想那样做。
那么,从经验丰富的 Perl 系统程序员的角度来看,这些东西应该如何组织呢?单片 I/O 线程 + 纯工作(非 I/O)线程 + 大量队列?某种聪明的hack?除了我已经列举的之外,还有什么需要注意的线程安全问题吗?有没有更好的办法?我在用 C 语言构建此类程序方面拥有丰富的经验,但没有 Perl 习惯用法或运行时特性。
编辑: PS 我肯定想到,也许具有这些性能要求的程序和这种设计根本不应该用 Perl 编写。但是我看到 Perl 产生了很多非常复杂的服务,所以我不确定。
.net - c#中简单的线程安全非阻塞文件记录器类
我有一个 Web 应用程序,它将一些信息记录到文件中。我正在 C# 中寻找一个简单的线程安全的非阻塞文件记录器类。我对线程的经验很少。我知道那里有很棒的日志记录组件,例如 log4Net、Enterprise Library Logging Block、ELMAH,但我不希望我的应用程序有外部依赖。我正在考虑使用这个队列实现http://www.codeproject.com/KB/cpp/lockfreeq.aspx
synchronization - 无锁和非阻塞有什么区别?
在数据结构同步的上下文中,有人可以澄清“无锁”和“非阻塞”之间的区别吗?这些术语似乎被很多人互换使用,但我还不确定是否在某处隐藏了一些细微的差异。
我的意思是无锁是“没有锁”,非阻塞更像是保证进度。我怀疑一个暗示另一个,但不是相反,我不确定。
欢迎参考。
python - 如何获得非阻塞套接字连接()?
我在这里有一个非常简单的问题。我需要同时与很多主机通信,但我并不需要任何同步,因为每个请求都是自给自足的。
因此,我选择使用异步套接字,而不是垃圾邮件线程。现在我确实有一个小问题:
异步的东西就像一个魅力,但是当我连接到 100 个主机时,我得到 100 个超时(超时 = 10 秒)然后我等待 1000 秒,只是为了找出我所有的连接都失败了。
有什么办法也可以获得非阻塞套接字连接?我的套接字已设置为非阻塞,但对 connect() 的调用仍处于阻塞状态。
减少超时不是一个可接受的解决方案。
我在 Python 中执行此操作,但我想在这种情况下编程语言并不重要。
我真的需要使用线程吗?
javascript - 如何在加载缩略图时提供反馈并控制加载顺序
我正在建立一个网站,在一个页面上包含大约 250-300 个缩略图,包含在 5 个不同的 div 中,每个 div 都可以水平滚动。
但是,在加载阶段,我需要能够单击缩略图并将全分辨率图片加载到灯箱中。
我看过 Jason Buntings 在How to display loading status with preloader and multiple images? 中的回答?这让我走到了一半:它在 IE 中有效,但在 FF 中无效,在加载所有缩略图之前它不会加载灯箱图像。
所以我基于相同的概念推出了自己的代码构建:它可以工作但不稳定(随机挂起)并且使用大量内存:
ConnectionManager 看起来像这样:
这是一个基本合理的概念还是我离题了?你知道任何更好/更简单的方法吗?
events - 阻塞 IO 与非阻塞 IO;寻找好文章
曾几何时,我偶然看到Indy 简介文章,从那时起就无法停止思考阻塞与非阻塞 IO。
寻找一些好的文章来描述阻塞 IO 和非阻塞 IO 的优缺点以及如何在每种情况下设计您的应用程序以获得自然、易于理解和易于维护的代码。
想了解大图...
c - 非阻塞标准输出
我正在开发一个程序,该程序将从控制台接收用户输入并在单独的线程中打印出来。我想避免用户在输入内容到一半时出现 printf 并在光标处打印自身的情况。
有没有办法从控制台窗口在 c 中执行非阻塞 io?理想情况下,捕获按键或类似的东西,这样用户键入的内容就不会出现在屏幕上。我在 Ubuntu 中开发,最好不要使用 ncurses 之类的东西。
c# - 对 DataGridView 的非阻塞更新
我了解如何使用委托来更新主控制线程上的控件,就像一个魅力。我的问题是,如果我将一个大的DataSet
(比如 2000 个项目)添加到一个 boundDataGridView
中,填充网格需要 5-8 秒,并且在这 5-8 秒内整个 GUI 被锁定。如何更新DataGridView
它以使其不锁定用户界面?
需要明确的是,问题不在于我正在对数据库进行慢速查询并且 UI 阻塞了它,我已经有了DataSet object[]
并将对象数组添加到绑定到的 aBindingList<object>
中:DataGrid
我尝试了各种事情(我知道不会工作,但我想我会看到),比如创建一个执行 的委托dataProvider.Add()
,但这并不重要,因为它仍然必须在控制线程上发生。
一些好的建议围绕着构建第BindingList
一个然后设置gridView.DataSource
. 虽然这有效(它会立即更新网格),但我看到添加更多数据的唯一方法是创建另一个新BindingList
的,做一个gridView.DataSource.copyTo()
(获取现有数据)并在其上添加新数据,然后gridView.DataSource
将新的BindingList
。这对我不起作用,因为我列表中的对象不是静态的,它们每个都将数据异步上传到服务器,并将它们复制到新的BindingList
会导致问题。
java - Java:SelectionKey.attach() 坏了吗?
在我的 Java NIO 实现中,我无法让 SelectionKey.attach() 工作。基本上,一旦客户端连接(OP_ACCEPT 兴趣操作),我将它们添加到映射中,其中它们的 IP 地址映射到维护客户端状态的对象。然后,当发生 OP_READ 时,我再次检索客户端的 IP 地址,这次从映射中获取值并以这种方式获取客户端的状态对象。
这里的问题是,每次从网络读取数据时,我都必须进行地图查找。那里有很多浪费的工作。因此,我很高兴看到您可以将任意对象类型附加到 SelectionKey,当您调用 SelectionKey.attachment() 时应该很容易检索到,即使我们现在正在处理不同的事件(在 OP_READ 期间检索而不是放入在 OP_ACCEPT 期间映射)。
问题是它不起作用。当我检索附件时,它始终为空。如果我通过 attach() 设置附件,然后立即调用 attachment(),它确实有效。不知何故,在不同的事件之间,它失去了关联。
对不起,我的代码在这里发布有点长,但是如果您查看此线程中的评论: 链接文本 ...您会看到其他一些人基本上得出了相同的结论:即 attach() 和attachment() 不起作用,而且从来没有。
是否有让它工作的技巧,或者我是否坚持在每次有新的读取事件要处理时手动在地图中进行查找所必需的邪恶开销?
最后,有没有办法在一个新的子类中“包装”SelectionKey 来正确处理attach() 和attachment()?
谢谢!