Abr*_*ile 8 sockets linux asynchronous linux-kernel
我已经开始研究一种我不知道在Linux中称为asynch IO的新范例.
我的目标是使用异步IO目标套接字来编写高性能的高效服务器.原因是我的应用程序是IO绑定的.
在搜索更多信息时,我遇到了以下两个介绍.
在异步框架中,我想避免的情况是为每个需要异步处理的通知创建一个新线程,因为它会终止我的应用程序.
我的问题如下:
这两个框架的幕后工作是否解决了这个问题?
如果是的话,你会建议考虑插座吗?
问候
AFG
这些都不是真正用于套接字的.
POSIX AIO接口创建使用常规阻塞IO的线程.它们使用缓冲区缓存,原则上应该使用套接字(虽然我承认没有尝试).
Linux内核AIO接口不会创建处理请求的线程.它仅在"无缓冲"模式下工作.请注意非显而易见的行为,例如在某些情况下提交请求时阻止,您既不能预见也不能阻止(也不知道除了您的程序"非常奇怪").
你想要的是非阻塞套接字(非阻塞套接字是"一种异步")并将epoll准备就绪通知的开销降至最低,并且 - 如果你能找出几乎不存在的文档 - splice并vmsplice减少IO高架.使用splice/ vmsplice你可以直接从磁盘DMA到内核缓冲区并从那里推送到网络堆栈.或者,您可以直接将页面从应用程序的地址空间移动到内核,然后推送到网络.
缺点是文档稀疏(至少可以说),特别是TCP,一些问题仍未得到解决,例如,当回收内存安全时.
| 归档时间: |
|
| 查看次数: |
5047 次 |
| 最近记录: |