游戏开发论坛

 找回密码
 立即注册
搜索
查看: 29531|回复: 111

群里今天聊服务器到底该不该多线程?

[复制链接]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-7-23 23:04:00 | 显示全部楼层 |阅读模式
很多人支持做单线程服务器,最多个加多进程,不提倡多线程,原因是共享数据的问题(锁和数据拷贝)是多线程最大的麻烦,也有不少人支持多线程,认为拿多线程做冲突少的业务(但视乎太理想了),各执一词好像都很有道理。

我之前做的服务器的微型版是多线程的,之前也碰到过这些问题确实很头痛,我也有点被动摇了
有人能对这个话题发表一些看法吗?

88

主题

2743

帖子

4227

积分

论坛元老

Rank: 8Rank: 8

积分
4227
发表于 2009-7-23 23:10:00 | 显示全部楼层

Re:群里今天聊服务器到底该不该多线程?

建议回群继续讨论,在这里你不会有更多收获.

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2009-7-23 23:11:00 | 显示全部楼层

Re:群里今天聊服务器到底该不该多线程?

...

4

主题

42

帖子

96

积分

注册会员

Rank: 2

积分
96
发表于 2009-7-23 23:13:00 | 显示全部楼层

Re:群里今天聊服务器到底该不该多线程?

就像开汽车,如果技术好就可以开的足够快,没把握就开慢点。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2009-7-23 23:27:00 | 显示全部楼层

Re:群里今天聊服务器到底该不该多线程?

恩,我觉得这里面还是复杂度和开发成本的问题,大多数人都不愿意为提高那么一点点性能而花费那么大的代价,没有同样功能的实现去比较,确实不好说,但很多服务器都是单线程的,而且也获得了成功,这是事实,看来也该退而其次求稳不求快了。

0

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2009-7-24 00:45:00 | 显示全部楼层

Re: Re:群里今天聊服务器到底该不该多线程?

970361: Re:群里今天聊服务器到底该不该多线程?

就像开汽车,如果技术好就可以开的足够快,没把握就开慢点。

赞同,自己能力足够的时候用多线程

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-7-24 00:49:00 | 显示全部楼层

Re:群里今天聊服务器到底该不该多线程?

哦,tonykee兄有什么好群,加我一个啊

13

主题

312

帖子

312

积分

中级会员

Rank: 3Rank: 3

积分
312
发表于 2009-7-24 02:54:00 | 显示全部楼层

Re:群里今天聊服务器到底该不该多线程?

是指pthread级别的Multi-threading么?

从安全角度来说,Thread之间通信是如果一个Thread出事了,那整个Process内的所有Thread就全完蛋了。如果要使多进程的话,那Precess之间可以用OS来隔离。比如你把聊天系统、货币系统、对战系统等不同的功能模块分到不同的进程中,就算一个功能挂了,也不会导致服务器全挂。

从性能角度来说,当然是多线程胜出了,因为Process的切换时OS来处理的上千个Cycle的事情,而在大型的多处理器Server上,Thread Switch可以由HW来处理,0 Cycle的切换代价,这一点尤其是在安装了SMT CPU的Server上尤为明显。还有一点就是Thread之间通信的代价小于Process之间通信的代价。


至于锁的问题,可以考虑用用一个专门处理仲裁的Thread来分配任务,实现的时候可以考虑由他来启动拿到任务的THread,然后等待这些Thread计算好了之后回收数据。这相当于仲裁锁的行为了。但是这种机制并不能替代锁,锁本身是保证 Sequential Consistency的一种机制,在通信的时候是必须的,在原理上,这问题来源于图灵机之间的通讯,是数学问题。这机制只能简化抢锁的行为。

---------------------------------------------------------------------------------------------

OpenGPU.org(http://www.opengpu.org/bbs/index.php)主要聚焦图形硬件(包括GPU体系结构)以及各种图形算法

71

主题

1330

帖子

2585

积分

金牌会员

Rank: 6Rank: 6

积分
2585
发表于 2009-7-24 11:06:00 | 显示全部楼层

Re:群里今天聊服务器到底该不该多线程?

如果多进程是为了解决多线程时访问共享数据时的锁冲突,那么,多进程条件下如何维护一些共享数据呢?

3

主题

28

帖子

34

积分

注册会员

Rank: 2

积分
34
发表于 2009-7-24 11:40:00 | 显示全部楼层

Re:群里今天聊服务器到底该不该多线程?

单线程,多进程服务器。都是从云飞blog那里看来的把?

多核时代,多线程是必须的。

80%的数据共享问题属于“先知”问题,也就是脑子里面光想,这样做将来会不会出现xx问题,比如共享冲突。而后就很沮丧的自我否定了。

冲突是不可能避免的,如果可以,先解决食堂排队抢饭问题先。有的只是针对实际情况的折中方案。

传统的编程语言,(传统也就是指最多人用,最傻瓜化等)在并行问题上缺乏有效的支持,或者说在并行问题上要求编程者有较高的技术水平。

一些小众语言对并行考虑较好,如Erlang(虽然觉得它有点反胃),D语言等,用来做服务器是比较好的选择。

数据共享是竞争问题,不可避免。但繁琐的数据拷贝是弱智问题,设计者的失误。解决数据共享的一个思路是,没有共享数据(假设你内存足够多),例如纯函数式的语法。此外还有大牛们在弄得锁无关数据结构等。

共享数据不可消除,但却是可控。control才是软件开发的关键。控制不了,在好的技术都是废物。

最后,这个版块,几乎不忍心来看。。。 相对来说还是 策划版 娱乐性较强。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-18 22:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表