免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5170 | 回复: 8
打印 上一主题 下一主题

线程池设计的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-27 21:55 |只看该作者 |倒序浏览
5可用积分
想做个基于线程池的服务端,大体上的思路已经有了,在主线程中进行accept,然后子线程干活。
但在子线程中如何得到“任务”?
如果用信号量来做,是不是得每个线程对应一个信号量来进行判断?
类似于如下结构体:
struct myserv_childthr
{
    int sock;
    sem_t sem;
    pthread_t tid;
};

myserv_childthr childs[5];
.....
.....

然后有类似函数:

int myserv_childthr_init(myserv_childthr *child)
{
    sem_init(&child->sem);
    child->sock = 0;
    pthread_init(&cihld->tid,NULL,work,NULL);
}

应该有更好的设计吧

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
2 [报告]
发表于 2010-01-27 22:26 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2010-01-27 22:47 |只看该作者
看过了,没找到里面带的源代码。。没弄明白那几个函数到底是干吗的。。所以才来请教的

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
4 [报告]
发表于 2010-01-27 22:58 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
5 [报告]
发表于 2010-01-27 23:10 |只看该作者
pthread_cond_signal
pthread_cond_wait
...

论坛徽章:
0
6 [报告]
发表于 2010-01-28 01:49 |只看该作者
原帖由 c/unix 于 2010-1-27 22:58 发表


所有进程/线程模型作者都给了源码。
这个是我以前学习整理过的,可以直接编译使用,模型是主线程统一accept。

/*
*tcp并发服务器程序,主线程统一accept
*/
#include
#include
#include
#in ...

大哥,你这个代码都编译不过的。
我帮你改下,顺便调整下格式
长度超过,附件提供吧,把后缀rar改成.c就可以了

[ 本帖最后由 sithui 于 2010-1-28 01:56 编辑 ]

mthread.rar

9.74 KB, 下载次数: 75

论坛徽章:
0
7 [报告]
发表于 2010-01-28 09:29 |只看该作者
可以这样,主线程与其它线程通过管道通信,accept后把该socket放入某个地方,然后向管道中写入一个字节,其它线程select或则poll该管道和他所监视的其它socket

论坛徽章:
0
8 [报告]
发表于 2010-02-01 16:18 |只看该作者
两种方法吧,一种是Leader/Follower模型,一种是Half Sync/Half Async模型。

Leader/Follower设置一个Queue,IO Thread向Queue中push,Worker Thread从Queue中pop。
pop中,如果没有item,就pthread_cond_wait,push的时候调用pthread_cond_signal。

Half Sync/Half Async模型,为每一个Worker Thread设置一个Queue,作为一个Queue Layer,worker thread不断的从里面取然后处理。
这里面的Push和Pop有很多种实现,建议使用pipe通知的方式,worker thread中有一个event_loop,相当与一个Sync Layer。push的时候写pipe的写端,pipe读端事件被检测出来,调用push。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2010-02-01 16:41 |只看该作者
把分给 8楼的 !!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP