C Linux下的AIO网络套接字和零拷贝
我一直在试验异步Linux网络套接字(aio_read等人,在aio.h/librt中),我一直在试图找出它们是否为零拷贝。到目前为止,我读到的大部分内容都讨论了文件i/O,而我感兴趣的是它的网络i/OC Linux下的AIO网络套接字和零拷贝,c,linux,aio,C,Linux,Aio,我一直在试验异步Linux网络套接字(aio_read等人,在aio.h/librt中),我一直在试图找出它们是否为零拷贝。到目前为止,我读到的大部分内容都讨论了文件i/O,而我感兴趣的是它的网络i/O AIO使用起来有点麻烦,我怀疑它是不可移植的,所以我想知道是否值得坚持使用它。零拷贝几乎是它相对于(非阻塞)select/epoll的唯一优势(我认为这是一个主要优势)。在GLIBC中,AIO是使用POSIX线程和常规的pread-调用实现的。因此,它可能比select或epoll和自己做rea
AIO使用起来有点麻烦,我怀疑它是不可移植的,所以我想知道是否值得坚持使用它。零拷贝几乎是它相对于(非阻塞)select/epoll的唯一优势(我认为这是一个主要优势)。在GLIBC中,AIO是使用POSIX线程和常规的
pread
-调用实现的。因此,它可能比select
或epoll
和自己做read
或recv
更昂贵。AIO似乎是POSIX.1-2001的一部分,所以它应该是可移植的。POSIX/glibc AIO(-lrt
和AIO.*
函数)和Linux AIO(-laio
带有io.
函数)这是两件不同的事情。前者是便携式的,但后者不是。请看。尽管我认为在当前的硬件(以及一些奇特的分页技巧)中,在内核调用的memcopy带宽出现之前,网速就成了瓶颈,这有点令人惊讶。。