首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

scala系列--并发01

最近研究了一些scala并发的知识,总结一下。 一.简介 即时响应性是一项决定任何应用程序成败的关键因素。有两种方式来提高即时响应性:1.多线程并行运行多个任务。...3.无限流转换有限流 有限序列 无限流-》Stream 三.并行集合 顺序集合 顺序集合上的方法行为:它们为它们的集合中的每个元素顺序地执行它们的操作。 并行集合 ,Scala 都拥有其并行版本。...我们可以使用par()seq()方法来在顺序集合及其并行版本之间进行相互转换。...Actor模型具有与生俱来的线程安全性。 多个Actor并发地运行,同时处理多条消息。 Actor是异步。 不会阻塞调用者。 不用显示创建一个线程,显示调度任务。...线程并不和Actor绑定--一个线程服务于多个Actor。 java创建共享可变变量,并使用同步原语来提供线程安全性。使用JDK 库很难在短时间内做到正确的并发。

10810

聊聊Akka

Akka是什么 Akka是一款高性能高容错性的分布式&并行应用框架,遵循Apache 2开源许可,底层通过JVM上另外一个流行的语言Scala实现,提供Java&ScalaAPI(本书采用Java进行代码演示...Akka架构体系 Akka采用Scala开发,运行于JVM之上,提供了ScalaJava两种API,目前所属Lightbend公司(原名Typesafe)。...Actor模型 Actor模型最早在1973年由Carl Hewitt提出,它高度抽象了分布式并行程序的运行模式,从底层屏蔽了线程锁机制的管理,为开发者提供了简单可依赖的开发方式。...在底层实现上,Actor是运行于线程之上的,肯定会存在多个Actor共享同一个线程的情况,那么会不会出现并发问题呢?...实际上,Akka为每个Actor都抽象出一个轻量级的执行线程”(不是真的线程),在底层已经实现了隔离性,所以基本上不用担心该问题的出现。

2K30
您找到你想要的搜索结果了吗?
是的
没有找到

Akka简单的性能测试

Sample Flowchart Template (2).png 这种方案是采用MQ作为中间的媒介,在服务端采用线程异步处理任务,处理完成之后将结果发送到MQ中,客户端采用侦听的方式得到结果继续进行处理...这种方案的不足是,可能在某些需求的情况下,需要将结果存放到共享的HashMap或者Threadlocal中进行存放结果,客户端会一直阻塞,直到得到结果,从多线程的角度来说,还是用了共享变量,虽然共享变量可能是线程安全的...方案二 采用比较流行的Akka框架来实现。 **Akka的五大特性 ** 易于构建并行分布式应用 可靠性(Resilient by Design) 系统具备自愈能力,在本地/远程都有监护。...因为之前一直研究ScalaScala的多线程处理的性能是非常高的,那基于Scala语言而开发出来的Akka框架得到了广泛使用。...代码如下: import akka.actor.ActorRef; import akka.actor.ActorSystem; import akka.actor.Props; import akka.actor.UntypedActor

1.2K10

Spark netty RPC 通信原理

Spark netty RPC 通信原理 通信是分布式程序的血液神经,就好比大脑发出的执行需要通过神经需要才能传递到手脚进行执行。可见好的通信能力是分布式系统的重重之中。...(Akka是一个基于scala语言的比较先进异步通信的消息框架)但由于Akka不适合大文件的传输,其大文件是基于Jetty实现的HttpFileServer实现。...线程应该隐藏(封装)它们的私有数据其他资源,而不是与系统的其余部分共享它们。 通过消息(事件对象)在线程之间异步通信。使用异步事件可以使线程真正独立地运行,而不会相互阻塞。...Actor之间是通过底层的线程来实现并行。 [图片上传失败......具体的执行则有维护的线程进行执行。Spark通信框架中各个组件(Client/Master/Worker)可以认为是一个个独立的实体,各个实体之间通过消息来进行通信。 2.

87120

Akka事件驱动新选择

在高并发场景解决方案中,多从线程角度出发,以解决线程安全问题,锁范围又需要多业务场景考虑,何时上锁,何时解锁,何时自动过期等,而事件驱动是从执行什么操作驱动的,在软件系统的设计层面,两者关联性不大,一个强调安全...Akka 是一个用 Scala 编写的库,用于在 JVM 平台上简化编写具有可容错的、高可伸缩性的 Java Scala 的 Actor 模型应用,其同时提供了Java Scala 的开发接口。...Akka 对 Actor 模型的使用提供了一个抽象级别,使得编写正确的并发、并行分布式系统更加容易。Actor 模型贯穿了整个 Akka 库,为我们提供了一致的理解使用它们的方法。...的Reactor模型为例(redis同理),本身的Reactor模型即是从事件驱动(NeetyEventLoop)的设计模式,Netty从io角度出发,分发请求,以Reactor对象分发调用链接,结合线程以此提高多线程高并发的吞吐量...这可以防止 Actor 之间共享状态;观察另一个 Actor 状态的唯一方法是向其发送请求状态的消息。

91230

异步编程 - 14 异步、分布式、基于消息驱动的框架 Akka

它是基于 JVM(Java虚拟机)的,主要使用 Scala 编程语言开发,但也提供了 Java API,因此可以在 Java Scala 中使用。...并发性并行性:Akka 允许开发人员轻松编写并发并行代码,而不必担心底层线程管理。它处理所有与多线程编程相关的复杂性,并提供了抽象,以便开发人员可以专注于业务逻辑。...插件扩展:Akka 提供了丰富的插件扩展机制,可以轻松集成其他库框架, Akka HTTP、Akka Streams 等,以构建全栈应用程序。...内存占用少;每GB堆可以创建约250万个actor(参与者)。 弹性分散性 分布式系统没有单点故障,具有跨节点的负载平衡自适应路由。...对调用堆栈的误解 传统的调用堆栈模型不适用于并发编程,因为异步任务无法通过调用堆栈传递异常或通知主线程。 异步任务执行失败时,任务状态可能丢失,需要引入新的错误信令机制以及从故障中恢复的方法。

70640

ScalaMP ---- 模仿 OpenMp 的一个简单并行计算框架

3.2技术实现细节 实现上主要是借助了Scala AkkaScala(Scalable Langeaue) 是一种多范式的编程语言,设计初衷是要集成面向对象编程函数式编程 的各种特性。...Akka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java Scala 的 Actor 模型应用。...实现上主要是利用akka框架来实现后台的actor(轻量级的线程)的创建和管理。为了使得接口的调用 更接近于openmp,利用了scala语言的特性。...可以看成是线程。...然后每次用户进行并行操作的时候,就从线程池中分配制定的工人actor个数来执行操作。ScalaMp对象只会 在第一次被访问的时候创建,然后在整个程序周期结束前都会存在。

98530

ScalaMP ---- 模仿 OpenMp 的一个简单并行计算框架

3.2技术实现细节 实现上主要是借助了Scala Akka。...Akka 是一个用 Scala 编写的库,用于简化编写容错的、 高可伸缩性的 Java Scala 的 Actor 模型应用。...实现上主要是利用akka框架来实现后台的actor(轻量级的线程)的创建和管理。 为了使得接口的调用更接近于openmp,利用了scala语言的特性。...,会在内部创建一个ActorSystem,可以看成是一个线程 环境,然后在环境中创建一个管理者actor,然后该actor会创建100个工人actor,并对它们 进行管理,可以看成是线程。...然后每次用户进行并行操作的时候,就从线程池中分配制定 的工人actor个数来执行操作。ScalaMp对象只会在第一次被访问的时候创建,然后在整个 程序周期结束前都会存在。

1K60

Akka 指南 之「调度器」

这是一个设置,专门讨论保持运行的热线程数,以减少处理新的传入任务的延迟。你可以在 JDK 的「ForkJoinPool 文档」中了解更多关于并行性的信息。...可共享性:Unlimited 邮箱:任意,为每个 Actor 创建一个 用例:默认调度器,Bulkheading 驱动:java.util.concurrent.ExecutorService。...可共享性:None 邮箱:任意,为每个 Actor 创建一个 用例:Bulkheading 驱动:任何akka.dispatch.ThreadPoolExecutorConfigurator。...可共享性:Unlimited 邮箱:任意,为每个 Actor 创建一个(按需) 用例:Testing 驱动:调用线程(duh) 更多调度器配置示例 配置具有固定线程大小的调度器,例如,对于执行阻塞 IO...在Future执行阻塞调用,为线程提供一个线程数上限,该上限适用于运行应用程序的硬件,本节中详细介绍的那样。

1.8K21

scala快速入门系列【Akka

本篇作为scala快速入门系列的第四十篇博客,为大家带来的是关于Akka的内容。 ?...,创建更多的actor,或发送更多的消息,或者确定如何去响应接收到的下一个消息。...Actor是Akka中最核心的概念,它是一个封装了状态行为的对象,Actor之间可以通过交换信息的方式进行通信,每个Actor都有自己的收件箱(Mailbox)。...通过Actor能够简化锁及线程管理,可以非常容易地开发出正确的并发程序并行系统,Actor具有如下特性: 提供了一种高级抽象,能够简化在并发(Concurrency)/并行(Parallelism)应用场景下的编程开发..."connect" } } 好了,本期的分享就到这里了,另外scala快速入门系列暂时先告一个段落,感谢各位小伙伴的支持鼓励!

