当前位置: 首页 > news >正文

长春搜索引擎网站推广物联网的核心和基础是什么

长春搜索引擎网站推广,物联网的核心和基础是什么,现在.net做网站的多吗,离型剂技术支持东莞网站建设Hello Actor 模型 Actor 模型本质上是一种计算模型#xff0c;基本的计算单元称为 Actor#xff0c;换言之#xff0c;在 Actor 模型中#xff0c;所有的计算都是在 Actor 中执行的。在面向对象编程里面#xff0c;一切都是对象#xff1b;在 Actor 模型里#xff0c;一…Hello Actor 模型 Actor 模型本质上是一种计算模型基本的计算单元称为 Actor换言之在 Actor 模型中所有的计算都是在 Actor 中执行的。在面向对象编程里面一切都是对象在 Actor 模型里一切都是 Actor并且 Actor 之间是完全隔离的不会共享任何变量。 当看到“不共享任何变量”的时候相信你一定会眼前一亮并发问题的根源就在于共享变量而 Actor 模型中 Actor 之间不共享变量那用 Actor 模型解决并发问题一定是相当顺手。的确是这样所以很多人就把 Actor 模型定义为一种并发计算模型。其实 Actor 模型早在 1973 年就被提出来了只是直到最近几年才被广泛关注一个主要原因就在于它是解决并发问题的利器而最近几年随着多核处理器的发展并发问题被推到了风口浪尖上。 但是 Java 语言本身并不支持 Actor 模型所以如果你想在 Java 语言里使用 Actor 模型就需要借助第三方类库目前能完备地支持 Actor 模型而且比较成熟的类库就是 Akka 了。在详细介绍 Actor 模型之前我们就先基于 Akka 写一个 Hello World 程序让你对 Actor 模型先有个感官的印象。 在下面的示例代码中我们首先创建了一个 ActorSystemActor 不能脱离 ActorSystem 存在之后创建了一个 HelloActorAkka 中创建 Actor 并不是 new 一个对象出来而是通过调用 system.actorOf() 方法创建的该方法返回的是 ActorRef而不是 HelloActor最后通过调用 ActorRef 的 tell() 方法给 HelloActor 发送了一条消息 “Actor” 。 //该Actor当收到消息message后 //会打印Hello message static class HelloActor extends UntypedActor {Overridepublic void onReceive(Object message) {System.out.println(Hello message);} } public static void main(String[] args) {//创建Actor系统ActorSystem system ActorSystem.create(HelloSystem);//创建HelloActorActorRef helloActor system.actorOf(Props.create(HelloActor.class));//发送消息给HelloActorhelloActor.tell(Actor, ActorRef.noSender()); }通过这个例子你会发现 Actor 模型和面向对象编程契合度非常高完全可以用 Actor 类比面向对象编程里面的对象而且 Actor 之间的通信方式完美地遵守了消息机制而不是通过对象方法来实现对象之间的通信。那 Actor 中的消息机制和面向对象语言里的对象方法有什么区别呢 消息和对象方法的区别 在没有计算机的时代异地的朋友往往是通过写信来交流感情的但信件发出去之后也许会在寄送过程中弄丢了也有可能寄到后对方一直没有时间写回信……这个时候都可以让邮局“背个锅”不过无论如何也不过是重写一封生活继续。 Actor 中的消息机制就可以类比这现实世界里的写信。Actor 内部有一个邮箱Mailbox接收到的消息都是先放到邮箱里如果邮箱里有积压的消息那么新收到的消息就不会马上得到处理也正是因为 Actor 使用单线程处理消息所以不会出现并发问题。你可以把 Actor 内部的工作模式想象成只有一个消费者线程的生产者 - 消费者模式。 所以在 Actor 模型里发送消息仅仅是把消息发出去而已接收消息的 Actor 在接收到消息后也不一定会立即处理也就是说 Actor 中的消息机制完全是异步的。而调用对象方法实际上是同步的对象方法 return 之前调用方会一直等待。 除此之外调用对象方法需要持有对象的引用所有的对象必须在同一个进程中。而在 Actor 中发送消息类似于现实中的写信只需要知道对方的地址就可以发送消息和接收消息的 Actor 可以不在一个进程中也可以不在同一台机器上。因此Actor 模型不但适用于并发计算还适用于分布式计算。 Actor 的规范化定义 通过上面的介绍相信你应该已经对 Actor 有一个感官印象了下面我们再来看看 Actor 规范化的定义是什么样的。Actor 是一种基础的计算单元具体来讲包括三部分能力分别是 处理能力处理接收到的消息。存储能力Actor 可以存储自己的内部状态并且内部状态在不同 Actor 之间是绝对隔离的。通信能力Actor 可以和其他 Actor 之间通信。 当一个 Actor 接收的一条消息之后这个 Actor 可以做以下三件事 创建更多的 Actor发消息给其他 Actor确定如何处理下一条消息。 其中前两条还是很好理解的就是最后一条该如何去理解呢前面我们说过 Actor 具备存储能力它有自己的内部状态所以你也可以把 Actor 看作一个状态机把 Actor 处理消息看作是触发状态机的状态变化而状态机的变化往往要基于上一个状态触发状态机发生变化的时刻上一个状态必须是确定的所以确定如何处理下一条消息本质上不过是改变内部状态。 在多线程里面由于可能存在竞态条件所以根据当前状态确定如何处理下一条消息还是有难度的需要使用各种同步工具但在 Actor 模型里由于是单线程处理所以就不存在竞态条件问题了。 用 Actor 实现累加器 支持并发的累加器可能是最简单并且有代表性的并发问题了可以基于互斥锁方案实现也可以基于原子类实现但今天我们要尝试用 Actor 来实现。 在下面的示例代码中CounterActor 内部持有累计值 counter当 CounterActor 接收到一个数值型的消息 message 时就将累计值 counter message但如果是其他类型的消息则打印当前累计值 counter。在 main() 方法中我们启动了 4 个线程来执行累加操作。整个程序没有锁也没有 CAS但是程序是线程安全的。 //累加器 static class CounterActor extends UntypedActor {private int counter 0;Overridepublic void onReceive(Object message){//如果接收到的消息是数字类型执行累加操作//否则打印counter的值if (message instanceof Number) {counter ((Number) message).intValue();} else {System.out.println(counter);}} } public static void main(String[] args) throws InterruptedException {//创建Actor系统ActorSystem system ActorSystem.create(HelloSystem);//4个线程生产消息ExecutorService es Executors.newFixedThreadPool(4);//创建CounterActor ActorRef counterActor system.actorOf(Props.create(CounterActor.class));//生产4*100000个消息 for (int i0; i4; i) {es.execute(()-{for (int j0; j100000; j) {counterActor.tell(1, ActorRef.noSender());}});}//关闭线程池es.shutdown();//等待CounterActor处理完所有消息Thread.sleep(1000);//打印结果counterActor.tell(, ActorRef.noSender());//关闭Actor系统system.shutdown(); }总结 Actor 模型是一种非常简单的计算模型其中 Actor 是最基本的计算单元Actor 之间是通过消息进行通信。Actor 与面向对象编程OOP中的对象匹配度非常高在面向对象编程里系统由类似于生物细胞那样的对象构成对象之间也是通过消息进行通信所以在面向对象语言里使用 Actor 模型基本上不会有违和感。 在 Java 领域除了可以使用 Akka 来支持 Actor 模型外还可以使用 Vert.x不过相对来说 Vert.x 更像是 Actor 模型的隐式实现对应关系不像 Akka 那样明显不过本质上也是一种 Actor 模型。 Actor 可以创建新的 Actor这些 Actor 最终会呈现出一个树状结构非常像现实世界里的组织结构所以利用 Actor 模型来对程序进行建模和现实世界的匹配度非常高。Actor 模型和现实世界一样都是异步模型理论上不保证消息百分百送达也不保证消息送达的顺序和发送的顺序是一致的甚至无法保证消息会被百分百处理。虽然实现 Actor 模型的厂商都在试图解决这些问题但遗憾的是解决得并不完美所以使用 Actor 模型也是有成本的。
http://www.zqtcl.cn/news/175376/

相关文章:

  • 如何做百度推广网站价格网如何查产品价格
  • 织梦移动网站后缀找生意项目
  • 深圳高端网站建设美工步骤图
  • 指数网站网站用ps下拉效果怎么做
  • 李沧网站建设电话从化企业网站建设
  • 北京电商网站建设公司新康家园网站建设
  • 广西注册公司网站企业高端网站制作
  • 国安中建建设集团网站南京网页设计培训班
  • 网站如何制作建设内容社交电商平台
  • 无法连接到wordpress站点网站建设两个方面
  • 广东官网网站建设品牌未来做啥网站能致富
  • 网站建设合同副本珠海微网站建设
  • wordpress 多语言 站点数据分析师报名入口
  • 做网站长尾词品牌设计模板
  • 企业建立网站的优势阿里云做网站号码
  • 江苏住房城乡建设厅网站一千块钱能注册公司吗
  • 山东兴华建设集团有限公司网站分类信息网站怎么做
  • 怎么用手机网站做软件西安网站建设开发熊掌号
  • asp.net做网站的流程杭州vi设计广告公司
  • 微信网站主题网络建设解决方案
  • 济南自助建站系统网站的外链建设计划
  • 中山低价网站建设一学一做教育视频网站有哪些内容
  • 网上最好的网站模块模板建站小程序
  • 安平县哪家做网站html动漫网站模板下载
  • 网站关于 模板wordpress adsence
  • 杭州公司网站建设如何选择五屏网站建设
  • 天津商城网站建设平面设计师网站
  • 上海的网站设计公司苏州网站建设渠道
  • 做美食没有广告的网站o2o网站建设
  • 网站程序调试模式怎么做做汽车特卖会的网站