免费注册 查看新帖 |

Chinaunix

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

[Linux] 一个多线程的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-04-24 13:04 |只看该作者 |倒序浏览

最近考虑把现在的程序改成多线程, 初步构想是这样的:
上图是现在的系统架构,下图是目标架构,共4个工作线程.
目前的系统就是Process A 收到从Process B到消息, 在接收message que中, 处理消息,然后将回复发送到发送message que中.
多线程大概的思路是这样的:
4个工作线程分别到接收message que取消息, 处理消息,
处理结束后,如果需要发送回复,则发消息到发送message que中,否则接着取消息.

请大家指教, 哪些地方需要改进,或者是需要重点关注的地方,非常感谢!

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
2 [报告]
发表于 2014-04-24 15:01 |只看该作者
实际场景一概不知,这个架构看不出任何问题,当然也就没什么要关注的地方了。

论坛徽章:
0
3 [报告]
发表于 2014-04-25 10:28 |只看该作者
实际的场景是, 单线程情况下, 因为消息的编解码造成CPU的load很高, message que中的消息经常出现拥塞的情况,所以想到利用多核多线程,提高吞吐量.

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
4 [报告]
发表于 2014-04-25 11:15 |只看该作者
OK,已经明白问题焦点。几个想法:
1. 如果message que的get/put都是线程安全的。问题就比较简单了,处理逻辑和原来一致,仅仅是启用多个线程。
2. 如果message que的get/put不是线程安全的,你可以修改。请把它改为线程安全的,然后继续#1。
3. 如果message que的get/put不是线程安全的,你无法修改。要用两个agent线程中转消息,比如:
    workers <--- recv agent <-- recv Message Queue
    workers ---> send agent --> send Message Queue
每个方向的(recv/send)agent与workers用一个共享队列就行了,先别搞什么负载调度之类的事情,让问题变简单。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
5 [报告]
发表于 2014-04-25 15:34 |只看该作者
这不是很普通的设计么。。

论坛徽章:
0
6 [报告]
发表于 2014-04-25 16:14 |只看该作者
因该是2: 如果message que的get/put不是线程安全的,你可以修改。请把它改为线程安全的,然后继续#1
还有,你觉得有必每个work thread设一个message que, 然后让主线程将收到的message que分发到各个work thread.
多谢!

论坛徽章:
0
7 [报告]
发表于 2014-04-25 16:19 |只看该作者
回复 5# linux_c_py_php

您有什么好的建议,多谢!
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP