问题标签 [asynchronous]
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.
linux - POSIX 异步 I/O (AIO) 的现状如何?
网络上散布着一些页面,它们以不同的详细程度描述了 POSIX AIO 设施。它们都不是最近的。目前尚不清楚他们到底在描述什么。例如,此处用于 Linux 内核异步 I/O 支持的“官方”(?)网站说套接字不起作用,但我的 Ubuntu 8.04.1 工作站上的“aio.h”手册页似乎都暗示了这一点它适用于任意文件描述符。然后还有另一个项目似乎在库层工作,文档更少。
我想知道:
- POSIX AIO 的目的是什么?鉴于我能找到的最明显的实现示例说它不支持套接字,整个事情对我来说似乎很奇怪。它只是用于异步磁盘 I/O 吗?如果是这样,为什么要使用超通用 API?如果不是,为什么磁盘 I/O 首先受到攻击?
- 我可以在哪里查看完整的POSIX AIO 程序示例?
- 真的有人用过吗?
- 哪些平台支持 POSIX AIO?他们支持其中的哪些部分?
<aio.h>
是否有人真正支持似乎承诺的暗示的“任何 FD 的任何 I/O” ?
我可以使用的其他多路复用机制非常好,但是那里漂浮的随机信息片段让我很好奇。
.net - .Net 中的异步文件 IO
我正在用 C# 构建一个玩具数据库,以了解有关编译器、优化器和索引技术的更多信息。
我想在将页面带入缓冲池的(至少读取)请求之间保持最大并行度,但我对如何在 .NET 中最好地实现这一点感到困惑。
以下是一些选项以及我遇到的问题:
用途
System.IO.FileStream
及BeginRead
方法但是,文件中的位置不是 的参数
BeginRead
,它是FileStream
(通过Seek
方法设置)的属性,所以我一次只能发出一个请求,并且必须在持续时间内锁定流。(或者我是吗?文档不清楚如果我只在Seek
andBeginRead
调用之间持有锁但在调用之前释放它会发生什么EndRead
。有人知道吗?)我知道该怎么做,我只是不确定它是最好的办法。似乎还有另一种方式,以
System.Threading.Overlapped
结构和 P\Invoke 为 中心ReadFileEx
在 kernel32.dll 中的函数。不幸的是,缺乏样本,尤其是在托管语言中。这条路线(如果它可以工作的话)显然还涉及
ThreadPool.BindHandle
线程池中的方法和IO完成线程。我的印象是这是在 Windows 下处理这种情况的认可方式,但我不明白,我找不到对初学者有帮助的文档的入口点。还有什么?
在评论中,雅各布建议
FileStream
为飞行中的每一次阅读创建一个新的。将整个文件读入内存。
如果数据库很小,这将起作用。代码库很小,还有很多其他的低效率,但数据库本身不是。我还想确保我正在做处理大型数据库所需的所有簿记(事实证明这是复杂性的很大一部分:分页、外部排序......)我担心它可能也是容易不小心作弊。
编辑
澄清为什么我对解决方案 1 持怀疑态度:从 BeginRead 到 EndRead 一直持有一个锁意味着我需要阻止任何想要启动读取的人,因为另一次读取正在进行中。这感觉不对,因为启动新读取的线程可能(通常)能够在结果可用之前做更多的工作。(实际上,仅仅写这篇文章就让我想到了一个新的解决方案,我把它作为一个新的答案。)
python - Windows 上的 Python - 如何等待多个子进程?
如何在 Windows 上等待 Python 中的多个子进程,而无需主动等待(轮询)?像这样的东西几乎对我有用:
问题是当proc2
完成之前proc1
,父进程仍然会等待proc1
。在 Unix 上,人们会waitpid(0)
在一个循环中使用它们来获取子进程完成时的返回码——如何在 Windows 上的 Python 中实现这样的事情?
database - PeopleSoft 集成代理异步消息是否在接收端连续触发?
我在 PeopleSoft 应用程序上有一个奇怪的问题。似乎正在无序地处理集成代理消息。还有另一种可能性,那就是提交是异步触发的,允许事务无序完成。
有许多详细记录的插入,然后是尾记录,它对刚刚插入的行执行更新。有些行没有收到更新。这个问题是零星的,大约每 6 个月一次,但它会导致统计上显着的财务报告错误。
我希望有人对 PeopleTools 的内部进行了足够的处理,以了解它在做什么,这样也许我可以找到解决该问题的方法。
.net - .NET 中的分散/收集异步套接字 I/O
我正在尝试使用 .NET 中的 Stream.BeginWrite Async I/O API 来处理具有许多短消息的高吞吐量情况。因此,分散/收集 API 将极大地减少上下文切换(和 CPU 使用)的数量。这个 API 是否完全使用 LPBUFFERS Win32 API?是否有用于 Scatter/Gather I/O 的替代 API?
.net - .NET:如何让后台线程信号主线程数据可用?
让ThreadA向某个事件的ThreadB发出信号,而不让ThreadB被阻塞等待事件发生的正确技术是什么?
我有一个后台线程将填充一个共享列表<T>。我正在尝试找到一种方法来异步向“主”线程发出信号,表明有数据可供提取。
我考虑使用 EventWaitHandle 对象设置一个事件,但我不能让我的主线程坐在 Event.WaitOne() 上。
我考虑有一个委托回调,但是a)我不希望主线程在委托中工作:线程需要重新开始工作添加更多的东西——我不希望它在委托执行时等待,并且b ) 委托需要编组到主线程上,但我没有运行 UI,我没有控制权来 .Invoke 委托反对。
我认为有一个委托回调,它只是启动一个零间隔 System.Windows.Forms.Timer(线程访问同步的定时器)。这样线程只需要在调用时被卡住
Timer.Enabled = true;
但这似乎是一个黑客行为。
在过去,我的对象会创建一个隐藏窗口,并让线程将消息发布到该隐藏窗口的 HWND。我考虑过创建一个隐藏控件,但我认为你不能在没有创建句柄的控件上调用。另外,我没有 UI:我的对象可能是在 Web 服务器、服务或控制台上创建的,我不希望出现图形控件 - 我也不希望编译对 System.Windows 的依赖项。形式。
我考虑让我的对象公开一个 ISynchronizeInvoke 接口,但是我需要实现 .Invoke(),这就是我的问题。
让线程 A 向某个事件的线程 B 发出信号,而不让线程 B 被阻塞等待事件发生的正确技术是什么?
php - 如何在 PHP 中发出异步 HTTP 请求
PHP中有没有办法进行异步HTTP调用?我不关心响应,我只想做类似的事情file_get_contents()
,但在执行我的其余代码之前不要等待请求完成。这对于在我的应用程序中触发某种“事件”或触发长流程非常有用。
有任何想法吗?
c# - System.Diagnostics.Process.Start 奇怪的行为
我正在编写一个应用程序来启动和监视 C# 中的其他应用程序。我正在使用 System.Diagnostics.Process 类来启动应用程序,然后使用 Process.Responding 属性监视应用程序,以每 100 毫秒轮询一次应用程序的状态。如果应用程序没有响应,我使用 Process.CloseMainWindow 来停止应用程序或 Process.Kill 来杀死它。
我注意到一个奇怪的行为,有时进程对象进入响应属性始终返回 true 的状态,即使底层进程挂在循环中并且它不响应 CloseMainWindow。
重现它的一种方法是在启动流程实例后立即轮询 Responding 属性。所以例如
将重现错误状态,同时
将工作。将睡眠周期减少到 500 将再次引入错误状态。
启动后调用 _process.Responding 太快似乎会阻止对象获取正确的 Windows 消息队列处理程序。我想我需要等待 _process.Start 完成它的异步工作。有没有比调用 Thread.Sleep 更好的方法来等待这个?我不太相信 1000 毫秒就足够了。
php - PHP 异步 Web 服务
如何使用 ? 对 Web 服务进行异步调用PHP SOAP Extension
?