问题标签 [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.

0 投票
4 回答
25497 浏览

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” ?

我可以使用的其他多路复用机制非常好,但是那里漂浮的随机信息片段让我很好奇。

0 投票
4 回答
2467 浏览

.net - .Net 中的异步文件 IO

我正在用 C# 构建一个玩具数据库,以了解有关编译器、优化器和索引技术的更多信息。

我想在将页面带入缓冲池的(至少读取)请求之间保持最大并行度,但我对如何在 .NET 中最好地实现这一点感到困惑。

以下是一些选项以及我遇到的问题:

  1. 用途System.IO.FileStreamBeginRead方法

    但是,文件中的位置不是 的参数BeginRead,它是FileStream(通过Seek方法设置)的属性,所以我一次只能发出一个请求,并且必须在持续时间内锁定流。(或者我是吗?文档不清楚如果我只在SeekandBeginRead调用之间持有锁但在调用之前释放它会发生什么EndRead。有人知道吗?)我知道该怎么做,我只是不确定它是最好的办法。

  2. 似乎还有另一种方式,以System.Threading.Overlapped结构和 P\Invoke 为 中心ReadFileEx在 kernel32.dll 中的函数。

    不幸的是,缺乏样本,尤其是在托管语言中。这条路线(如果它可以工作的话)显然还涉及ThreadPool.BindHandle线程池中的方法和IO完成线程。我的印象是这是在 Windows 下处理这种情况的认可方式,但我不明白,我找不到对初学者有帮助的文档的入口点。

  3. 还有什么?

  4. 在评论中,雅各布建议FileStream为飞行中的每一次阅读创建一个新的。

  5. 将整个文件读入内存。

    如果数据库很小,这将起作用。代码库很小,还有很多其他的低效率,但数据库本身不是。我还想确保我正在做处理大型数据库所需的所有簿记(事实证明这是复杂性的很大一部分:分页、外部排序......)我担心它可能也是容易不小心作弊。

编辑

澄清为什么我对解决方案 1 持怀疑态度:从 BeginRead 到 EndRead 一直持有一个锁意味着我需要阻止任何想要启动读取的人,因为另一次读取正在进行中。这感觉不对,因为启动新读取的线程可能(通常)能够在结果可用之前做更多的工作。(实际上,仅仅写这篇文章就让我想到了一个新的解决方案,我把它作为一个新的答案。)

0 投票
6 回答
21212 浏览

python - Windows 上的 Python - 如何等待多个子进程?

如何在 Windows 上等待 Python 中的多个子进程,而无需主动等待(轮询)?像这样的东西几乎对我有用:

问题是当proc2完成之前proc1,父进程仍然会等待proc1。在 Unix 上,人们会waitpid(0)在一个循环中使用它们来获取子进程完成时的返回码——如何在 Windows 上的 Python 中实现这样的事情?

0 投票
3 回答
3216 浏览

database - PeopleSoft 集成代理异步消息是否在接收端连续触发?

我在 PeopleSoft 应用程序上有一个奇怪的问题。似乎正在无序地处理集成代理消息。还有另一种可能性,那就是提交是异步触发的,允许事务无序完成。

有许多详细记录的插入,然后是尾记录,它对刚刚插入的行执行更新。有些行没有收到更新。这个问题是零星的,大约每 6 个月一次,但它会导致统计上显着的财务报告错误。

我希望有人对 PeopleTools 的内部进行了足够的处理,以了解它在做什么,这样也许我可以找到解决该问题的方法。

0 投票
4 回答
1151 浏览

.net - .NET 中的分散/收集异步套接字 I/O

我正在尝试使用 .NET 中的 Stream.BeginWrite Async I/O API 来处理具有许多短消息的高吞吐量情况。因此,分散/收集 API 将极大地减少上下文切换(和 CPU 使用)的数量。这个 API 是否完全使用 LPBUFFERS Win32 API?是否有用于 Scatter/Gather I/O 的替代 API?

0 投票
7 回答
7247 浏览

.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 被阻塞等待事件发生的正确技术是什么?

0 投票
8 回答
13588 浏览

ruby-on-rails - 在 Rails 应用程序中运行异步作业的最佳方式是什么?

我知道有几个插件可以进行异步处理。哪一个是最好的,为什么?

我知道的有:

0 投票
18 回答
208069 浏览

php - 如何在 PHP 中发出异步 HTTP 请求

PHP中有没有办法进行异步HTTP调用?我不关心响应,我只想做类似的事情file_get_contents(),但在执行我的其余代码之前不要等待请求完成。这对于在我的应用程序中触发某种“事件”或触发长流程非常有用。

有任何想法吗?

0 投票
4 回答
4028 浏览

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 毫秒就足够了。

0 投票
9 回答
9829 浏览

php - PHP 异步 Web 服务

如何使用 ? 对 Web 服务进行异步调用PHP SOAP Extension