vertx的Actor模型实现
前言
note: Context 与 EventLoop 关系 : N ; 每次创建一个vericles或者multi instances
通过EventLoopGroup.next挑出一个EventLoop,所以是1:N关系; context <=> verticle.
总结:
.verticle和multi Instances总和不超过EventLoopSize,multi verticle在同一个EventLoop的
Thread上运行加大负担,如果造成线程阻塞会影响延时任务(Timer,Periodic)的进行和任务事件堆积过大;
.verticle中一般可以不用考虑线程(单线程)安全问题,除了定义static variable、static block、
static method外,verticle之间通过EventBus通信,极端情况本地的verticle之间通过共享内存通信效果更好.
.每創建一個verticle會根據 setting verticle Type 創建context instance , 所以create verticles size
> EventloopSize , 那麼一個Eventloop就會執行 multi verticle handlers.
Context Class diagram 如图:
Verticle Types:
Verticle Types : 一、Standard Verticles、二、Worker Verticles、三、Multi-threaded worker verticles.
本质还是eventloop处理connection、read/write、encode/decode 等等, 事件处理(EventHandler)的逻辑
就在 setting verticle type 处理(Thread), 调度逻辑在VertxHandler类配置的context调度,
和vertx.executeBlocking->{...} 相同效果.
调度框图
时序图
Multi instances Verticle Structure
vertx的Actor模型实现的更多相关文章
- .NET的Actor模型:Orleans
Orleans是微软推出的类似Scala Akka的Actor模型,Orleans是一个建立在.NET之上的,设计的目标是为了方便程序员开发需要大规模扩展的云服务, 可用于实现DDD+EventSou ...
- 以Akka为示例,介绍Actor模型
许多开发者在创建和维护多线程应用程序时经历过各种各样的问题,他们希望能在一个更高层次的抽象上进行工作,以避免直接和线程与锁打交道.为了帮助这些开发者,Arun Manivannan编写了一系列的博客帖 ...
- 根据老赵轻量级Actor进行修改的Actor模型
学习了老赵轻量级Actor模型,并在实际中使用,效果不错. 老赵轻量级Actor模型: ActorLite:一个轻量级Actor模型实现(上) ActorLite:一个轻量级Actor模型实现(中) ...
- Orleans:NET的Actor模型
.NET的Actor模型:Orleans Orleans是微软推出的类似Scala Akka的Actor模型,Orleans是一个建立在.NET之上的,设计的目标是为了方便程序员开发需要大规模扩展 ...
- Actor模型[转]
原文链接:http://blog.jeoygin.org/archives/477 Actor这个模型由Carl Hewitt在1973年提出,Gul Agha在1986年发表技术报告“Actors: ...
- Actor模型原理
1.Actor模型 在使用Java进行并发编程时需要特别的关注锁和内存原子性等一系列线程问题,而Actor模型内部的状态由它自己维护即它内部数据只能由它自己修改(通过消息传递来进行状态修改),所以使用 ...
- 终结python协程----从yield到actor模型的实现
把应用程序的代码分为多个代码块,正常情况代码自上而下顺序执行.如果代码块A运行过程中,能够切换执行代码块B,又能够从代码块B再切换回去继续执行代码块A,这就实现了协程 我们知道线程的调度(线程上下文切 ...
- Actor模型-Akka
英文原文链接,译文链接,原文作者:Arun Manivannan ,译者:有孚 写过多线程的人都不会否认,多线程应用的维护是件多么困难和痛苦的事.我说的是维护,这是因为开始的时候还很简单,一旦你看到性 ...
- Actor模型及原理
1.Actor模型 在使用Java进行并发编程时需要特别的关注锁和内存原子性等一系列线程问题,而Actor模型内部的状态由它自己维护即它内部数据只能由它自己修改(通过消息传递来进行状态修改),所以使用 ...
随机推荐
- celery概述
celery介绍 Celery是一个功能完备即插即用的任务队列.它使得我们不需要考虑复杂的问题,使用非常简单.celery看起来似乎很庞大,本章节我们先对其进行简单的了解,然后再去学习其他一些高级特性 ...
- Educational Codeforces Round 63 (Rated for Div. 2) B. Game with Telephone Numbers 博弈思维+模拟+贪心思维
题意:博弈题面 给出一个数字序列 (>=11) 有两个人任意删除数字 直到 数字只剩下11位 如果删除后的数字串开头是8那么就是第一个赢 否则就是第二个人赢 第一个人先手 数字序列一定是奇 ...
- P4137 Rmq Problem / mex (莫队)
题目 P4137 Rmq Problem / mex 解析 莫队算法维护mex, 往里添加数的时候,若添加的数等于\(mex\),\(mex\)就不能等于这个值了,就从这个数开始枚举找\(mex\): ...
- mac 下 clang++ 找不到头文件 stdlib.h
因为要用 openmp库,用 clang++ 编译 c++程序,出现了如下报错: clang++ xx.cpp -o xx -fopenmp /usr/local/Cellar/llvm/7.0.0/ ...
- winform动态生成新窗体并添加控件执行命令
主要代码 Form nf = new Form(); ; ; nf.Width = _w; nf.Height = _h; //添加textbox TextBox tb = new TextBox() ...
- yii2 使用指定数据库执行createCommand
Yii::$app->dbName->createCommand($sql)->queryAll(); 指定dbName数据库配置
- 1068: [SCOI2007]压缩
题解: 区间DP 考虑状态的设计: \(dp[i][j][0/1]\)表示原字符串的\(i-j\)区间有无在中间加\(M\).并且默认在\(i\)之前加入\(M\)压缩后的最小长度,显然有转移: \[ ...
- 年月日时分秒毫秒+随机数getSerialNum
package com.creditharmony.apporveadapter.core.utils; import java.io.ByteArrayInputStream; import jav ...
- 在DOS命令中输入ipconfig /all,出现“该命令不是系统内部命令......”
第一种情况:1.先去C:\Windows\System32下查找有没有 ipconfig.exe的执行文件,有的话说明系统文件没有丢失,否则要去网上下载一个 ipconfig.exe文件,并放到C:\ ...
- STL迭代器iterator
一:迭代器原理 迭代器是一个“可遍历STL容器内全部或部分元素”的对象. 迭代器指出容器中的一个特定位置. 迭代器就如同一个指针. 迭代器提供对一个容器中的对象的访问方法,并且可以定义了容器中对象的范 ...