gpt4 book ai didi

macos - osx 上的 aio : Is it implemented in the kernel or with user threads? 其他选项?

转载 作者:行者123 更新时间:2023-12-01 11:57:10 24 4
gpt4 key购买 nike

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

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

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

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

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

您对这个主题有何经验?

最佳答案

您可以准确地看到 AIO 在 OSX 上是如何实现的 here .

该实现使用内核线程,一个作业队列,每个线程根据每个请求的优先级以阻塞方式弹出并在优先级队列中执行(至少乍一看是这样)。

您可以使用sysctl 配置线程数和队列大小。要查看这些选项和默认值,请运行 sysctl -a | grep aio

kern.aiomax = 90
kern.aioprocmax = 16
kern.aiothreads = 4

根据我的经验,为了使使用 AIO 有意义,这些限制需要高得多。

至于线程中的回调,我认为 Mac OS X 不支持它。它仅通过信号发出完成通知(参见源代码)。

您可以在自己的线程池中完成同样的工作。您可以比当前的 darwin 实现做得更好的一件事是按磁盘上的物理位置对您的读取作业进行排序(请参阅 fcntlF_LOG2PHYS),这甚至可能会给您带来优势.

关于macos - osx 上的 aio : Is it implemented in the kernel or with user threads? 其他选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5902662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com