游戏开发论坛

 找回密码
 立即注册
搜索
查看: 11081|回复: 34

你们编写服务端程序的时候会用STL吗?

[复制链接]

12

主题

21

帖子

27

积分

注册会员

Rank: 2

积分
27
发表于 2012-7-18 23:26:00 | 显示全部楼层 |阅读模式
其实我认为这个对稳定性影响不是很大, 几乎可以忽略.
我甚至还在服务端上用mfc, 感觉也没啥

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20468
发表于 2012-7-18 23:59:00 | 显示全部楼层

Re:你们编写服务端程序的时候会用STL吗?

STL多多少少。。

0

主题

40

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2012-7-19 23:05:00 | 显示全部楼层

Re:你们编写服务端程序的时候会用STL吗?

大胆的了解它,爱上它,使用它!

23

主题

515

帖子

552

积分

高级会员

Rank: 4

积分
552
发表于 2012-7-20 12:52:00 | 显示全部楼层

Re:你们编写服务端程序的时候会用STL吗?

几乎不用

一般是:
数组,栈缓冲,侵入式链表,已排序数组 + 二分查找(=map)

12

主题

21

帖子

27

积分

注册会员

Rank: 2

积分
27
 楼主| 发表于 2012-7-20 13:55:00 | 显示全部楼层

Re: Re:你们编写服务端程序的时候会用STL吗?

疯子阿虹: Re:你们编写服务端程序的时候会用STL吗?

几乎不用

一般是:
数组,栈缓冲,侵入式链表,已排序数组 + 二分查找(=map)

既然用了链表. 那就会有动态内存分配. 和stl能差到哪去?

58

主题

1437

帖子

2207

积分

金牌会员

Rank: 6Rank: 6

积分
2207
发表于 2012-7-21 02:26:00 | 显示全部楼层

Re:你们编写服务端程序的时候会用STL吗?

现在的问题是,你写个线程锁或者脚本来几个小循环,
在语言上省出来的那点效率就都又丢进去。
STL已经很成熟语言上的那点效率损失基本可以忽略不计。
map,list,vector,算法已经讨论的很清楚,用stl还是C实现效果也都差不多。
C语言的好处就是跨平台的标准统一,语法格式已经定型,C++个个平台还有差异。
而且C++的继承和对象有被滥用的倾向,加进来的语法垃圾越来越多。

6

主题

74

帖子

230

积分

中级会员

Rank: 3Rank: 3

积分
230
发表于 2012-7-21 12:28:00 | 显示全部楼层

Re: Re: Re:你们编写服务端程序的时候会用STL吗?

vfbf: Re: Re:你们编写服务端程序的时候会用STL吗?


既然用了链表. 那就会有动态内存分配. 和stl能差到哪去?


用了链表也不一定要分配内存。

节点可以包含在对象内。


23

主题

515

帖子

552

积分

高级会员

Rank: 4

积分
552
发表于 2012-8-9 16:36:00 | 显示全部楼层

Re: Re: Re:你们编写服务端程序的时候会用STL吗?

vfbf: Re: Re:你们编写服务端程序的时候会用STL吗?


既然用了链表. 那就会有动态内存分配. 和stl能差到哪去?



。。。
没看到是侵入式链表??类似ddk里面的LIST_ENTRY。

23

主题

515

帖子

552

积分

高级会员

Rank: 4

积分
552
发表于 2012-8-9 16:47:00 | 显示全部楼层

Re: Re:你们编写服务端程序的时候会用STL吗?

gantleman: Re:你们编写服务端程序的时候会用STL吗?

现在的问题是,你写个线程锁或者脚本来几个小循环,
在语言上省出来的那点效率就都又丢进去。
STL已经很成...



STL在多线程的情况下表现很差。多线程下heap的效率本身就不好。stl会导致不停地分配和释放小块内存。

另外有的时候不是效率问题,而是既然没必要,为什么一定要用STL?

vector完全可以用动态数组(_alloca,当然我使用另外的方法)替换。栈效率很高的。

只有在很少量使用map的时候,才会考虑使用stl map。。。
在游戏服务器,基本上数组和链表已经足够了。让复杂的算法和数据结构都挥之而去吧。。。


我搜了一下我曾经做的一个mmorpg服务器,搜std::map,使用比例一看即知,况且很多还是初始分配的(即静态共享的)。

Total found: 37    Matching files: 14    Total files searched: 1335


静态共享的数据可以使用stl。而且尽量使用已排序的vector + lower_bound 来替换map。








23

主题

515

帖子

552

积分

高级会员

Rank: 4

积分
552
发表于 2012-8-9 17:03:00 | 显示全部楼层

Re: Re:你们编写服务端程序的时候会用STL吗?

gantleman: Re:你们编写服务端程序的时候会用STL吗?

现在的问题是,你写个线程锁或者脚本来几个小循环,
在语言上省出来的那点效率就都又丢进去。
STL已经很成...



另外要记住一点,尽量不要使用锁,尤其是全局锁千万不要使用,因为游戏服务器本身就是分区间的。
将数据放到其隶属的区间,这样多线程就可以完美的并发了。
使用临界区的服务器程序员们建议多输出CRITICAL_SECTION.DebugInfo->EntryCount来查看锁并发的次数。呵呵~

之前本人做过的一个服务器就是由线程池中N个线程来完美并发服务器上的所有房间,即各房间不干扰,房间之间通讯有专门的方法。
使用 线程消息队列 + 双锁(头尾锁)数组链表(即避免了消息内存分配,也避免了false sharing,同时还可以双线程并发insert和pop)

还可以在某些小块的地方使用自旋锁(当然现在临界区都带自旋的,自旋锁要加上PAUSE,网上很多都没加。。)

内存不要随意分配,一开始分配一个大块内存池数组,这样可以使用小粒度锁来支持内存分配并发。
另外最值得优化的也当属IO,不能想发就发,使用20~30ms统一发送即可。

本来没想写这么多,但是越写越想吐槽,由于mmorpg现在不景气,加上硬件的廉价,游戏服务器越来越没有技术含量了。。。
当然这其实是一个好事。

建议做服务器的人有空可以看看linux或者windows内核代码,里面没有stl,甚至没有C++,但是一样写的非常流畅。

呵呵~


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

本版积分规则

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

GMT+8, 2025-2-26 23:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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