问题标签 [aio]

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 回答
13479 浏览

linux - linux上的缓冲异步文件I/O

我正在寻找在 linux 上进行异步文件 I/O 的最有效方法。

POSIX glibc 实现在用户空间中使用线程。

本机 aio 内核 api 仅适用于无缓冲操作,存在用于内核添加对缓冲操作的支持的补丁,但这些补丁已经超过 3 年了,似乎没有人关心将它们集成到主线中。

我发现了许多允许异步 I/O 的其他想法、概念、补丁,尽管其中大部分都在 3 年以上的文章中。所有这些在今天的内核中真正可用的是什么?我读过关于 servlet、acall、内核线程的东西以及更多我现在不记得的东西。

在当今内核中进行缓冲异步文件输入/输出的最有效方法是什么?

0 投票
3 回答
1488 浏览

java - 大字节数组传输到客户端

让我介绍一下我的情况。

我有很多字节数据存储在服务器上的文件中。我正在使用 JDK7 中的 AIO 编写和读取这些文件。因此,我使用 ByteBuffer(s) 进行读写操作。

问题是,一旦我对 AsynchronousFileChannel 执行了读取,我想将读取操作中使用的 ByteByffer 的内容传输到客户端。因此我实际上想发送字节。

从这里出发的最佳方式是什么。我不想发送 ByteBuffer,因为我有一个可以重复使用的池,因此这不是一个选项。我甚至希望能够组合多个读取并一次发送多个 ByteBuffer(s) 组合的内容。

那我送什么。只是一个 byte[] 数组?还是我需要一些流?关于性能的最佳解决方案是什么。

我正在使用 RMI 进行通信。

提前谢谢。

0 投票
4 回答
16693 浏览

linux - 事件驱动和异步有什么区别?在 epoll 和 AIO 之间?

事件驱动和异步经常被用作同义词。两者之间有什么区别吗?

epoll另外,和 和有什么区别aio?它们是如何组合在一起的?

最后,我多次读到 Linux 中的 AIO 严重损坏。它到底是怎么破的?

谢谢。

0 投票
2 回答
3316 浏览

macos - aio on osx:它是在内核中实现的还是在用户线程中实现的?其他选择?

我正在研究我的小型 c++ 框架,并且有一个文件类,它也应该支持异步读写。除了在我发现的一些工作线程中使用同步文件 i/o 之外,唯一的解决方案是 aio。无论如何,我环顾四周并在某处阅读,在 Linux 中,aio 甚至没有在内核中实现,而是在用户线程中实现。OSX 也一样吗?另一个问题是 aio 的回调功能,它必须为每个回调生成一个额外的线程,因为您不能分配某个线程或线程池来处理它(信号不是我的选择)。因此,以下是由此产生的问题:

  • aio 是否在 osx 的内核中实现,因此很可能比我自己的线程实现更好?

  • 回调系统 - 为每个回调生成一个线程 - 会成为实践中的瓶颈吗?

  • 如果 aio 不值得在 osx 上使用,在 unix 上还有其他选择吗?在可可?在碳?

  • 或者我应该简单地用我自己的线程池模拟异步 i/o?

你在这个问题上的经验是什么?

0 投票
1 回答
121 浏览

linux - 在主动式 Web 服务器中接受连接的传统方式(使用异步 IO)

我目前正在探索 linux 上的 aio 以使用它来实现 Web 服务器。正如我已经发现的那样,没有太多资源可以详细介绍 aio 的用法。

问题是——在使用 aio 的单线程应用程序中接受客户端连接的传统方式是什么?(尽可能减少阻塞)

