Java游戏服务器5

来自谷歌的面试题: 死神杀人。
    没有计划,随便猜一个;
    A计划: 50~75%的概率;
    99.5%的概率生存--》但是也可能全都死;

1)单线程方案
    单线程? 不会慢么?
    解决慢,要比教会所有人跨线程写逻辑简单;
    架构师的工作是取舍和折中,不要炫技;
    项目框架越简单,适用性就越广;
    可以出错,但是错误不要向下传递;
    
2)游戏的单线程方案
    问题的提出: 
        A和B都打C,那么可能引起死锁。
        加锁的话,并不是每个人加锁时都头脑清醒的。   

    由于都是在内存中操作的,单线程也很快,慢在IO。

3)单线程池
    让写业务的人不去考虑多线程。

4)LinkedBlockingQueue:
     还可以有拒绝策略, 直接告诉:服务器繁忙。

5)业务单线程架构模型:生产者消费者模式
    Netty那边是IO线程,是要消耗点时间的。
    业务线程,则是在内存里面,单线程也处理的过来。 都是线上验证过得,开发也比较简单。
    
6)游戏服读写数据库: CRUD ==》MyBatis --》从用户登录做起

7)不用管框架的运行机制,直接添加Handler即可。

8)游戏服灰度发布: 由于存储的有状态,做不到热部署
    2个进程。

9)IO操作是在主线程上执行的: 读写数据库时,造成线程阻塞。
    问题: 几毫秒 几十毫秒 甚至几秒,会阻塞主线程。

    我们需要增加另外一个线程处理数据库操作,那具体怎么做呢?

10)形象类比
                        Netty

                 多个美女接待员(BossGroup)             

    我                                             上菜员(MainThreadProcessor)        多个厨师(AsyncOperationProcessor)

                 服务员(WorkerGroup) 


11)登陆就相当于异步操作了,那么就写一个异步操作相关的包。

12)打包: 默认resources文件夹下的会被打包到jar中,但是其它目录的不会,需要手动配置才行

13)一部分业务是:主线程。  
     一部分业务是在:异步线程中。
             因此是跨线程了,2个线程操作了相同的数据,造成错误。


     ==》数据库的部分做异步就足够了,其它部分,还要走正常的逻辑。

     线程绑定。

14)多线程处理IO时,
    2次操作如果被分配在2个线程中 "查数据 和 插入数据"。  ==》 如果是领奖操作,那么就可能被刷的风险。

    加锁: 又要加锁了么????

    无锁: 
        根据操作的特征值,把符合这个特征值的操作,分配到一个线程中执行。
        比如: 即时执行了2次查询,那么由于在一个线程中,因此保证线程安全了。一个萝卜一个坑的感觉。

15)游戏服务器开发的本质: 完成业务逻辑向多线程的映射。

16)引入MQ后: 让数据库的读写操作放到别的进程和机器上。 多线程生产者消费者的使用就是MQ的一个缩影。

17)pb能够压缩字节

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值