1、游戏对时时性较高的,基本上都使用时时操作内存+定时入库的方式。部分涉及到重要数据如金币等,才采用时时入库。
2、操作内存时为了避免多个线程同时操作相同一条数据,通过会开以业务类型分为以下几种:
1)全服单线程,一个例子是战斗。这样可以避免两个线程同时操作同一个对象的属性。为了优化,也可以在每个地图(或副本)上是单线程。全服单线程的另一个例子是玩家交易。
2)角色单线程,每个角色单线程处理,大部对角色的操作都可以归入此类。
3)多线程操作,无需担心操作同一块内存,这种情况通常都是查询数据请求,没有修改的操作。绝大部分玩家消息都是归入此类。
todo:研究一下spring的线程池
spring配置线程池:
<!– 处理用户请求的线程池 –>
<bean id=”taskExecutor”
class=”org.springframework.scheduling.concurrent.threadpooltaskexecutor”>
<property name=”corePoolSize” value=”5″ />
<property name=”maxPoolSize” value=”10″ /> // 最大线程数
<property name=”queueCapacity” value=”100″ /> // 消息队列容量
<property name=”keepAliveSeconds” value=”10000″ /> // 存活时间,可以设置的长一些
</bean>
线程池要添加的线程需要实现Runnable接口,不是Thread。
每次用时直接把Runnable对象丢进taskExecutor,线程池会负责调用。
0 条评论。