免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: fm971
打印 上一主题 下一主题

[算法] 超高性能网络编程, Asynchronous network I/O [复制链接]

论坛徽章:
0
51 [报告]
发表于 2008-07-18 13:57 |只看该作者
这个加精吧 :)

论坛徽章:
0
52 [报告]
发表于 2008-07-18 15:12 |只看该作者
linux最新的内核有实现真正的AIO吗?

论坛徽章:
0
53 [报告]
发表于 2008-07-18 15:59 |只看该作者
原帖由 cookis 于 2008-7-18 10:51 发表
能否讲一下 sk_buff 在什么环境下使用, 有什么效果?


Linux 的 TCP/IP协议栈是用sk_buff, 主要满足协议栈对缓存的要求, 比如各层之间的透明.
另一种被讨论的方法, 大概叫"分散/聚合缓存",  通过一次内存操作可以处理不同位置的内存分片.  会有优势的地方.

论坛徽章:
0
54 [报告]
发表于 2008-07-18 16:08 |只看该作者
原帖由 cookis 于 2008-7-18 11:33 发表
OK

event_loop run with thread1  

业务逻辑肯定运行在另外一个线程thread2. 如果thread2 想注册或先移除一个socket.
不能直接操作event_list吧.


一般来说应该有锁操作.  libevent怎么实现我也不知道.
做自己的协议栈一般不会用开源库, 比如说在嵌入式机的 IP/TCP/ 上再实现一层. 目前我也不用libevent.

论坛徽章:
0
55 [报告]
发表于 2008-07-18 16:17 |只看该作者
中小量链接用select

大量用epoll等(操作系统依赖)

论坛徽章:
0
56 [报告]
发表于 2008-07-18 16:59 |只看该作者
学习中.没有看到关键.

论坛徽章:
0
57 [报告]
发表于 2008-07-18 17:12 |只看该作者
呵呵,我现在做的东西跟楼主做的几乎一样,也是交换数据的,说说自己的一些看法。

(1) I/O 模型的选择,

epoll就一定好吗?  epoll最有用的就是ET模式,适合于那种有大量连接,但是有数据连接有限的情况,
如果你有10000个连接,但是很不幸,这10000个连接全部都有数据,你还是得遍历一把进行处理,( 这里对ET模式下怎么处理数据就不讨论了)。

这个和select, poll有什么区别。

epoll还有比select, poll先进得地方, 就在于将fd得列表维护在内核中, 而select, poll是调用一次,传递一次, 这点epoll领先是没得说得。

但是如果我是每个线程处理100个连接, 分10个线程来处理1000个连接, 那么上面得优点几乎可以不考虑。

模型得选择要符合自己得程序架构,不见得最先进的东西就适合你

(2) 使用非堵塞

做为网络服务器, 堵塞I/O一般情况下不予考虑

(3) 减少I/O操作和无谓的系统调用

比如利用writev一次性写入多个数据, 减少write调用的次数.

(4) tcp是双工的

这点不要忽略掉, 数据转发程序就在于数据的转发速度, 这里我采用读和写分开线程的处理方式

(5) 进程还是线程

这个无关紧要,一个粒度和数据访问, 稳定性的问题。减少之间的相互影响,尽量没有关联, 比如减少对相关互斥数据的访问等等。

(6) 尽量在设计上做到不需要同步

比如使用环形

论坛徽章:
0
58 [报告]
发表于 2008-07-18 17:13 |只看该作者
呵呵,我现在做的东西跟楼主做的几乎一样,也是交换数据的,说说自己的一些看法。

(1) I/O 模型的选择,

epoll就一定好吗?  epoll最有用的就是ET模式,适合于那种有大量连接,但是有数据连接有限的情况,
如果你有10000个连接,但是很不幸,这10000个连接全部都有数据,你还是得遍历一把进行处理,( 这里对ET模式下怎么处理数据就不讨论了)。

这个和select, poll有什么区别。

epoll还有比select, poll先进得地方, 就在于将fd得列表维护在内核中, 而select, poll是调用一次,传递一次, 这点epoll领先是没得说得。

但是如果我是每个线程处理100个连接, 分10个线程来处理1000个连接, 那么上面得优点几乎可以不考虑。

模型得选择要符合自己得程序架构,不见得最先进的东西就适合你

(2) 使用非堵塞

做为网络服务器, 堵塞I/O一般情况下不予考虑

(3) 减少I/O操作和无谓的系统调用

比如利用writev一次性写入多个数据, 减少write调用的次数.

(4) tcp是双工的

这点不要忽略掉, 数据转发程序就在于数据的转发速度, 这里我采用读和写分开线程的处理方式

(5) 进程还是线程

这个无关紧要,一个粒度和数据访问, 稳定性的问题。减少之间的相互影响,尽量没有关联, 比如减少对相关互斥数据的访问等等。

(6) 尽量在设计上做到不需要同步
比如使用环

论坛徽章:
0
59 [报告]
发表于 2008-07-18 17:25 |只看该作者
好帖,顶一下,比较有兴趣,学习ing,继续看大家讨论

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
60 [报告]
发表于 2008-07-18 17:26 |只看该作者
原帖由 unixpm 于 2008-7-18 17:12 发表

这10000个连接全部都有数据,你还是得遍历一把进行处理,


为什么要遍历一把.. epoll已经将活动的句柄全部返回了..剩下的是你自己定位的算法问题了..是遍历还是用fd索引
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP