免费注册 查看新帖 |

Chinaunix

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

线程池 + epoll 简单的实现 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-05-18 18:49 |只看该作者
我有一个比较完整的封装,呵呵,C实现的.
http://code.google.com/p/libsbase/downloads/list

论坛徽章:
0
12 [报告]
发表于 2007-05-18 18:52 |只看该作者
原帖由 zhujiang73 于 2007-5-18 15:00 发表


支持原创,希望有比较详细的应用例子程序。

关于 server->client 数据发送,如果你喜欢远程调用机制,看看这个:
http://zhujiang73.cublog.cn


http://code.google.com/p/libsbase/downloads/list


lhttpd基于libsbase实现。

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
13 [报告]
发表于 2007-05-21 14:14 |只看该作者

回复 12楼 redor 的帖子

原帖由 redor 于 2007-5-18 18:52 发表


http://code.google.com/p/libsbase/downloads/list


lhttpd基于libsbase实现。



老兄的文档写的不全呀

论坛徽章:
0
14 [报告]
发表于 2007-05-25 17:00 |只看该作者
原帖由 zhujiang73 于 2007-5-21 14:14 发表



老兄的文档写的不全呀


Just a idea ! 我非科班出身,没有写文档的习惯,呵呵,按照感觉做,我们公司现在用的都是我写的这个通信封装。。。。hehe

论坛徽章:
0
15 [报告]
发表于 2007-05-25 17:44 |只看该作者
你好,请问,如果client端的socket突然关闭了,那么server端这边的epoll能不能收到一个EPOLL_IN或者EPOLL_ERR的消息,
如果能收到,怎么处理才能收到;如果收不到,那么怎样处理才能让server知道client的关闭并且作出响应,是不是要另外client向server发送心跳包来实现?
谢谢!!!

论坛徽章:
0
16 [报告]
发表于 2007-06-04 17:03 |只看该作者
我将testPool.cpp:30的sleep(-1);改成了sleep(1);

[root@dts threadpool]# make
g++  Log.cpp Thread.cpp Worker.cpp testPool.cpp ThreadPool.cpp Lock.cpp ListenThread.cpp Socket.cpp TaskThread.cpp -lpthread -g -o server
[root@dts threadpool]# valgrind ./server
==29429== Memcheck, a memory error detector.
==29429== Copyright (C) 2002-2005, and GNU GPL'd, by Julian Seward et al.
==29429== Using LibVEX rev 1575, a library for dynamic binary translation.
==29429== Copyright (C) 2004-2005, and GNU GPL'd, by OpenWorks LLP.
==29429== Using valgrind-3.1.1, a dynamic binary instrumentation framework.
==29429== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al.
==29429== For more details, rerun with: -v
==29429==
Bind port 9999 is Successful
Listen thread is starting ....
==29429==
==29429== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 5 from 1)
==29429== malloc/free: in use at exit: 9,464 bytes in 18 blocks.
==29429== malloc/free: 18 allocs, 0 frees, 9,464 bytes allocated.
==29429== For counts of detected errors, rerun with: -v
==29429== searching for pointers to 18 not-freed blocks.
==29429== checked 21,125,256 bytes.
==29429==
==29429== LEAK SUMMARY:
==29429==    definitely lost: 0 bytes in 0 blocks.
==29429==      possibly lost: 1,440 bytes in 5 blocks.
==29429==    still reachable: 8,024 bytes in 13 blocks.
==29429==         suppressed: 0 bytes in 0 blocks.
==29429== Reachable blocks (those to which a pointer was found) are not shown.
==29429== To see them, rerun with: --show-reachable=yes
[root@dts threadpool]# uname -a
Linux dts 2.6.9-42.ELsmp #1 SMP Tue Aug 15 10:35:26 BST 2006 x86_64 x86_64 x86_64 GNU/Linux

[ 本帖最后由 chunyv 于 2007-6-4 17:09 编辑 ]

论坛徽章:
0
17 [报告]
发表于 2007-06-06 22:59 |只看该作者
原帖由 ruchong 于 2007-5-17 22:14 发表
连接ListenThread.cpp类发送信号通知ThreadPool.cpp类,收到信号再分配给TaskThread.cpp类,进行处理。如果没有空闲任务类,动态再创建一定数目的任务类。


个人觉得这种分发任务最好不要用信号实现,信号万一丢失了怎么办,那客户的请求就一直得不到处理,这是实际应用中不可接受的.建议采用消息通信实现,实现难度也不大,比起信号会好不少.

论坛徽章:
0
18 [报告]
发表于 2007-06-12 14:18 |只看该作者
ddddddddddddddddddddd

论坛徽章:
0
19 [报告]
发表于 2007-06-12 14:50 |只看该作者
原帖由 SupervisedBoy 于 2007-6-6 22:59 发表


个人觉得这种分发任务最好不要用信号实现,信号万一丢失了怎么办,那客户的请求就一直得不到处理,这是实际应用中不可接受的.建议采用消息通信实现,实现难度也不大,比起信号会好不少.



多谢你的建议 , 回去测试一下...

论坛徽章:
0
20 [报告]
发表于 2007-06-12 17:56 |只看该作者
用了  epoll 就 listen 一个 listenfd,  完全没有意义的工作。

你把accept得到的每个新的 fd 都送到 线程池队列里了,
就这么一个简单的工作,却写了这么一大堆代码,汗!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP