Posix AIO 坏/坏了?

发布于 2024-09-08 05:57:54 字数 1436 浏览 12 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

爱,才寂寞 2024-09-15 05:57:54

记录不足肯定是这种情况。

大多数人确实坚持使用poll() / select(),仅仅是因为它们易于理解、经过充分测试、有详细记录并且得到很好的支持。如果我是你,我会使用 select() 除非你有令人信服的理由不这样做。

Poorly documented is certainly the case.

Most people do stick with poll() / select(), simply because these are well-understood, well-tested, well-documented and well-supported. If I were you I would use select() unless you have a compelling reason not to.

混浊又暗下来 2024-09-15 05:57:54

您可以考虑 Boost.Asio跨平台异步套接字库。它有很好的例子并且有广泛的文档记录。

You might consider Boost.Asio for a cross-platform asynchronous socket library. It has excellent examples and is documented extensively.

小情绪 2024-09-15 05:57:54

我无法回答您有关 POSIX AIO 的问题,但我已使用 libev事件。小、快、简单。为 IO 提供了一个很好的包装来代替 poll/select。

I can't answer your question about POSIX AIO, but I've used libev for events. Small, fast, simple. Makes a good wrapper for IO in place of poll/select.

小猫一只 2024-09-15 05:57:54

aio 的问题取决于平台,因此您的决定的很大一部分是您的目标平台。质量差异很大,在某些情况下,它是通过轮询/选择类型调用来实现的。

人们确实倾向于在 Unix 平台上使用 poll/select 或类似的接口(如 kevent/kqueue 或 epoll)来完成此类操作。

aio 接口存在问题,像 aio_waitcomplete() 这样的添加以及 aio 和 kqueues 的集成会产生影响。

使用大量线程来处理大量 I/O 并不是一个好方法。

The issues with aio depend on the platform, so a big part of your decision is what platform you are targeting. Quality varies widely and in some cases it is implemented in terms of poll/select type calls.

People do tend to use poll/select or similar interfaces like kevent/kqueue or epoll for this kind of thing on Unix platforms.

There are problems with the aio interface, and additions like aio_waitcomplete() and the integration of aio and kqueues makes a difference.

Lots of threads for dealing with lots of I/O is not a good approach.

撩心不撩汉 2024-09-15 05:57:54

对于磁盘,为什么必须有 AIO 而不仅仅是缓冲读/写,除非您想 1) 使用自己的缓存 2) 控制对脏页的影响或 3) 使用 IO 优先级?

因为如果您的目标只是代码重构,那么您可能会在当前版本中使用缓存。从缓冲 IO 更改为直接 IO 是一个巨大的变化。

例如,在具有 1.5G RAM 的 ext3/SSD/noop 上,只有 3 个线程执行 300Mb 的流式写入,从而导致小型写入和读取不足。将违规者切换为直接 IO 可以修复该问题,但写入现在需要很长时间。

for disk, why do you have to have AIO instead of just buffered read/write, unless you want to 1) use your own caching 2) control the impact on dirty pages or 3) use IO priorities?

Because if your goal is only code refactoring, then you probably go through cache in the current version. Changing from buffered IO to direct IO is a huge change.

For example, on ext3/SSD/noop with 1,5G of RAM, just 3 threads doing streamed writes of 300Mb starve small writes and reads. Switching the offenders to direct IO fixes that, but the writes now take forever.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文