游戏开发准备(四)--多线程处理数据

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 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>