免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
41 [报告]
发表于 2008-07-18 10:51 |只看该作者

回复 #40 fm971 的帖子

能否讲一下 sk_buff 在什么环境下使用, 有什么效果?

论坛徽章:
0
42 [报告]
发表于 2008-07-18 10:52 |只看该作者
原帖由 cookis 于 2008-7-18 10:35 发表
就像QQ msn 都有心跳, 让服务器知道它们还活着.. 而不是网络中断, 或主机已经断电, 或程序崩溃, 这样才好管理这些client,
而不是一直持有它们所占的资源.

我昨晚看了一下livevent 的 active timeout 机制,  ...



红黑树难道不能知道最小值和最大值吗??

还有我也说了,这是我的效率很低的实现方法。

我想这应该比心跳来的更灵活吧~

我现在的实现方法,就是基于libevent的超时机制,超时 后再调用自己设定的函数,发出确认数据包,没有收到时,就close();

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
43 [报告]
发表于 2008-07-18 10:56 |只看该作者

回复 #41 fm971 的帖子

如果要单线程的话. 定时器的驱动就得是epoll 或select了.
只排序就行了. 不用查找. 我们只需要得到与当前时间相差最大的定时器对象就可以了.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
44 [报告]
发表于 2008-07-18 11:00 |只看该作者

回复 #43 zsniper 的帖子

我没有说红黑树得不到最大值和最小值. 我只是想说堆结构更适合这种只需要最大值和最小值的需求

其实仔细想想. 如果为每个连接做一个超时机制. 还不如单独做一个定时器来定时检查所有的连接是否超时.
这样唤醒epoll 或kqueue的机会要少得多. 也就是epoll 或 kqeueu的处理非socket事件的压力要少得多.

论坛徽章:
0
45 [报告]
发表于 2008-07-18 11:04 |只看该作者

回复 #45 cookis 的帖子

我觉得自己写效率不是很高,因为技术还达不到,

所以我就建议用libevent.

还有在我的程序里面,只要接受到封包格式错误的数据包,我就认为这是非法数据包,直接close(),所以不用担心客户端不断发送恶意数据包的情况。

[ 本帖最后由 zsniper 于 2008-7-18 11:06 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
46 [报告]
发表于 2008-07-18 11:07 |只看该作者

回复 #46 zsniper 的帖子

我觉得没什么神秘的..只要你用对了算法. 效率跟他一样.

我想请教一个问题. 我在libevent中没有看到互斥.  那么它是怎么运转event_loop 的. 如果我有新的socket要注册进去怎么办
而且我整个服务也不可能只有一个线程啊.

论坛徽章:
0
47 [报告]
发表于 2008-07-18 11:26 |只看该作者

回复 #47 cookis 的帖子

event_loop就是单线程的阿~

localsocket就是等待accept事件,新的socket进来后,再通过回调函数设置读写事件,加入eventbase

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
48 [报告]
发表于 2008-07-18 11:33 |只看该作者

回复 #48 zsniper 的帖子

OK

event_loop run with thread1  

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

论坛徽章:
0
49 [报告]
发表于 2008-07-18 11:41 |只看该作者

回复 #49 cookis 的帖子

业务逻辑在上层完成,完成后让IO_MAIN_THREAD处理注册或先移除一个socket

之间用队列联系起来,

这就是所谓的HAHS模式。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
50 [报告]
发表于 2008-07-18 12:19 |只看该作者

回复 #50 zsniper 的帖子

no..no.

我还是无法理解. 在没有互斥的情况下. 其他线程怎么通知所谓的 IO_MAIN_THREAD 注册或移除 socket
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP