状态变量

Unity进阶:PlayMaker

岁酱吖の 提交于 2019-11-29 05:51:09
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top 优梦创客的游戏讲堂:https://91make.ke.qq.com 『优梦创客』的微信公众号:umaketop 您可以自由转载,但必须加入完整的版权声明 PlayMaker基于状态机的可视化编程工具,playmaker内部实现会为其创建一个类,在其实例化和序列化时会有开销(建立通过缓冲池避免),对复杂度要求较高的逻辑也可以将其封装到PlayMaker的Action中 playMaker基于有限状态机,一个状态机包括若干个状态节点,组合在一起形成游戏逻辑。每个状态节点包括若干Action,这些Action对应的就是Unity内的具体游戏功能,如播放动画,移动位置 PlayMaker状态机不能单独存在(其本身也是继承自MonoBehaviour),选择一个GameObjec,- PlayerMaker -> Components -> Add FSM to Selected Objects;将状态机指定给选中的GameObject,一个GameObject可以有多个状态机 State(状态) 创建状态机后,默认拥有一个状态节点,也就是起始节点,名为State1

Linux线程间同步的几种方式

删除回忆录丶 提交于 2019-11-29 02:43:27
信号量 信号量强调的是线程(或进程)间的同步:“信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在sem_wait的时候,就阻塞在那里)。当信号量为单值信号量时,也可以完成一个资源的互斥访问。信号量测重于访问者对资源的有序访问,在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。 有名信号量 可以用于不同进程间或多线程间的互斥与同步 创建打开有名信号量 sem_t *sem_open(const char *name, int oflag); sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value); //成功返回信号量指针;失败返回SEM_FAILED,设置errno name是文件路径名,但不能写成/tmp/a.sem这样的形式,因为在linux下,sem都是在/dev/shm目录下,可写成"/mysem"或"mysem",创建出来的文件都是"/dev/shm/sem.mysem",mode设置为0666,value设置为信号量的初始值.所需信号灯等已存在条件下指定O_CREAT|O_EXCL却是个错误。 关闭信号量,进程终止时,会调用它 int sem

thymleaf的遍历

眉间皱痕 提交于 2019-11-29 00:45:51
th:each属性用于迭代循环,语法:th:each="obj,iterStat:${objList}" 迭代对象可以是Java.util.List,java.util.Map,数组等; iterStat称作状态变量,属性有: index:当前迭代对象的index(从0开始计算) count: 当前迭代对象的index(从1开始计算) size:被迭代对象的大小 current:当前迭代变量 even/odd:布尔值,当前循环是否是偶数/奇数(从0开始计算) first:布尔值,当前循环是否是第一个 last:布尔值,当前循环是否是最后一个 举例: <ol> <li>List循环: <table border="1"> <tr> <th>用户名</th> <th>邮箱</th> <th>管理员</th> <th>状态变量:index</th> <th>状态变量:count</th> <th>状态变量:size</th> <th>状态变量:current.userName</th> <th>状态变量:even</th> <th>状态变量:odd</th> <th>状态变量:first</th> <th>状态变量:last</th> </tr> <tr th:each="user,userStat : ${list}"> <td th:text="${user.userName}"

多线程编程学习总结

梦想的初衷 提交于 2019-11-28 21:57:10
线程的概念和原理 为什么使用多线程? 为了更高效的完成任务和利用CPU资源,现在的操作系统设计为多任务操作系统,而多进程和多线程是实现多任务的方式。 什么是进程和线程? 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。进程是OS分配资源的最小单位。 线程是指进程中的一个执行流程,一个进程中可以运行多个线程。线程总是属于某个进程,进程中的多个线程共享进程的内存。进程是OS调度的最小单位。 工作原理? 多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。 具体到java内存模型,由于Java被设计为跨平台的语言,在内存管理上,显然也要有一个统一的模型。系统存在一个主内存(Main Memory), Java中所有变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory)——调用栈,工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。 多个线程的执行是并发的,也就是在逻辑上“同时”

Java并发编程知识点总结Volatile、Synchronized、Lock实现原理

允我心安 提交于 2019-11-28 20:40:53
Volatile 关键字及其实现原理   在多线程并发编程中, Volatile 可以理解为轻量级的 Synchronized ,用 volatile 关键字声明的变量,叫做共享变量,其保证了变量的“可见性”以及“有序性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。可见性是由 Java 内存模型保证的(底层还是通过内存屏障实现的),即某个线程改变共享变量的值之后,会立即同步到主内存,线程每次使用共享变量的时候都先从内存中读取刷新它的值;而有序性是通过“内存屏障”实现的,通过禁止指令重排序,从而使得某些代码能以一定的顺序执行。   但是 Volatile 关键字不能保证对共享变量操作的“原子性”,比如自增操作( i++ )就不是原子操作,其可以分解为:①从内存中读取 i 的值,②对 i 进行自增操作,③将 i 的值写入到内存中;因此 volatile 关键字也不能完全保证多线程下的安全性。   在了解 volatile 关键字的原理之前,首先来看一下与其实现原理相关的 CPU 术语与说明。 图 1. 与 volatile 实现原理相关的相关 CPU 术语与说明   通过对声明了 volatile 变量的 Java 语句进行反编译可以发现,有 volatile 变量修饰的共享变量进行写操作的时候会多出第二行汇编代码, 其中 Lock

cpu缓存和volatile

孤街醉人 提交于 2019-11-28 18:03:21
目录 CPU缓存的由来 CPU缓存的概念 CPU缓存的意义 缓存一致性协议-MESI协议 Store Buffers Store Forwarding Memory Barriers Invalidate Queues 读内存屏障 vs 写内存屏障 x86 架构下的实现 volatile与原子性 参考资料: CPU缓存的由来 我们知道CPU的处理能力要远比内存强,主内存执行一次内存读、写操作的时间可能足够处理器执行上百条的指令。为了弥补处理器与内存处理能力之间的鸿沟,在内存和处理器之间引入了高速缓存(Cache)。高速缓存是一种存取速率远比主内存大而容量远比主内存小的存储部件,每个处理器都有其高速缓存。如下图所示 CPU的读(load)实质上就是从缓存中读取数据到寄存器(register)里,在多级缓存的架构中,如果缓存中找不到数据(cache miss),就会层层读取二级缓存三级缓存,一旦所有的缓存里都找不到对应的数据,就要去内存里寻址了。寻址到的数据首先放到寄存器里,其副本会驻留到CPU的缓存中。 CPU的写(store)也是针对缓存作写入。并不会直接和内存打交道,而是通过某种机制实现数据从缓存到内存的写回(write back)。 CPU缓存的概念 CPU缓存是位于CPU与内存之间的临时数据交换器,它的容量比内存小的多但是交换速度却比内存要快得多

线程基础

﹥>﹥吖頭↗ 提交于 2019-11-28 17:33:45
摘要:在计算机发展早期,CPU的资源十分昂贵,如果一个CPU只能运行一个程序,那么当读写磁盘是CPU就只能处于空闲状态,造成了极大的浪费。从而有了 多道程序 的方式,即编译一个监控程序,当程序不需要使用CPU时,将其他在等待CPU的程序启动。该方式大大提高了CPU的利用率,但它的弊端是不分轻重缓急,有时候一个交互操作可能要等待数十分钟。 分时系统 :每个CPU运行一段时间后,就主动让出给其他CPU使用。Windows早期版本和Mac OS版本都是采用的这种分时系统来调度程序的。但是一旦有任何程序出现问题无法主动让出CPU给其它程序的话那么操作系统也没有办法,其它程序只能等待,造成死机假象。 多任务系统 :操作系统接管了所有的硬件资源,并且本身运行在一个受硬件保护的级别。所有的应用都以进程的方式运行在比操作系统更低的级别,每个进程都有自己独立的地址空间,使得进程之间的地址空间相互隔离。CPU由操作系统进行同一分配,每个进程根据进程优先级的高低都有机会获得CPU,但如果运行超过一定的时间,CPU会将资源分配给其他进程,这种CPU分配方式是抢占式,操作系统可以强制剥夺CPU资源并且分配给它认为目前最需要的进程。如果操作系统分配每个进程的时间很短,就会造成很多进程都在同时运行的假象,即所谓的宏观并行,微观串行。 什么是线程 线程(Thread),有时被称为轻量级进程(Lightweight

学习笔记5

女生的网名这么多〃 提交于 2019-11-28 12:33:11
一网络配置 1.将Linux主机接入到网络,需要配置网络相关设置 主机名 IP/netmask 路由:默认网关 DNS服务器 2.网络配置命令 配置网络接口 ifconfig命令 ifconfig [interface] ifconfig -a ifconfig IFACE [up|down] 路由管理命令 route 命令 查看:route -n 添加:route add 删除:route del 显示网络连接 netstat命令 -t: tcp协议相关 -u: udp协议相关 -w: raw socket相关 -l: 处于监听状态 -a: 所有状态 -n: 以数字显示IP和端口 -e:扩展格式 -p: 显示相关进程及PID 配置Linux网络属性:ip 命令 ip addr { add | del } IFADDR dev STRING [label LABEL]:添加地址时指明网卡别名 [scope {global|link|host}]:指明作用域 global: 全局可用 link: 仅链接可用 host: 本机可用 添加路由:ip route add 主机路由:IP 网络路由:NETWORK/MASK 添加网关:ip route add default via GW dev IFACE 删除路由:ip route del TARGET 显示路由:ip route

2019 java面试题基础

半世苍凉 提交于 2019-11-28 11:21:37
如有需要获取最新资料,以及更全面的PDF版面试题, 请关注微信公众号“西柚向西”,回复“面试题”获取面试资料。回复“视频”获取最新最全的java技术栈开发视频。 公众号会持续同步最新技术视频、面试题精选,以及职场经验、技能分享等,欢迎关注。 最新最全的面试集合,请参考 《最全最新java面试题系列全家桶(带答案)》 更多精彩,持续更新中。。。。 4、&和&&的区别 答: &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5、Collection 和 Collections的区别 答: Collection是集合类的上级接口,继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作 11、数组有没有length()这个方法? String有没有length()这个方法 答: 数组没有length()这个方法,有length的属性。String有有length()这个方法 12、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型 答: 方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现

Spring单例与线程安全小结

时光毁灭记忆、已成空白 提交于 2019-11-28 10:32:34
一、Spring单例模式与线程安全 Spring框架里的bean,或者说组件,获取实例的时候都是默认的单例模式,这是在多线程开发的时候要尤其注意的地方。 单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。 当多用户同时请求一个服务时,容器会给每一个请求分配一个线程,这是多个线程会并发执行该请求多对应的业务逻辑(成员方法),此时就要注意了,如果该处理逻辑中有对该单列状态的修改(体现为该单列的成员属性),则必须考虑线程同步问题 同步机制的比较  ThreadLocal和线程同步机制相比有什么优势呢?ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题。   在同步机制中,通过对象的锁机制保证同一时间只有一个线程访问变量。这时该变量是多个线程共享的,使用同步机制要求程序慎密地分析什么时候对变量进行读写,什么时候需要锁定某个对象,什么时候释放对象锁等繁杂的问题,程序设计和编写难度相对较大。   而ThreadLocal则从另一个角度来解决多线程的并发访问。ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时