免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: BetonArmEE

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

论坛徽章:
0
发表于 2009-11-16 20:29 |显示全部楼层

回复 #37 思一克 的帖子

我不知道银行系统是如何工作的,

但游戏服务器和IM应该需要更多的数据交流,我一般用多线程,所以不需要进程间通信,只需要把业务数据汇总在一起。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2009-11-16 20:58 |显示全部楼层
原帖由 yulihua49 于 2009-11-16 17:50 发表

C啊,可以C++但目前是C;

使用几套开源的函数库:sqlora包装OCI,JSON组织数据和通信格式。DAU高级数据库包装器,内含结构模板接口。处理任意结构与数据库、JSON的转换。
就是这个DAU,解决了程序可靠问题 ...


你说的JSON和DAU我第一次看到,搜了google,学习了下,呵呵呵

JSON报文格式还不是最精简的,但是它非常适合javascript,呵呵呵。我以前设计过一种报文格式,我取名为“sml”(简单报文语言),有点儿类似于c语法,定义文件如下
UserInfo
{
        username = char*16
        password = char*32
        ExtInfo
        {
                 realname = char*16
                age = long
                email = char*64
        }
}
UserInfo
{
        username = BetonArmEE
        password = wodemima
        ExtInfo
        {
                 realname = "BETONARMEE bETONaRMee heiheihei"
                age = 29
                email = lalala@hohoho.com
        }
}
由处理器处理生成字节流打包解包函数和一个c结构体定义,你的应用代码只要对c结构变量操作就可以了,c结构与字节流互相转换用处理器自动生成的函数代码。(值表达中 中间有空格的字符串用双引号括起来,其它类型不用引号)
typedef struct
{
        char username[ 16 + 1 ] ;
        char password[ 32 + 1 ] ;
        typedef struct
       {
            char   realname[ 16 + 1 ] ;
            long age ;
            char email[ 64 +1 ] ;
       }
       ExtInfo ;
}
UserInfo ;
你觉得这种报文格式如何?

DAU的设计思想比较新颖,我一直使用嵌入式SQL做数据库应用,我觉得嵌入式SQL移植性和代码表达性比较好,你觉得呢? ^)^

[ 本帖最后由 BetonArmEE 于 2009-11-17 00:23 编辑 ]

论坛徽章:
0
发表于 2009-11-16 21:45 |显示全部楼层
兄弟,没上QQ啊,刚看到你的贴子,一路看过来,觉得大家给的建义还不错,那个把多进程和多线程比作交通设施的比喻比较不错,我也认为多线程似乎跟高性能扯不上绝对的关系,真正的性能还是在于程序自身是不是让CPU在全速运行,就是说没有sleep或都阻塞在一个什么函数调用上。
而且我觉得你们讨论的一个片面性:似乎只研究系统在单机运行时的性能,我是做期货交易系统后台的,这样的系统的性能要求可想而知,但是后台程序没有一个使用多线程,而是采用多进程方式,其中有一个核心的数据转发进程,负责各个业务进程之间的数据交互,数据交互没有任何IPC技术,全部采用socket通讯技术,这样做的好处是部署极其灵活,可以扩充机器数量来提高系统处理性能,还可以从硬件上避免单点故障。
我觉得你的系统可以参考Tuxedo的设计,采用多进程通讯,进程通讯采用socket技术,关键设计一下核心的数据交换进程,由它负责系统各个业务进程的交互,这样可以通过扩展业务主机的数量来进行横向扩展,业务与业务之间互不干涉,一个业务进程挂了,其它业务还是正常运行。
有兴趣上QQ聊吧,我正在做这个数据交换进程,借监了TCP/IP链路层、网络层、传输层的设计,其实这里说的数据交换进程其实就相当于消息路由器,相关技术可以参考TCP/IP的网络层设计。

论坛徽章:
0
发表于 2009-11-16 23:14 |显示全部楼层
个人的一些看法。

多进程是王道。

关于服务器的这个问题,我曾经认真考虑过,通过实践我认为 多进程是王道。

1 高性能服务器的本质 是什么? 高速的速度数据处理。

为什么是多进程不是多线程?

多线程的优势  变量在同一地址, 编码更容易