理想情况下,我可以看到 aio_accept 操作发送一个通知(在我的例子中是回调函数调用),表明连接已建立,并且在处理程序内立即调用 aio_read。但是没有这样的电话:(

谢谢!

0 投票
2 回答
488 浏览

c - 检查 aio_write 是否完成

有什么方法可以检查给定文件是否没有 AIO 写入?我在我的 Unix 课程上制作了一个项目,该项目将是一个无上下文(基于 UDP)的国际象棋服务器,所有数据都必须存储在文件中。应用程序将是单进程和单线程的(AIO 功能除外)。我的问题是:

1)玩家一发送一些数据,触发 aio_write 操作到文件,然后进程继续
2)玩家二请求应该从该文件中读取的当前板状态,但如果之前的 aio_write 尚未完成,那么这个文件不是最终的,所以我应该尚未读取但等待 aio_write 结束。
问题是因为它是无上下文的,所以我没有来自 aio_write 调用的 aiocb 结构。

也可能有来自其他游戏(使用不同文件)的 aio_writes 我不需要关心,只有当特定文件当前正在写入时。

0 投票
1 回答
757 浏览

c - 一个 nginx 工作进程是同时处理两个请求还是一个一个处理?

过滤器链最酷的部分是每个过滤器不会等待前一个过滤器完成;它可以在生成前一个过滤器的输出时对其进行处理,有点像 Unix 管道。(从这里

我猜上面是在每个过滤器末尾谈论这样的代码:

也就是,nginx 将过滤器一一链接起来。但是由于它在每个过滤器的末尾,它必须等到当前过滤器完成。我不明白 nginx 是如何做到的each filter doesn't wait for the previous filter to finish

所以上面是关于nginx过滤器的并发,接下来是关于nginx请求处理的并发:

我们知道 nginxepoll用来处理请求:

使用上面的代码,我不认为 nginx 可以同时处理两个请求,它只能一个一个地完成(每个都handler足够快地完成它的工作,所以下一个请求很快就会得到处理),对吧?

或者我有什么遗漏吗?

0 投票
4 回答
11299 浏览

c - C - 如何同时使用 aio_read() 和 aio_write()

我在需要读写的地方实现了游戏服务器。所以我接受传入的连接并开始使用aio_read()从中读取,但是当我需要发送一些东西时,我停止使用aio_cancel()读取,然后使用aio_write()。在 write 的回调中,我继续阅读。所以,我确实一直在阅读,但是当我需要发送一些东西时——我会暂停阅读。

它的工作时间约为 20% - 在其他情况下,对aio_cancel()的调用失败并显示“正在进行操作” - 我无法取消它(即使在永久循环内)。所以,我添加的写操作永远不会发生。

如何用好这些功能?我错过了什么?

编辑:在 Linux 2.6.35 下使用。Ubuntu 10 - 32 位。

示例代码:

0 投票
1 回答
6517 浏览

c - linux内核aio功能

我正在测试内核异步 io 函数(不是 posix aio),并试图弄清楚它是如何工作的。下面的代码是一个完整的程序,我只需将数组重复写入使用 O_DIRECT 打开的文件。我在回调函数“写丢失的字节期望 1024 得到 0”中收到错误(请参阅 work_done() 中的 fprintf 语句)。

对于不熟悉内核 aio 的人,下面的代码执行以下操作:

  1. 初始化一些结构
  2. 准备 aio (io_prep_pwrite)
  3. 提交 io 请求 (io_submit)
  4. 检查事件完成 (io_getevents)
  5. 调用回调函数查看是否一切正常。

我在第 5 步遇到错误。如果我不使用 O_DIRECT 打开文件,一切正常,但它超出了异步写入的目的。有人可以告诉我我做错了什么吗?这是内核 aio 的正确用法吗,例如,我对回调的使用正确吗?O_DIRECT 的使用有什么限制吗?

我使用'gcc -Wall test.c -laio'进行编译

提前致谢。

0 投票
3 回答
3099 浏览

c++ - Linux 上的 AIO 支持

有谁知道我在哪里可以获得有关最新 Linux 内核上 aio 的内核支持状态的最新信息?谷歌搜索带来的网页可能已经过时了。

编辑:

更具体地说,我对管道和套接字等非文件相关的描述符感兴趣。网上的东西都说不支持,现在还是这样吗?

Edit2:我正在寻找类似于 Windows OVERLAPPED IO 的东西