如果是多线程,我想过两种模式:Thread per Connection和Task based thread pool。现在机器的内存越来越大了,所以前者的开销是可以忍受的,1000人在线,就算每个线程要被系统占去2M,那么也才2G。而一般的3D游戏做个 3-4千人在线就行了,配个大内存的机器,还剩下足够多的内存给应用使用。多简单啊!网络游戏中,很多请求都是只需要访问单个角色的数据就够了,反过来说很多数据都可以做成Thread Local的,免去了同步代价。
而Task based thread pool的伸缩性相对来说就好的多,但是并发问题也麻烦一些,况且从rpc请求被unmarshal完到扔到task pool里面又多了一次线程切换,如果换成Leader-Follower那样的模式,少了切换但是模型又更复杂了一些。