游戏设计模式读书笔记:状态模式

解决了什么问题 在游戏开发中状态是一种常见的用于描述游戏对象的方法,在状态比较简单的情况下可能通过多个标志位变量就可以组合出不同的状态。例如书中举得英雄行走、跳跃、蹲下等操作。但是一旦当对象的状态可是变得比较多,而且需要通过比较多的变量才能描述清楚时,只使用标志位变量的弊端就出现了:那就是过多的变量在代码编写时需要的条件语句会很多,而且变量的组合也不利于管理。 使用switch管理...

七周七并发模式:Lambda架构

Lambda架构 定义 Lambda架构使用了可以进行大规模数据批处理的MapReduce技术,也使用了可以快速处理数据并及时反馈的流处理技术,这样的混搭能够为大数据问题提供扩展性、响应性和容错性都很优秀的解决方案。 Lambda架构是站在大规模场景的角度来解决问题的,它可以将数据和计算分布到几十台或几百台机器构成的集群上进行。这种技术不但解决了之前因为规模庞大而无法解决...

七周七并发模式:通信顺序进程(CSP)

概念 CSP 与actor模型类似,通信顺序进程(Communicating Sequential Processe,CSP)模型也是由独立的、并发执行的实体所组成,实体之间也是通过发送消息进行通信。但两种模型的重要差别是:CSP模型不关注发送消息的实体,而是关注发送消息时使用的channel(通道)。channel是第一类对象,它不像进程那样与信箱是紧耦合的,而是可以单独创建和读...

Unity ECS:基本组件和功能

ECS的组成 Entity: 近似一个轻量级的GameObject对象。 内部没有什么东西,这个和GameObject还不一样,毕竟在GameObject的继承链中具有很多成员和函数。 可以添加和移除组件 具有一个ID,这个是唯一稳定的。这个ID是entity在被保存时的唯一引用。 IComponentData和ISharedComponentData 前文说到过...

Unity ECS:C# Job System

Job system Job system解决了什么问题 unity是支持多线程的,虽然有些缺陷。但是我们在代码里面编写大量的线程,即使使用thread pool也无法避免上下文切换的问题。而Job System本质上还是线程(wrok thread),只不过它的工作线程的数量和CPU逻辑上的核数量一致,这样就避免了上下文切换。 Job System如何工作 在这个系统中真正...

Unity ECS:概述

前言 看来unity已经认识到现在编写代码的一些问题了:OO的模型、mono所编译的糟糕的机器码、GC和单线程。emmm ECS的推出就是为了解决上面的问题,同时使用ECS是为了能够利用C# Job System和Burst compiler。job system是支持多线程的(( Ĭ ^ Ĭ )) ComponentSystem 在后面的文章中会说到ECS中的Com...

七周七并发模式:Actor

什么是Actor 在本书提到的观点中,认为Actor是一个线程或者进程。在这个线程或者进程中执行了一段代码(函数),这个代码可以包含状态(数据)也可以不包含。 所谓Actor模型是Sequential Processes和Functions transforming data values两者的结合,可以理解为是综合了过程式计算和函数式计算的一个计算模型。 一个Ac...

使用整体性学习方法来提高学习效率

前言 这篇文章可以说是一篇读书笔记,内容来自《如何高效学习:1年完成MIT4年33门课程的整体性学习法》这本书。 实际上看到书名的时候我的第一反应这是本讲费曼技巧的书,因为在很多年前我看到过一篇文章,标题和这个非常类似,直到我重新翻出来后发现文中所讲的那个人正是这本书的作者。 书的内容 在这里我不打算过多的写书中的内容,只是简单的把一些核心的内容列出来。实际上如果没有时间...

七周七并发模型:函数式编程

概念 命令式编程的代码由一系列改变全局状态的语句构成,而函数式编程则是将计算过程抽象成表达式求值。 这些表达式由纯数学函数构成,而这些数学函数是第一类对象(我们可以像操作数值一样操作第一类对象)并且没有副作用。由于没有副作用,函数式编程可以更容易做到线程安全,因此特别适合于并发编程。 为什么在并发和并行问题时会用到函数式编程 有关锁的一些规则,都是针对于线程之间共享的可变...

七周七并发模型:线程与锁

为何使用多线程和锁 为了能够并行的计算一些东西 因为在多线程下,如果要修改同一个对象是值会出现竞态条件(即代码行为取决于各操作的时序)。它的表现可能是值的不对,甚至某些时候这个值的前半段是一个线程修改的,后半段是另一个线程修改的。因为这个对象可能不是原子的。 锁,或者说是并行控制的进化 第一阶段:锁与同步方法 基础的锁 从代码层面看就是一个lock函数 同步方法 ...