免费注册 查看新帖 |

Chinaunix

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

[C] 单进程多线程服务器存在这样的弊端 [复制链接]

论坛徽章:
7
天蝎座
日期:2013-09-28 10:45:42双子座
日期:2013-10-16 16:27:09射手座
日期:2013-10-23 10:21:32处女座
日期:2014-09-17 16:44:332015年亚洲杯之巴林
日期:2015-04-09 17:28:01冥斗士
日期:2015-11-26 16:19:0015-16赛季CBA联赛之山东
日期:2018-03-02 23:59:31
111 [报告]
发表于 2013-03-21 11:33 |只看该作者
其实也可以的,

coredump触发11号信号,封装一个函数,然其他线程人员调用该函数, 一旦coredump,该函数捕获当前线程的11号信号,然后就pthread_cleanup,主线程phtread_join,发现join成功,就pthread_create。

我就是这么写的,不过不是针对coredump而写,而是网络io错误就重启线程。

但是貌似用到oracle的程序都无法捕获到11号信号,比如pro*c(oci是可以捕获的),一旦coredump,11号信号就被oracle先截获了,然后你的程序就无法截获。


BetonArmEE 发表于 2013-03-14 20:25
回复 99# yulihua49

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
112 [报告]
发表于 2013-03-21 12:55 |只看该作者
本帖最后由 yulihua49 于 2013-03-21 13:00 编辑
cxytz01 发表于 2013-03-21 11:27
cpu密集型,就用单进程就可以了。 用多进、线程无法提高程序效率 ...

??? 武断,且概念错误!!!!
并行算法没用了?!它就是把可并行运算的部分划分,由各个核并行运行,现在的技术就是用多线程运行,由系统把线程分配到核。
我已经搞了好几个这样的应用系统了,都是靠多线程满足性能要求的。
要想提高计算性能,机器主频已经到头,目前唯一的方法是并行计算。就是多核多线程、多机多进程。这些方法我们都在用,怎么无法提高效率(性能)?
你不要误导菜鸟好不好?

论坛徽章:
7
天蝎座
日期:2013-09-28 10:45:42双子座
日期:2013-10-16 16:27:09射手座
日期:2013-10-23 10:21:32处女座
日期:2014-09-17 16:44:332015年亚洲杯之巴林
日期:2015-04-09 17:28:01冥斗士
日期:2015-11-26 16:19:0015-16赛季CBA联赛之山东
日期:2018-03-02 23:59:31
113 [报告]
发表于 2013-03-21 12:57 |只看该作者
回复 112# yulihua49

原来你说的是多核,多芯。


   

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
114 [报告]
发表于 2013-03-21 13:01 |只看该作者
本帖最后由 yulihua49 于 2013-03-21 13:32 编辑
cxytz01 发表于 2013-03-21 12:57
回复 112# yulihua49

原来你说的是多核,多芯。

当然,这是当前硬件系统的主流(现在还有单核系统吗?连手机都是4核)。多线程技术,开宗明义就是为了高效使用多核资源。

主频和其他技术都已吃干炸净了,只能多核、多芯、多机。
加之64位系统的巨大内存,把大量数据buff在内存,IO瓶颈转化成计算瓶颈,更是要重视并行计算。
就是楼主的题目,单进程多线程,好共享公共的数据区。
我们一般的配置原则就是工作线程数=总核数。

附带一个话题,有一种思潮,说软件不要关注性能,性能问题由硬件解决。
大错而特错,如果没有设计、开发并行软件,有时,无论多贵的硬件都达不到性能要求。

论坛徽章:
0
115 [报告]
发表于 2013-04-09 14:23 |只看该作者
回复 8# UnixStudier


    我不这么看,qq刚毕业的也可以做服务器程序.人不一定垃圾,但是没经验是肯定的.
框架好的话才能让他们写.
    不过根多线程和多进程没关系.codedump任何情况下都要先解决的.

论坛徽章:
1
处女座
日期:2014-11-29 14:47:43
116 [报告]
发表于 2014-10-04 15:23 |只看该作者
yulihua49 发表于 2013-03-14 13:39
居然当年就回了这个帖子。
最近才做的实验。
相同的数据库和数据,进行简单的数据unload测试,存粹的读 ...

您说“采用多线程服务器,+数据库连接池,每个主机4-5个连接,几十个线程排队(竞争有序化了)共享数据库连接,性能明显提高。“,我想请教一下,多线程服务器需要线程池吗?如果需要,要首先创建多少个线程呢?线程的最大值是多少?您说的每个主机4-5个连接时指接受外来连接的请求吗。
我现在正在设计一个即时聊天系统(我新手),在服务器设计上不知道该怎么设计

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
117 [报告]
发表于 2014-10-04 19:23 |只看该作者
本帖最后由 yulihua49 于 2014-10-04 19:39 编辑

[quote您说“采用多线程服务器,+数据库连接池,每个主机4-5个连接,几十个线程排队(竞争有序化了)共享数据库连接,性能明显提高。“,我想请教一下,多线程服务器需要线程池吗?如果需要,要首先创建多少个线程呢?线程的最大值是多少?您说的每个主机4-5个连接时指接受外来连接的请求吗 ...[/quote]
只有多线程可以使用连接池,多进程不可以。
线程数,连接数配置,自己试试就知道了。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
118 [报告]
发表于 2014-10-04 19:48 |只看该作者
本帖最后由 yulihua49 于 2014-10-04 20:12 编辑
cxytz01 发表于 2013-03-21 10:59
accpet不用锁了,2.6内核的accept已经没有惊群了。

嵌入式sql(pro*c)开发效率更高,pro*c是oci的封装。
...

既要OCI执行效率高的好处,又要避免其开发难的坏处。
我写了个包装器解决了这个问题。
类似Hibernate,C的,也可以C++。
还支持DB2/CLI,MYSQL等。
已经做了两个生产项目了,都是多线程服务器,效果很不错。
其中一个项目是ORACLE/DB2两用的。开发团队既不需要学OCI,也不需要学CLI。
即使新手,也很快就能入手。
访问数据库的内存问题也由包装器管理,在一定程度上防止楼主的问题。

论坛徽章:
0
119 [报告]
发表于 2014-10-05 10:36 |只看该作者
这个贴好多牛人啊。。。

论坛徽章:
0
120 [报告]
发表于 2014-10-14 09:20 |只看该作者
回复 98# BetonArmEE

您好,我现在有如下需求:服务端a和客户端b进行连接,他们之间有很多联机交易,但是由于就一个socket连接,所以用最基本的socket进行服务端编写,但是有很多交易,我想每种交易都用一个子进程处理,这个该怎么实现呢?这样是不是会出现多个子进程同时读/写同一个socket呢?请您给点建议哈,我也是类似银行开发。。为了稳定,不用多线程。
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP