游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: 微无渊

网络游戏服务器是否可以采用IOCP+单线程设计??

[复制链接]

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2012-1-31 21:06:00 | 显示全部楼层

Re: 网络游戏服务器是否可以采用IOCP+单线程设计??

网游服务端总要跟DB打交道吧,你单线程是不是也意味着DB连接也是只有1条?不管是长连接还是每次recv后打开,send后关闭。
总的来说,1方面感觉这样的话有点浪费系统资源。要知道现在的CPU都是多核的。另一方面单线程处理逻辑,只要有一个用户请求花费大量时间,别人的请求都得等着。
所以我觉得应该用类似线程池的概念。预先启动一定数的线程(这个数一般会按CPU的核数等来综合考虑),主线程处理收socket及数据有效性的检验,有效的话就将数据丢进池子里就不用管了。预先启动的那些线程就从池子里拿数据进行游戏业务逻辑处理。

随便写了点,不是游戏行业的,牛人不要见笑。抛砖引玉,大家发表一下看法吧。

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-2-1 10:18:00 | 显示全部楼层

Re: Re: 网络游戏服务器是否可以采用IOCP+单线程设计??

terryliu98: Re: 网络游戏服务器是否可以采用IOCP+单线程设计??

网游服务端总要跟DB打交道吧,你单线程是不是也意味着DB连接也是只有1条?不管是长连接还是每次recv后打开,...


我暂时不考虑数据库的问题,因为他可以写到另一个进程里.
我现在发现,如果应该用多线程的话,那么原因只有一个,就是操作系统推荐用多线程,因为IOCP是windows集成的东西,wondows内核知道怎么样最快.


其他原因看来都不太靠谱,因为网络包在经过网卡时总是一个一个去发的,即便是用多线程,他最终还得排队去发。
(难道我们调用iocp接口本身会消耗很大CPU?如同加载一个图片一样耗时?)


至于游戏逻辑方面,我想服务器不大可能会卡在一个用户上.

58

主题

1437

帖子

2207

积分

金牌会员

Rank: 6Rank: 6

积分
2207
发表于 2012-2-1 15:21:00 | 显示全部楼层

Re: Re: Re: 网络游戏服务器是否可以采用IOCP+单线程设计??

多线程跟网卡没有关系,虽然封包是一个一个发出去的。
但每个封包的cpu使用量是不同的。
多线程只是平衡在多个cpu之间的使用量,
和cpu占用量大的封包强制切分时间片的问题。
如果你出现多核cpu某个单核满速,其他核空闲的情况。
或者某个封包占用cpu资源较多,较集中,导致其他链接长时间得不到响应时。
就可以开始考虑多线程还是分布式的问题。
游戏服务器cpu资源正常配给是全部cpu 80%左右最好,
太多了cpu过满,容易失去响应,太少浪费服务器资源。
不过现在游戏逻辑越来越复杂,单独封包的响应时间越来越长,
如何正确分配cpu资源是个严重的问题。
使用单线程相当于封包上来后就把所有cpu资源分配给了这个链接,
其他的链接只能等待这个链接释放资源。
微无渊: Re: Re: 网络游戏服务器是否可以采用IOCP+单线程设计??
我暂时不考虑数据库的问题,因为他可以写到另一个进程里.
我现在发现,如果应该用多线程的话,那么原因...

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-2-1 17:50:00 | 显示全部楼层

Re: Re: Re: Re: 网络游戏服务器是否可以采用IOCP+单线程设计

gantleman: Re: Re: Re: 网络游戏服务器是否可以采用IOCP+单线程设计??

多线程跟网卡没有关系,虽然封包是一个一个发出去的。
但每个封包的cpu使用量是不同的。
多线程只是平衡在...


恩。

6

主题

471

帖子

1047

积分

金牌会员

Rank: 6Rank: 6

积分
1047
发表于 2012-2-1 18:53:00 | 显示全部楼层

Re: Re: Re: Re: 网络游戏服务器是否可以采用IOCP+单线程设计

说的不错,现在服务器很多都是4核以上了,可以把服务器设计成多进程负载平衡,使用tbb等并行计算库提升服务器效率.至于逻辑处理最好在单线程下队列处理,可以避免多线程下访问出错和资源竞争时的锁开销.况且数据库比如mysql是不支持多线程处理的,要在不同线程下处理要新建连接。不然的话你会发觉虽然CPU核数多但服务器只能用到1-2个。

gantleman: Re: Re: Re: 网络游戏服务器是否可以采用IOCP+单线程设计??

多线程跟网卡没有关系,虽然封包是一个一个发出去的。
但每个封包的cpu使用量是不同的。
多线程只是平衡在...

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-9 15:03

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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