67920

并发模型比较

另外进程(线程)的上下文切换也有成本:每次调度器调度线程,操作系统都要把线程的各种必要的信息,程序计数器、堆栈、寄存器、状态等保存起来。 CPU 运算远远快于 I/O 操作。...缺点是: 会频繁地创建、销毁线程,这对系统也是个不小的开销。这个问题可以用线程来解决。...线程是预先创建一部分线程,由线程管理器来负责调度线程,达到线程复用的效果,避免了反复创建线程带来的性能开销,节省了系统的资源。...因为没有多线程,在多核的机器上,也没办法实现并行执行。 参考: Node.js机制及原理理解初步 使用 libevent libev 提高网络应用性能 ---- 5....Java/Scala 有个库 akka,就是 Actor 模型的实现。而 golang 的协程机制则是 CSP 模型。

2K00

并发模型比较

另外进程(线程)的上下文切换也有成本:每次调度器调度线程,操作系统都要把线程的各种必要的信息,程序计数器、堆栈、寄存器、状态等保存起来。 CPU 运算远远快于 I/O 操作。...缺点是: 会频繁地创建、销毁线程,这对系统也是个不小的开销。这个问题可以用线程来解决。...线程是预先创建一部分线程,由线程管理器来负责调度线程,达到线程复用的效果,避免了反复创建线程带来的性能开销,节省了系统的资源。...因为没有多线程,在多核的机器上,也没办法实现并行执行。 参考: Node.js机制及原理理解初步 使用 libevent libev 提高网络应用性能 ---- 5....Java/Scala 有个库 akka,就是 Actor 模型的实现。而 golang 的协程机制则是 CSP 模型。

2.8K00

大数据技术学习路线

zookeeper应用案例–服务器上下线动态感知 zookeeper的数据一致性原理及leader选举机制 5、java高级特性增强 Java多线程基本知识 Java同步关键词详解 java并发包线程及在开源软件中的应用...-文件切片 maptask并行度设置 倒排索引 共同好友 6、federation介绍hive使用 Hadoop的HA机制 HA集群的安装部署 集群运维测试之Datanode动态上下线 集群运维测试之...基本语法 HQL-DML基本语法 HIVE的join HIVE 参数配置 HIVE 自定义函数Transform HIVE 执行HQL的实例分析 HIVE最佳实践注意点 HIVE优化策略 HIVE实战案例...编程 scala编程介绍 scala相关软件安装 scala基础语法 scala方法函数 scala函数式编程特点 scala数组集合 scala编程练习(单机版WordCount) scala面向对象...scala模式匹配 actor编程介绍 option偏函数 实战:actor的并发WordCount 柯里化 隐式转换 2、AKKA与RPC Akka并发编程框架 实战:RPC编程实战 3、Spark

1.1K20

使用Akka实现并发

这是需要花一个小时才完成了,但后来我意识到程序的运行时比创建程序花费的时间更长。因此,任务并不像看起来那么容易。那可以做些什么呢?当然,我意识到我需要并行完成任务。...Java的Monitors支持两种线程同步:互斥和合作。 通过虚拟机对象锁在Java中支持的互斥操作,使多个线程能够独立地处理共享数据而不会相互干扰。合作,是通过等待通知来实现的。...但我不能产生10万个线程来做到这一点。我需要类似线程的东西来限制线程数。只需一个简单的循环线程数就可以了。该解决方案看起来很好,在架构上很?, 然后我意识到我忘记了错误处理。...我找到了这样一个框架:AkkaAkka基于Erlang actor模型。如果您阅读上述问题的实现方式,则使用拉策略实现,消费者线程将在完成当前任务后执行新任务。所以我们需要等到生产者准备好了。...在Akka之后,我感受到了类似的快乐。Akka基于actors,所以actors是什么? Actors actors给你带来: 简单高级的并发并行抽象。 异步,非阻塞高性能的事件驱动编程模型。

1.4K20

SDP(0):Streaming-Data-Processor - Data Processing with Akka-Stream

akka-stream是一套功能更加完整强大的streaming工具库,那么如果以akka-stream为基础,设计一套能在集群环境里进行分布式多线程并行数据处理的开源编程工具应该可以是2018的首要任务...这部分我会在完成SDP项目后以akka-persistence为核心,通过akka-http,AMQPRabitMQ等技术来实现。  ...按一般的scalaakka的编程方式编写多线程分布式数据库管理软件时一是要按照akka代码模式,使用scala编程语言的一些较深的语法;二是需要涉及异步Async调用,集群Cluster节点任务部署及...而对于SDP用户来说,具备最基本的scala知识,无需了解akka、actor、threads、cluster,只要按照SDP自定义的业务处理流模式就可以编制多线程分布式数据处理程序了。...用户可以选择对业务功能进行拆分然后分派给不同的线程或不同的集群节点进行多线程并行或分布式的运算。SDP应该为用户程序提供多线程并行式、分布式的运算函数。

41810

线程框架模型总结

缺点: 缺点在于资源要求太高,系统中创建线程是需要比较高的系统资源的,如果连接数太高,系统无法承受,而且,线程的反复创建-销毁也需要代价。...多线程Reactor 在单线程Reactor模式基础上,做如下改进: 1. 将Handler处理器的执行放入线程,多线程进行业务处理。 2. 对于Reactor而言,可以仍为单个线程。...Actor是异步驱动,可以并行分布式部署及运行的最小颗粒。也就是说,它可以被分配,分布,调度到不同的CPU,不同的节点,乃至不同的时间片上运行,而不影响最终的结果。...加锁的开销很大,线程上下文切换的开销大 2. 加锁导致线程block,无法去执行其他的工作,被block无法执行线程,其实也是占据了一种系统资源 3....actor线程数解耦,可以创建很多actor绑定一个线程来进行处理,no lock,no block的方式能减少资源开销,并提升并发的性能 参考 1 https://developer.aliyun.com

72730

Elixir: 编程语言的未来

所以希望这个执行体能够尽量轻量级,很少的内存占用,很快的启动时间,很少的切换消耗,最好能在 IO 执行的时候自动让出计算资源。 并发并行 我们更多关注并发,但是比较少关注并行。...并发之 Fork-join 轻量级进程模型: Fork-join 创建自己的进程执行小粒度的任务。...所以,一般需要将异步 IO 操作放到另外的线程,FJ 只处理纯计算。 基于 ScalaAkka 既是这种模型。...所以,假如处理不当, Akka 的 Actor 很容易阻塞执行线程,如果执行线程线程被耗光,整个应用将会僵死在那里。而 Erlang 则没有这个问题。...元编程 DSL 扩展性 在语法级别的抽象封装更能提高开发效率。Elixr 中如何实现 DSL。 执行速度性能 这点并发并行模式、以及多核利用率密切相关。

2.9K40

scala快速入门系列【Actor并发编程】

我们学习scala Actor的目的主要是为后续学习Akka做准备。...[NOTE] scala在2.11.x版本中加入了Akka并发编程框架,老版本已经废弃。Actor的编程模型Akka很像,我们这里学习Actor的目的是为学习Akka做准备。...---- 2.创建Actor 创建Actor的方式Java中创建线程很类似,也是通过继承来创建。...使用方式 定义class或object继承Actor特质 重写act方法 调用Actor的start方法执行Actor [NOTE] 类似于Java线程,这里的每个Actor是并行执行的 示例...如果当前Actor没有接收到消息,线程就会处于阻塞状态 如果有很多的Actor,就有可能会导致很多线程都是处于阻塞状态 每次有新的消息来时,重新创建线程来处理 频繁的线程创建、销毁切换,会影响运行效率

52000
领券