能否有人解释一下posix AIO和freebsd AIO的区别?看起来函数是相同的,aio_read/aio_write。
我知道Linux本机AIO仅适用于Linux,并使用io_setup/io_submit等方法。
能否有人解释一下posix AIO和freebsd AIO的区别?看起来函数是相同的,aio_read/aio_write。
我知道Linux本机AIO仅适用于Linux,并使用io_setup/io_submit等方法。
FreeBSD AIO也是基于内核的,这意味着它不会尝试通过生成用户模式线程并在那里运行IO操作来模拟异步操作。
正如man页面所说:
调用线程调用一个系统调用来请求异步I/O操作。
O_DIRECT
。因此,虽然比Linux上的情况要好,但它并不像Linux上的io_uring或Windows上的OVERLAPPED
那样是“真正的通用异步”。此外,由于设计不良,POSIX aio的扩展性非常差。除非您通过BSD kqueues使用它,否则它通常都是一个糟糕的选择,而在这种情况下,它实际上相当不错。 - Niall Douglaskqueue/kevent
机制可以操作不同类型的描述符。Niall 的意思是,您可以将 aio_sigevent
字段作为 kevent
的参数传递,以便在 AIO 操作完成时获得通知。因此,这不是关于“备份”,而是“协同工作”。 - arrowd