免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
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
21 [报告]
发表于 2009-11-15 18:52 |只看该作者
原帖由 cugb_cat 于 2009-11-15 01:15 发表
通信程序是一个进程,业务逻辑是一个进程,二者使用共享内存,完全不受干扰,我们的很多程序架构是这样的。

这样很繁琐。
我们只分层,不分进程。
当然,有可靠性问题,会出现一颗老鼠屎坏一锅粥的问题。
我们的解决方案,由高手开发一套成熟的,功能全面的工具平台,能够处理几乎全部业务逻辑。
所有应用程序员在工具平台上操作。即使生手也极少出错,即使出错也容易查找。
这方法以成功用于开发若干大型系统,每次的团队几乎一半以上是生手。

[ 本帖最后由 yulihua49 于 2009-11-15 18:53 编辑 ]

论坛徽章:
0
22 [报告]
发表于 2009-11-15 18:56 |只看该作者
UNIX设计,一堆工具,然后上面跑一个脚本似的管理程序。

论坛徽章:
0
23 [报告]
发表于 2009-11-15 19:12 |只看该作者
原帖由 BetonArmEE 于 2009-11-13 14:33 发表
最近搞高性能服务器设计,在unix平台上用c写
设计了在单进程中使用线程池模型的通讯架构,后端装载动态链接库处理业务逻辑,这样避免了进程间通讯相对昂贵的效率
今天突然想到,万一写业务逻辑的程序员的程序 ...



我估计apache也是因为这个原因才多进程的, 另外chrome好像也是因为这个才多进程方式了


不过感觉是很奇怪的理由

论坛徽章:
0
24 [报告]
发表于 2009-11-16 09:25 |只看该作者
我以前也在某通信设备商做过电信系统后台的开发,
纯业务和底层的通信之类的肯定是要分层的,
纯业务的程序员最好不要让他使用c, c++之类的语言(一般都是新兵蛋子),最好能够自己开发一种二次开发语言,
并将你们系统中的各个业务单元逻辑抽象出来,做成组件的方式,
然后呢,业务开发人员只需要通过特定的IDE环境,将哪些业务组件串联起来和纯业务层的编码(估计主要是sql, 计算规则之类)
最好将这些业务逻辑翻译成底层的c, c++语言(这只是一种方式)即可。

论坛徽章:
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
25 [报告]
发表于 2009-11-16 10:20 |只看该作者
原帖由 unixpm 于 2009-11-16 09:25 发表
我以前也在某通信设备商做过电信系统后台的开发,
纯业务和底层的通信之类的肯定是要分层的,
纯业务的程序员最好不要让他使用c, c++之类的语言(一般都是新兵蛋子),最好能够自己开发一种二次开发语言,
并将 ...

更高级了,需要预编译系统了,可有这方面的东东?

我们还玩不了这么高级的,弄了些函数库,让那些业务程序员尽量使用函数库,而这些库程序多半是一些语句生成器或数据格式生成器,数据格式转换器等等,
归根结底,还是解释执行的,效率也尽可能优化。比如生成一个SQL语句在10微秒以下,并且一个语句只生成一次之类的优化。
当然,服务器还是多进程的,一旦出现问题,不影响其他用户的作业。

我们已经有这样的通用平台,适用于:
UNIX/LINUX + oracle(也比较容易移植到SYBASE、mysql等),
TUXEDO或其他SOCKET环境,C语言,可被C++调用。
通信格式由使用者自定义,可以是字符串(可进行struct的序列化和反序列化)、byte串,JSON串。目前还不支持XML。

[ 本帖最后由 yulihua49 于 2009-11-16 10:36 编辑 ]

论坛徽章:
0
26 [报告]
发表于 2009-11-16 11:24 |只看该作者

回复 #25 yulihua49 的帖子

呵呵,是啊,这些都是个大系统,分工明确,需要很多东西支持。
而且业务IDE还支持调试,单步跟踪等复杂功能(跨机器),
以前不觉得怎么样,后来想想还是挺牛的,呵呵

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
27 [报告]
发表于 2009-11-16 12:32 |只看该作者
原帖由 yulihua49 于 2009-11-15 15:29 发表

我们的系统是:关键业务以TUXEDO接入,数据库oracle。客户端是JAVA + jolt。部分其它服务B/S,B/S/S模式。
即WEB服务器向TUXEDO提服务请求。服务器安全认证由平台组提供(如login,logout模块),业务软件由 ...


请问后台用什么语言?内部结构大致是怎么样的?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
28 [报告]
发表于 2009-11-16 12:33 |只看该作者
原帖由 system888net 于 2009-11-15 18:25 发表
利用数据库交换信息,前提是对交换的效率要求不高.


我觉得还是用共享内存存储报文,这样的交换效率比较高,你觉得如何?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
29 [报告]
发表于 2009-11-16 12:36 |只看该作者
原帖由 yulihua49 于 2009-11-15 18:52 发表

这样很繁琐。
我们只分层,不分进程。
当然,有可靠性问题,会出现一颗老鼠屎坏一锅粥的问题。
我们的解决方案,由高手开发一套成熟的,功能全面的工具平台,能够处理几乎全部业务逻辑。
所有应用程序员在 ...


我想了解的是运行环境的平台系统内部结构。目前听了很多高手的建议,似乎还是用多进程+accept锁做通讯接入比较好了。报文交换可以用数据库或者共享内存,我个人觉得共享内存应该比较快。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
30 [报告]
发表于 2009-11-16 12:37 |只看该作者
原帖由 prolj 于 2009-11-15 18:56 发表
UNIX设计,一堆工具,然后上面跑一个脚本似的管理程序。


一般好的unix应用系统都是这样子了,继续学习中
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP