actor

How to restrict actor messages to specific types?

旧街凉风 提交于 2019-11-26 18:11:10
问题 In Akka, is there a way to restrict messages to actors to be of a specific static type other than using the "Typed Actor" APIs that use an RPC style programming model? Can I use the message passing style with Akka without throwing away static type safety at the actor boundaries? For example, I'd like to use code like this: sealed abstract class FooMessage case object Foo extends FooMessage case object Bar extends FooMessage class FooActor extends Actor[FooMessage] { def receive = { case Foo =

Can Scala actors process multiple messages simultaneously?

痞子三分冷 提交于 2019-11-26 15:15:33
问题 The reply to a recent question of mine indicated that an actor processed its messages one at a time . Is this true? I see nothing that explicitly says that (in Programming in Scala ), which contains the following snippet (pp. 593) If [the react method] finds a message that can be handled, [it] will schedule the handling of that message for later execution and throw an exception (Emphasis my own). Two related (and mutually exclusive) questions: Assuming an actor could process multiple messages

How does LMAX's disruptor pattern work?

混江龙づ霸主 提交于 2019-11-26 08:38:44
问题 I am trying to understand the disruptor pattern. I have watched the InfoQ video and tried to read their paper. I understand there is a ring buffer involved, that it is initialized as an extremely large array to take advantage of cache locality, eliminate allocation of new memory. It sounds like there are one or more atomic integers which keep track of positions. Each \'event\' seems to get a unique id and it\'s position in the ring is found by finding its modulus with respect to the size of

适合C# Actor的消息执行方式(4):阶段性总结

跟風遠走 提交于 2019-11-26 05:23:35
这个系列原本打算写3篇,也就是说在上一篇文章中已经把老赵认为较合适的方法展现出来了,但事实上这个系列的计划已经扩展为8篇了——没错,翻了一倍不止,而最终是几篇现在我也无法断言。其实这也是我写不了书的原因之一。虽说唯一不变的就是变化,但是我变的太离谱了。不断写,不断出现新想法,不断变化。作为这个系列的第4篇,我们现在来对之前3篇文章进行一番阶段性总结。 阶段性总结本不在计划之内,不过似乎Actor模型这方面内容还不太受人关注,因此有的朋友也误解这系列文章想要解决的问题是什么。除了这方面的解释之外,我还会对之前提出的几种做法进行综合的对比,可以进一步了解整个演变过程的思路,为接下去的改变做铺垫——因为下次改变就涉及到多个方向,每个方向都是在一定程度上真正可用的方式。 我们究竟是要解决什么问题 Actor模型的本质已经被强调了无数遍:万物皆Actor。Actor之间只有发送消息这一种通信方式,例如,无论是管理员让工作者干活,还是工作者把成果交还给管理员,它们之间也要通过发送消息的方式来传递信息。这么做看似不如直接方法调用来的直接,但是由于大量的消息可以同时执行。同样,消息让Actor之间解耦,消息发出之后执行成功还是失败,需要耗费多少时间,只要没有消息传递回来,这一切都和发送方无关。Actor模型的消息传递形式简化了并行程序的开发,使开发人员无需在共享内存(确切地说,其实是共享“写”

Scala笔记整理(九):Actor和AKKA

眉间皱痕 提交于 2019-11-26 00:47:30
[TOC] 概述 ​ Scala的Actor有点类似于Java中的多线程编程。但是不同的是,Scala的Actor提供的模型与多线程有所不同。Scala的Actor尽可能地避免锁和共享状态,从而避免多线程并发时出现资源争用的情况,进而提升多线程编程的性能。 Spark中使用的分布式多线程框架,是Akka,是Scala的一种多线程的类库。Akka也实现了类似Scala Actor的模型,其核心概念同样也是Actor。Scala Actor模型已经在2.1.0的时候还在用,但是在2.1.1的时候已经被遗弃了,Spark开始转换用AKKA来替代Scala Actor,但是Scala Actor概念和原理都还是相同的。所以学习Scala Actor对我们学习AKKA,Spark还是有所帮助的 之所以学习Scala Actor,AKKA是因为在学习Spark源码的时,我们能看懂Spark的源码,因为在底层消息传递机制上大量使用AKKA的传送机制。 scala actor 在使用前,需要先引入maven依赖: <!--scala actor--> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-actors</artifactId> <version>2.10.5</version> </dependency>

C++反射机制:可变参数模板实现C++反射

自作多情 提交于 2019-11-25 23:07:18
1. 概要   本文描述一个通过C++可变参数模板实现C++反射机制的方法。该方法非常实用,在 Nebula 高性能网络框架中大量应用,实现了非常强大的动态加载动态创建功能。   C++11的新特性--可变模版参数(variadic templates)是C++11新增的最强大的特性之一,它对参数进行了高度泛化,它能表示0到任意个数、任意类型的参数。关于可变参数模板的原理和应用不是本文重点,不过通过本文中的例子也可充分了解可变参数模板是如何应用的。   熟悉Java或C#的同学应该都知道反射机制,很多有名的框架都用到了反射这种特性,简单的理解就是只根据类的名字(字符串)创建类的实例。 C++并没有直接从语言上提供反射机制给我们用,不过无所不能的C++可以通过一些trick来实现反射。 Bwar 也是在开发Nebula框架的时候需要用到反射机制,在网上参考了一些资料结合自己对C++11可变参数模板的理解实现了C++反射。 2. C++11之前的模拟反射机制实现    Nebula 框架是一个高性能事件驱动通用网络框架,框架本身无任何业务逻辑实现,却为快速实现业务提供了强大的功能、统一的接口。业务逻辑通过从Nebula的Actor类接口编译成so动态库,Nebula加载业务逻辑动态库实现 各种功能Server ,开发人员只需专注于业务逻辑代码编写,网络通信、定时器、数据序列化反序列化

Scala的actor

末鹿安然 提交于 2019-11-25 22:58:30
1. Scala Actor (1)相关介绍:   Scala中的actor能够实现并行编程的强大功能,他是基于事件模型的并发机制,scala是运用消息(message)的发送、接收来实现多线程的(Java是使用共享内存实现的)。使用 Scala 能够更容易地实现多线程应用的开发。   一个actor是一个容器,它包含状态,行为,信箱,子actor和监督策略。所有这些包含在一个actorReference(Actor引用)里。一个actor需要与外界隔离才能从actor模型中获益,所以actor是以actor引用的形式展现给外界的。 (2)Java并发编程模型与scala actor模型的区别:    1)Java :      - Java 中的并发编程基本上满足了事件之间相互独立,但是事件不能够同时发生的场景的需要。      - Java 中的并发编程是基于共享数据和加锁的一种机制,即会有一个共享的数据,然后有 若干个线程去访问这个共享的数据(主要是对这个共享的数据进行修改),同时 Java 利用加锁 的机制(即 synchronized)来确保同一时间只有一个线程对我们的共享数据进行访问,进而保 证共享数据的一致性。      - Java 中的并发编程存在资源争夺和死锁等多种问题,因此程序越大问题越麻烦。    2)scala actor :      - Scala