高性能服务器-关于游戏服务器中多线程的使用
2013-06-18 11:49
363 查看
今天在群里聊天又学到了一些知识。
一般来说,当游戏服务器收到数据请求时,不会当时对数据进行处理工作,而只是简单地把它加入到等待队列中。然后,会有一个单独的Timer每隔一个固定的时间(10ms~200ms,视具体情况而定)从等到队列中取出待处理的数据(取出的数量也要根据具体的情况而定),然后把这些待处理的数据加入到处理队列中,然后以串行的方式对这些数据进行处理。
为什么不用并行处理呢?主要是因为多线程的处理方式无法保证处理的顺序,会对游戏的逻辑结果产生影响。
但是我的想法是,其实是可以把一些数据并行处理的,这主要是看本次操作是否涉及到逻辑的先后顺序,是否会返回结果,是否会对共享数据产生变化。
比如,累加自己的金币应该是可以并发进行的,但是减少金币不行。还有像战斗数据的处理是无法并行计算的。想了一下,累加金币也是不可以的,看来还真要全部用串行的方法。
一般来说,当游戏服务器收到数据请求时,不会当时对数据进行处理工作,而只是简单地把它加入到等待队列中。然后,会有一个单独的Timer每隔一个固定的时间(10ms~200ms,视具体情况而定)从等到队列中取出待处理的数据(取出的数量也要根据具体的情况而定),然后把这些待处理的数据加入到处理队列中,然后以串行的方式对这些数据进行处理。
为什么不用并行处理呢?主要是因为多线程的处理方式无法保证处理的顺序,会对游戏的逻辑结果产生影响。
但是我的想法是,其实是可以把一些数据并行处理的,这主要是看本次操作是否涉及到逻辑的先后顺序,是否会返回结果,是否会对共享数据产生变化。
比如,累加自己的金币应该是可以并发进行的,但是减少金币不行。还有像战斗数据的处理是无法并行计算的。想了一下,累加金币也是不可以的,看来还真要全部用串行的方法。
相关文章推荐
- 使用libevent和多线程构建高性能服务器(客户端)
- 关于sql时间函数的一些简单的例子(本机本地时间,国外服务器不能使用)
- Flighting游戏服务器:关于TCP和UDP
- 网络编程中设计并发服务器,使用多进程与多线程有什么区别?
- 高性能、高并发TCP服务器(多线程调用libevent)
- 使用JAVA建立稳定的多线程服务器
- 关于怎么让多个程序搭建在一个服务器上,搭建一个适合与架构师使用的开发与实现环境
- 关于Android 使用服务器公钥RSA加密 数据到服务器RSA解密报错问题
- 高性能、高并发TCP服务器(多线程调用libevent)
- unity3d开发2d游戏关于Assetbundle的使用
- 关于使用nat123软件实现外网访问内网的部署在Tomcat服务器中的Java Web项目
- 网络游戏服务器开发:脚本系统的制作,linux下使用tolua制作Lua脚本系统(不需要PKG文件)
- Python游戏服务器开发日记(七) 关于协程(greenlet)和C语言的思考
- 让Redis使用TCMalloc,实现高性能NOSql服务器
- 游戏服务器之第三方库tolua++的使用
- 高性能服务器-多线程的再次学习
- 使用Java NIO编写高性能的服务器
- 关于git使用以及合并服务器代码到本地小记
- (转)关于Apache (httpd)服务器防DDOS模块mod_evasive的使用说明