win10tgp不能一键换装:Linux下的服务器开发模型 Epoll和AIO的讨论 - 趋势创造者-祗偽妳動訫 serious more. - JavaEye技术网站
来源:百度文库 编辑:偶看新闻 时间:2024/04/30 08:42:54
Linux下的服务器开发模型 Epoll和AIO的讨论
知道Boost中的AIO模型库是使用Epoll实现的,请看下面的讨论!应该很有帮助的,文章概论了几乎所有开发模型的效率!1:
EPOLL!=AIO
我只是说Boost的网络库在linux下是用linux的epoll实现的
ACE中有ACE_POSIX_AIOCB_Proactor和ACE_Dev_Poll_Reactor,分别用aio和epoll实现,这是2个不同的东西
2:
AIO = AsynchronousI/O,指的是一种I/O处理模式,在不同的系统中有不同的实现方式,Win2k的IOCP、Linux的EPOLL等都是实现AIO的一种编程模型,也有的库直接就用AIO作为名字,需要加以区别,否则各人所说的AIO如果是指不同的东东,那就没法沟通了
3:
ACE_POSIX_AIOCB_Proactor使用的是linux下一种类似完成端口的实现
ACE_Dev_Poll_Reactor用的是EPOLL,他是类似select的模式但是返回的都是激发句柄
我想问的是这2种东西在linux下哪种效率更高?
以下是网上搜索到的资料,是不是正如其所说,linux下EPOLL效率最高,posix aio不是很好?
阻塞方式
最基本的
select
应该也是最基本的
支持不了太多的句柄
windows上不能超过64个
poll
还是最基本的
比select好一点,也好不到哪儿去
/sys/poll
linux上的实现基本是增强了的poll,也好不到哪儿去
sun os上也有,不知道怎么样
/sys/epoll
linux上最高效的模型了,以前的kernel版本不支持
aio
posix标准,具体实现不一样
rtsig
也是linux上的io模型,效率和epoll差不多
kqueue
freebsd的io模型,简单易用,效率不错 :)
AsyncSelect
windows上的一种io模型,针对socket, 把io事件通过windows message通知用户,比较适合客户端软件。
EventSelect
和上面的差不多,只是通过Event系统对象通知。由于XP以前没有ConnectEx, win9x上没有AcceptEx.
考虑向下兼容的系统必须要用这种方式来处理异步Socket连接
overlapped
windows上的io模型。
在nt系统中推荐和io completed port 组合使用
9x上可以使用 event 通知或者通过apc queue来接收通知。
4:
我的理解是AIO只是一种接口标准。各个平台都有自己的实现。
就如同STL各种编译器都有自己的实现。所以你的提问意义不大。
5:
posix aio的确一个接口标准,但不同操作系统的实现的效率不一定一样。
6:
> 我的理解是AIO只是一种接口标准。各个平台都有自己的实现。
> 就如同STL各种编译器都有自己的实现。所以你的提问意义不大。
7:
用这两种方式,分另写一个简单的echo服务,然后对其压力测试,比较测试结果不就可以了?
做这样的事估计花不了多少时间吧.
8:
aio & epoll 不是一样的东西,aio
已经加入到了linux2.4.*以上了,不过当前使用aio的系统主要都是基于通用文件系统和网路io,但很少有应用服务器使用该方式的网路io。他对poll的性能提升非常的大,但和epoll相比,它会映入更多的用户内存空间到内核中。
不过从redhat的测试中,aio-poll的性能要比epoll强。
9:
我写错了,
redhat的测试中,epoll的性能要比aio-poll强,使用aio主要是帮助提升poll的性能
10:
AIO是一套标准,
各家操作系统可以实现也可以不实现。
在不同操作系统上在高并发情况下最好都采用操作系统推荐的方式。
kuoxin也说过了LINUX没有实现网络方式的AIO,其实我认为最接近
网络AIO的是WINDOWS下的IOCP。EPOLL不是AIO。
11:
是吗? 我记得 epoll是针对大用户做优化,而aio用在大数据量!
是我记错了?
11:
印像中LINUX的作者也不赞成用AIO,而且大量的实例用的是EPOLL,而不是AIO。
BTW:是boost的那个库叫asio,不叫aio吧,他也好像是用单线程的吧(我记不清了)
12:
的确叫asio,是我记错了。asio的io_service::run()是可以多线程同时跑的。
13:
插句题外话,在windows下通过重定义那个宏,是可以让select支持多余64个socket的,我做过试验。
14:
一个selector最多只能支持64个socket?
15:
ddh应该是说*WaitForMultipleObjects最多*只能64个
16:
那么一个selector可以注册的socket是否有最大限制?
17:
select好像没限制。不过连接很多的应用也不会用select。因为存在遍历*FD_SET*查找激活句柄的效率问题。
18:
不了解java。要效率还是用C++吧,要快速开发用java。
好像ACE库的TAO是java的,我不是很清楚,不知道好用不。
如何使用Linux的epoll
linux下的图形界面开发
怎么构建linux 下的电影服务器
关于linux下apache服务器的问题
linux下配置web服务器的问题
Linux服务器下的文件属性777
linux下常用的服务器有哪些?
一般Linux下开发都是什么样的平台阿?
软件开发模型的问题
瀑布模型的开发方法
linux下的c语言开发和java开发哪个更有前途?
Linux下开发和Windows下开发各有啥优缺点?
linux下做电影服务器
Linux下访问FTP服务器?
linux下安装程序图形开发工具
Linux是谁开发出来的?
想请教下linux双网服务器的做法!!
求:Linux系统下服务器群组的架设
在linux下可以使用的web服务器有哪些?
Linux下那个版本的服务器简单好用?
谁知道Linux环境下Apache服务器的配置
如何在windows下监视linux服务器的信息
开发服务器的项目
LINUX服务器的端口映射