多进程的优势  可以夸主机通信, 内存空间更海量, 冗余支持

我认为多进程的优势才是真的优势

而对多核cpu 的利用, 从本质上说  操作系统做的就是这个事情了。 而多线程是则是更深层次的使用。

所以要开发高性能服务器 多进程是必走之路。

多进程的缺点是 数据交互 变量交互 比较麻烦,繁琐。但是我认为这种繁琐才是真正系统的复杂性。

世界上没这么多简单的事情

论坛徽章:
0
发表于 2009-11-17 00:01 |显示全部楼层
原帖由 system888net 于 2009-11-15 18:25 发表
利用数据库交换信息,前提是对交换的效率要求不高.

数据的交换其实可以用共享内存,这样速度是最快的,一些持久化的东西可以存放在数据库,数据库前加一层db cache,cache数据定时会写到数据库中,这样就可以保证数据交换访问的速度问题。对于服务器我也是觉得进程比线程更有优势,在架构方面要做到功能分离,比如前端接入一个单独的进程,业务逻辑一个单独的进程等

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2009-11-17 00:25 |显示全部楼层
原帖由 enigma1983 于 2009-11-16 21:45 发表
兄弟,没上QQ啊,刚看到你的贴子,一路看过来,觉得大家给的建义还不错,那个把多进程和多线程比作交通设施的比喻比较不错,我也认为多线程似乎跟高性能扯不上绝对的关系,真正的性能还是在于程序自身是不是让 ...


有空交流下,呵呵呵

论坛徽章:
0
发表于 2009-11-17 10:42 |显示全部楼层
Tuxedo 的設計去哪裏參考?
Apache 的設計去哪裏參考?
以上都只有叫你去參考, 請問"去" 是指什麼地方呢?
另外, 不是一堆人整天在叫IOCP/EPOLL 之類的嗎? 為何不見哪些高手們出來說兩句呢?

论坛徽章:
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
发表于 2009-11-17 10:46 |显示全部楼层
原帖由 BetonArmEE 于 2009-11-16 20:28 发表


我目前开发环境也是c,不是c++
请问数据库操作(用的是oracle)用OCI好还是嵌入式SQL好?从速度方面、开发易用性方面等等来讲

回答你,并回答楼上。

嵌入式SQL容易使用,而且效率不低,所以一般都用它。
但是它不适用于需要高度程序数据独立的场合,就是,数据结构必须是已知的,如果在系统应用过程中改变了表结构,会很麻烦的。
我们的DAU(Data Access Unit)系统通过模板关联struct和数据库,表结构改变时,改变模板即可,程序可以少改或不改。
DAU是基于OCI的,使用了sqlora库。

下边的连接是我开发DAU的历程,开始是称为DTO,后来改DAU了,里边主要是TUXEDO服务器程序。
挨了不少骂,也长进不少,比较长,耐心看看,可能有益。
如果需要该软件,可免费提供,包括文档。
http://www.itpub.net/viewthread. ... p;extra=&page=1
这贴也是类似问题:
http://bbs2.chinaunix.net/thread-1602940-1-2.html

[ 本帖最后由 yulihua49 于 2009-11-17 11:46 编辑 ]

论坛徽章:
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
发表于 2009-11-17 11:42 |显示全部楼层
原帖由 BetonArmEE 于 2009-11-16 20:58 发表


你说的JSON和DAU我第一次看到,搜了google,学习了下,呵呵呵

JSON报文格式还不是最精简的,但是它非常适合javascript,呵呵呵。我以前设计过一种报文格式,我取名为“sml”(简单报文语言),有点儿类似 ...

让我研究一下,想想再说。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2009-11-17 12:07 |显示全部楼层
原帖由 yulihua49 于 2009-11-17 10:46 发表

回答你,并回答楼上。

嵌入式SQL容易使用,而且效率不低,所以一般都用它。
但是它不适用于需要高度程序数据独立的场合,就是,数据结构必须是已知的,如果在系统应用过程中改变了表结构,会很麻烦的。
...


好像没有这类技术需求吧,操作数据库可以不知道表名,操作数据库肯定要预先确定操作的表名,否则有意义吗
表结构都改变了,应用代码肯定要变动的,程序里的数据逻辑集合变动了呀 ^_^
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP