grain

《 Java 编程思想》CH08 多态

痴心易碎 提交于 2020-02-27 15:22:11
在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征。 多态通过分离做什么和怎么做,从另一个角度将接口和实现分离开来。 “封装”通过合并特征和行为来创建新的数据类型。“实现隐藏”则通过将细节“私有化”把接口和实现分离开来,而多态的作用则是消除类型之间的耦合关系。 再论向上转型 & 转机 对象既可以作为它自己本身的类型使用,也可以作为它的基类使用,而这种把某个对象的引用视为其基类的引用的做法被称为“向上转型” 将一个方法调用同一个方法主体关联起来被称为 绑定 。 若在程序执行前进行绑定(如果有的话,由编译器和链接器实现),叫做 前期绑定 。 若在运行时根据对象的类型进行绑定,则叫做 后期绑定 ,也叫做 动态绑定 或 运行时绑定 。 Java 中除了 static 方法和 final 方法(private 方法属于 final 方法)外,其他所有方法都是后期绑定的。 Java 用动态绑定实现了多态后,我们可以只编写与基类相关的代码,而这些代码可以对所有该基类的导出类正确运行。 多态的例子可以参考练习2。 在一个设计良好的 OOP 程序中,大多数或所有方法都只与基类接口通信。这样的程序是可扩展的,因为可以从通用的基类继承出新的数据类型,从而新添加一些功能。 域没有多态。 如果一个方法是静态的,那么它的行为就不具有多态性。静态方法是与类,而不是与单个对象相关联的。 由于

Thinking in Java第八章学习笔记----多态

Deadly 提交于 2020-01-14 12:18:26
封装:   封装就是把对象的行为和属性装在一个类里。 抽象:   抽象是将存在于事物之间共同拥有的元素提取的过程,抽象成类或者接口。抽象分为:   1)数据抽象:用于表示事物的属性,比如人的姓名、年龄等。抽象成属性或者成员变量。   2)过程抽象:用于表示事物的行为,比如人会吃饭等。抽象成方法。 多态:   在面向对象程序设计语言中,多态是继封装和抽象的第三大特性。首先,须清楚多态是一种不能单独来看的特性,它只能作为类中"全景"关系中的一部分,与其他特性协同合作。多态的主要功能是将做什么和怎么做分离开来,从另一角度将接口和数据分离开来。多态不仅能改善代码的组织结构和可读性,还能创建可扩展的程序。   概括来说,多态的作用是消除耦合。没有多态,等号左边和右边需要相互对应,即耦合。有了多态,左边是父类(或者接口),右边是子类(或实现类),我只管调用接口里面的方法就是了,至于你实现类怎么去实现,那是你的事,你要修改一下实现,你只管去把实现类换掉,我这边一行代码都不用变,这就解耦了。 再论向上转型:   把导出类对象的引用视为其基类的引用,这种做法称为向上转型。因为在继承树的画法中,基类是处于上方的。 问题导出:   如果我们只写一个简单的方法,它仅接收基类引用作为参数,而不是写多个以导出类引用为参数的类似方法,并且这个方法对所有的导出类参数都可以正确运行,显然这种做法更好。 问题解决:

Orleans框架简单示范

纵饮孤独 提交于 2020-01-02 13:14:09
希望现在学习Orleans不会晚,毕竟Server Fabric都开源了。本篇博客从Sample的HelloWorld示例程序来解读Orleans的Grains。 Server配置参考 : https://dotnet.github.io/orleans/Documentation/clusters_and_clients/configuration_guide/server_configuration.html Client配置参考 : https://dotnet.github.io/orleans/Documentation/clusters_and_clients/configuration_guide/client_configuration.html 对于客户端以及服务端的配置,建议配置上AddApplicationPart, 这样能够明确到Grain的类型及用途。 Grain的相关: Grain的实现就不用说了.在这里要注意下Grain的持久化。参考 https://dotnet.github.io/orleans/Documentation/grains/grain_persistence/index.html 对于Grain的获取,我们在定义Grain接口类型的时候,会继承自: IGrainWithStringKey、IGrainWithIntegerKey

《Think in Java》

断了今生、忘了曾经 提交于 2020-01-01 02:04:15
chapter 1 对象导论 面向对象程序设计(Object-oriented Programming ,OOP) chapter 2 一切都是对象 字段和方法 若类的某个 成员变量 是基本数据类型,即是没有进行初始化,java也会确保它获得一个默认值。    局部变量 没有默认值,必须初始化。 方法、参数和返回值 static 关键字    chapter 3 操作符 import static 是导入这个类中的静态方法,然后调用静态方法就可以直接用方法名,而不用"类名.",但要注意导入的方法名有相同的调用时会报错。 java操作符   String 类支持“+”和“+=”。 优先级 关系操作符   对于引用型数据,==和!=比较的是对象的引用,基本类型数据可以直接比较值。equals()可以比较引用型数据的值,equals方法内部是将引用型数据的值转换为基本类型并用== 比较。 字符串操作符   如果表达式以一个字符串起头,那么后续所有操作数都必须是字符串型。 类型转换操作符    chapter 4 控制执行流程 逗号操作符   for循环中用到逗号操作符。 for(int i=1,j=i+10;i<5;i++,j=i*2) { System.out.println("i="+i+",j="+j); } Foreach 语法   for(float x : f){} /

Orleans 整体介绍

时光怂恿深爱的人放手 提交于 2019-12-05 15:17:28
背景 Orleans 是微软开源的Actor模型开发框架。 Actor模型 此模型解决了并发编程时对资源竞争使用的问题,将对同一个业务数据的访问从并行变为串行执行,降低了多线程编程的难度,使普通编程人员也能轻松编写高并发应用。 特点 Orleans的主要特点是通过框架提升开发人员的效率,并默认提供对应用系统横向扩展的能力,即使是普通开发人员也能轻松的完成。 提高开发效率 Orleans通过提供以下这些关键抽象、运行保证、系统服务来提高开发人员的效率,并不在意开发人员是否是并发编程专家。 熟悉的OOP IGrain声明了一些异步的方法, Grains负责实现他们,是不是很熟悉?我们可以像调用本地方法一样去调用这些远程的Grain方法,Orleans负责将它们转换为消息并在网络上传输、调度。 Grain的单线程执行 Orleans保证了一个Grain不会在多个线程上执行(通过primaryKey区分Grain),编程人员永远不用担心在Grain层面的并发问题,也不需要使用锁或其它同步机制来保证对共享数据的访问。 透明激活 Grain仅当要处理消息时才会激活,不同于普通的类实例需要实例化或释放,Grain只有激活和休眠两种状态,并且可以在不同的硬件设备中迁移,实现动态、自适应的负载均衡,并且开发人员不需关心这些具体细节。 透明传输 开发人员调用Grain时

Orleans框架-从示例代码开始(1)

匿名 (未验证) 提交于 2019-12-02 22:06:11
希望现在学习Orleans不会晚,毕竟Server Fabric都开源了。本篇博客从Sample的HelloWorld示例程序来解读Orleans的Grains。 Server配置参考 : https://dotnet.github.io/orleans/Documentation/clusters_and_clients/configuration_guide/server_configuration.html Client配置参考 : https://dotnet.github.io/orleans/Documentation/clusters_and_clients/configuration_guide/client_configuration.html 对于客户端以及服务端的配置,建议配置上AddApplicationPart, 这样能够明确到Grain的类型及用途。 Grain的相关: Grain的实现就不用说了.在这里要注意下Grain的持久化。参考 https://dotnet.github.io/orleans/Documentation/grains/grain_persistence/index.html 对于Grain的获取,我们在定义Grain接口类型的时候,会继承自: IGrainWithStringKey、IGrainWithIntegerKey

高性能最终一致性框架Ray之基本概念原理

不羁岁月 提交于 2019-11-30 07:37:19
一、Actor介绍 Actor是一种并发模型,是共享内存并发模型的替代方案。 共享内存模型的缺点: 共享内存模型使用各种各样的锁来解决状态竞争问题,性能低下且让编码变得复杂和容易出错。 共享内存受限于单节点的服务器资源限制。 Actor模型的优点: 线程之间以消息进行通信,消息按顺序单线程处理,不存在状态竞争。 以消息方式通信,可以方便的组建集群。 把State和Behavior绑定,能更好的控制状态。 名词解释: Mailbox:可以理解为先入先出队列,负责接收和缓存送达的消息。 State:状态信息,比如用户的账户余额信息。 Behavior:负责按顺序处理Mailbox中的消息,比如扣款消息、到账消息,查询余额消息等。 二、Orleans介绍 Orleans是.Net基金会维护的一个Actor跨平台开源框架,独创Virtual Actor概念,支持分布式集群。 项目地址: http://dotnet.github.io/orleans/ 有以下优点: 以对象方式访问Actor,符合面向对象的使用习惯。 提出Virtual Actor概念,可以通过ID访问细粒度的Actor,能承载数千万的Actor对象。 支持Stateful,能替代缓存层来对内存状态进行更精确的控制,减少数据库的压力。 高性能,单个Actor能支持10万+的QPS。 激活透明,Actor对访问者是永久存在的

Orleans入门例子

孤者浪人 提交于 2019-11-27 12:39:04
Orleans入门例子   这是Orleans系列文章中的一篇. 首篇文章在此 一.铺垫。   虽然是个入门例子,还是需要一些铺垫。 Orleans的最小完全体,应该分为2个部分。一个是Orleans客户端,一个是Orleans服务端,这里为什么要加上“Orleans”这个限定词语呢?那是因为Orleans的完全体,才是普通意义上的服务端主程。它们共同构成了游戏服务器,网站服务器等等。 在Orleans客户端中,我们使用GrainClient类以及Grain类,在Orleans服务端内,我们主要使用silo类和grain类。这里要说说Silo类,前面说过Grain类是处于“单线程机制”约束下的类,那么它们运行在哪个地方呢?就是Silo类所在的地方。Silo类是Grain地代码实际执行的地方,它是Grain类的宿主,它承载着所有的Grain实例,也许是几百万个Grain实例。在一些语境下,silo,silohost,以及Orleans服务端,这三个词语有可能代表同一个意思. 一个外部请求的处理大部分情况下需要很多个Grain实例,进行一连串的方法调用后才能处理完毕,这些Grain实例形成一个处理消息的链条,这个消息流走于Grain链内直至处理完毕。那么这个消息是如何第一次到达Grain链条里呢?GrainClient类的作用就是入口,它通知Silo类,有新消息达到

Orleans 整体介绍

≡放荡痞女 提交于 2019-11-25 21:57:01
背景 Orleans 是微软开源的Actor模型开发框架。 Actor模型 此模型解决了并发编程时对资源竞争使用的问题,将对同一个业务数据的访问从并行变为串行执行,降低了多线程编程的难度,使普通编程人员也能轻松编写高并发应用。 特点 Orleans的主要特点是通过框架提升开发人员的效率,并默认提供对应用系统横向扩展的能力,即使是普通开发人员也能轻松的完成。 提高开发效率 Orleans通过提供以下这些关键抽象、运行保证、系统服务来提高开发人员的效率,并不在意开发人员是否是并发编程专家。 熟悉的OOP IGrain声明了一些异步的方法, Grains负责实现他们,是不是很熟悉?我们可以像调用本地方法一样去调用这些远程的Grain方法,Orleans负责将它们转换为消息并在网络上传输、调度。 Grain的单线程执行 Orleans保证了一个Grain不会在多个线程上执行(通过primaryKey区分Grain),编程人员永远不用担心在Grain层面的并发问题,也不需要使用锁或其它同步机制来保证对共享数据的访问。 透明激活 Grain仅当要处理消息时才会激活,不同于普通的类实例需要实例化或释放,Grain只有激活和休眠两种状态,并且可以在不同的硬件设备中迁移,实现动态、自适应的负载均衡,并且开发人员不需关心这些具体细节。 透明传输 开发人员调用Grain时