Java8与游戏开发(五)

游戏开发很重要的一点就是系统的并发性能,体现在单位时间内处理的请求数,还有同时连接的最大用户数。

基于Java语言实现的Netty不仅并发性能极高,内存的gc效率高,使得它成为Java游戏服务器的首选。

Java7之前的java.util.concurrent包就有了Executors线程池,ConcurrentHashMap、ConcurrentSkipListMap等线程安全又高效的数据结构, 基于CAS原理的Atomic原子类型能够避免线程频繁挂起和恢复的开销。

Java7有ForkJoinPool合并分支框架,能够把大的任务分割成许多小的任务并行执行。

Java8引入了函数式编程的思想,遵循函数式思想的数据结构和类都是不可变得,函数是无副作用的,也就是线程安全的。

Java8的parallelStream,基于ForkJoinPool,能够透明地把集合拆分成多个流并行地处理,以前要编写大量的多线程代码,现在一行就能实现。

Java8的CompletableFuture能够满足更加复杂的异步非阻塞的处理需求:

  1. 将两个异步的计算合并为一个,这两个异步计算之间相互独立,同时第二个又依赖于第一个的结果。

  2. 等待Future集合中的所有任务都完成。

  3. 等待Future集合中的所有任务都完成,并返回他的结果。

  4. 通过编程方式去完成一个Future任务的执行。

  5. 应对Future的完成时间,即当Future的完成时间发生时会收到通知,并能使用Future计算的结果进行下一步的操作,不只是简单地阻塞等待操作的结果。

Java8的Map接口新增了一些新的方法:

forEach、computeIfAbsent、computeIfPresent。

Java8的ConcurrentHashMap的性能已经被改善,当大量的key返回相同hash值的value,在以前,这些value会被存放在List里面的,但是现在,value会存放在一棵排序树上。

虽然Java8更加容易实现并行处理,但是我们仍然有可能要做一些取舍。

1、尽量不要使用parallelStream去做与顺序相关的方法或计算。

如果计算的结果要依赖于顺序,并行处理的时间成本会很大。比如Stream<T> limit(long maxSize);

2、正确使用ConcurrentHashMap,get的次数远远多于put的场合,使用双重检查锁的HashMap或者ConcurrentHashMap性能差异不大。

package com.server.game.attribute.fairy;


import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.ut
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值