智能预判 (一:线程的开启)

单线程模式,在大数据量 运算下,肯定效率 没有  多线程快,所以,在设计初期,我就定下了 多线程方案。

下面是 计划 多线程方案的  几个备选方式。

一:单人 多线程 异步并发方案。

己方人物碰撞检测 敌方 一条线程。

敌方人物碰撞检测 己方 一条线程。

己方 子弹 碰撞检测 敌方 一条线程。

敌方 子弹 碰撞检测 己方 一条线程。

人物移动 一条线程。

人物血量增减一条线程。

优点:碰撞检测效率快。

缺点:刷新不同步。

二:单人单线程 同步并发方案。

优点:速度相对快。

缺点:数据检索比较麻烦。

三:多人多线程 同步并发方案。

有点:数据检索 简单。

缺点:速度相对慢。

通俗解释

一个网吧,100台 电脑。玩家必须 打开网页,打开客户端游戏,打开qq。

第一种方案:网吧 每次 进来一个玩家,他同时 在三台机器上,操作 这三个步骤。那么,他速度肯定最快。

但是,虽然同时点开,但这三台 机器不一定 同时 能运行开启,所以不能同步。

不可采用

第二种方案:网吧 开始进来100 个玩家,他们都 顺序 执行这 三个步骤,由于有些人操作快,有些人 操作慢,所以

先完成的 人,离开 网吧,让在外面 的人进来继续。

这个和我们日常的 方式 很像,效率是所有方案之中最快的。但是,优先完成 离开的玩家,肯定要 告诉 网吧管理员。

这样 就 让 网吧管理员 非常的 忙碌了。最后有可能变成  大量完成的 玩家 等待 管理员 放行。

第三种方案:网吧 开始进来100个 玩家,同样也是 都顺序执行这三个步骤,虽然有些人快,有些人慢,但他们必须等

所有人都完成,统一到网吧 管理员那边 申请离开,由于他们都是 排好队 依次申请离开的,所以网吧管理员 非常简单的就处理完,然后

统一 再让 外面 100个人 进来。

这个步骤,看起来会有点问题,比如 100人中,有个特别慢的人,大家是不是都要等他,之类的问题。我之前也考虑过。

但只要我让 100台电脑,分成 多组,也就是 10台电脑 一个区,总共10个区。那么最多也就是 某个区,10个人一起慢点,

对大局不会太多影响。

这次先这样,先不上代码了。下一篇,结合代码继续深入分析。

时间: 2024-10-25 04:08:06

智能预判 (一:线程的开启)的相关文章

智能预判 (五 客户端战斗 模拟)

用 LICEcap 录制 ,发现 帧数 好低啊..其实 demo运行 都在100帧以上的. 好了,不纠结上面的 帧数问题. 这个战斗系统,模拟了 对战的过程,其中包含,打人和被打. 打人,可以让对方 少血,同时打人的前提是 蓄力.蓝色部分.打中人物 还可以让他 速度有影响,这里暂时没做. 被打,被打 就 很 精彩了,不仅后退,死亡也能后退. 射程,不解释. 速度,也不需要解释,这里注意的一点就是,速度是 慢慢加起来的,可以做 蓄力冲刺的 视觉效果. 就这样吧,搞了5天. 但是,最最精彩的,绝对不

智能预判 (二:最初的布局)

不太会画图,先简单看下 程序流程,他比 其他 服务器 多了 一个 单独的 线程 内部数据库 物理运算,也就是  他的运算 不需要 客户端  时时给信息. 下面是 片段代码. var bootstrap = BootstrapFactory.CreateBootstrap(); if (!bootstrap.Initialize()) { Console.WriteLine("无法初始化"); Console.ReadKey(); return; } var result = boots

智能预判 (三:布局加强)

线程启动项目 修改 在 AppServer 类中,方便管理. 同时增加心跳,用来同步 数据并 定时批量存储数据库. protected override void OnStarted() { ThreadPoolMain.OnStartThreadPool(); OnTimeServer(); base.OnStarted(); } //规定时间 检查一次心跳 public void theout(object source, System.Timers.ElapsedEventArgs e)

智能预判 (六: 服务端战斗 模拟)

服务端 模拟,是指,和 客户端 做法一样,给出人物属性,按照序列帧,开始执行计算.但服务端 运行速度 远远大于客户端. 这里的最关键做法,要注意2点!!! 1: 战斗过程,必须是同步计算,千万不能有 一个 异步处理!!!! 好多u3d的朋友,喜欢用 事件,喜欢用协成.这里注意了,别用哦,虽然处理流程 起来会 比较麻烦. 2:后台 必须设计 一套 和 客户端一样的 程序流程.看下我的 片段代码. 这个是后台,但里面的start update 和 客户端 流程 一模一样!!! 当然 更多细节 还不止

正则表达式的预判

如果要创建一个密码强度为: 6-8位,字母,数字的组合.要求至少包含一个大写字母和一位数字的正则 如下步骤: 1. 预判不全由字母组成: 说明可能包含数字或特殊符号 (?![A-Za-z]+$) 2. 预判不全由小写字母和数字组成: 说明可能包含大写字母或特殊符号 (?![a-z0-9]+$) 3. [A-Za-z0-9]{6,8} 最终结果为: (?![A-Za-z]+$)(?![a-z0-9]+$)[A-Za-z0-9]{6,8}

预加载与智能预加载(iOS)

来源:Draveness(@Draveness) 链接:http://www.jianshu.com/p/1519a5302141 前两次的分享分别介绍了 ASDK 对于渲染的优化以及 ASDK 中使用的另一种布局模型:这两个新机制的引入分别解决了 iOS 在主线程渲染视图以及 Auto Layout 的性能问题,而这一次讨论的主要内容是 ASDK 如何预先请求服务器数据,达到看似无限滚动列表的效果的. 这篇文章是 ASDK 系列中的最后一篇,文章会介绍 iOS 中几种预加载的方案,以及 ASD

正则中的预判

预判:在正式匹配正则表达式之前,先预读整个字符串,进行初步匹配,如果预判都未通过,则不再验证! 1)(?=表达式): 先浏览字符串是否满足表达式的要求 何时使用:只要正则中出现类似"而且" 比如:4位数字,但不能包含4和7 (?=[^47]$) 是否由除了4,7之外的字符组成 2)(?!表达式):先检查字符串是否不满足表达式要求 比如:6位以上密码. 字母,数字组成 首字母不能是数字: [a-zA-Z][a-zA-Z0-9]{5,} 必须至少包含1个大写字母 不能都由小写字母和数字组成

线程及开启方式

目录 线程及开启方式 线程 方式一(继承Thread类) 方式二(实现Runnable接口) 方式三(实现Callable接口) 线程及开启方式 线程 进程:正在执行的程序 线程:具有完成独立任务的一条执行路径 多线程:一个程序拥有多条线程 多线程的好处: 可以提高进程和CPU的使用率 能够让多个程序看起来像同时执行 防止单线程出现阻塞 用于处理耗时任务 题外话:关于并发和并行(以后会详写) 并发:在一段时间间隔内处理多个事务的能力: 并行:在某一时刻,同时处理多个事务的能力: 方式一(继承Th

java_线程的开启与结束(可用于android)

package testJavaAll; import java.util.Timer; import java.util.TimerTask; /** * 测试线程开启和停止cancel的 * * 2014年10月21日 10:34:57 * * yjbo */ public class testThread { Timer timer; private int x = 0; public testThread(int seconds, int seconds2) { timer = new