加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 什么是事件驱动的并发?

发布时间:2020-12-16 19:18:16 所属栏目:安全 来源:网络整理
导读:我开始学习 Scala和函数式编程.我正在阅读这本书!编程scala:解决 Java虚拟机上的多核复杂性“.在第一章我看到了事件驱动的并发和Actor模型这个词.在我继续阅读本书之前,我希望有一个关于事件驱动并发或Actor模型的想法. 什么是事件驱动的并发性,它与Actor
我开始学习 Scala和函数式编程.我正在阅读这本书!编程scala:解决 Java虚拟机上的多核复杂性“.在第一章我看到了事件驱动的并发和Actor模型这个词.在我继续阅读本书之前,我希望有一个关于事件驱动并发或Actor模型的想法.

什么是事件驱动的并发性,它与Actor模型有什么关系?

解决方法

事件驱动的编程模型涉及注册在给定事件触发时要运行的代码.一个例子是,而不是调用从数据库返回一些数据的方法:

val user = db.getUser(1)
println(user.name)

您可以在数据准备就绪时注册要运行的回调:

db.getUser(1,u => println(u.name))

在第一个例子中,没有发生并发;当前线程将阻塞,直到db.getUser(1)从数据库返回数据.在第二个示例中,db.getUser将立即返回并继续执行程序中的下一个代码.与此同时,回调u => println(u.name)将在未来某个时候执行.

有些人更喜欢第二种方法,因为它并不意味着内存饥饿线程不必要地等待缓慢的I / O返回.

Actor模型是一个如何使用事件驱动概念来帮助程序员轻松编写并发程序的示例.

从超高级别开始,Actors是定义一系列事件驱动消息处理程序的对象,当Actor接收消息时会触发这些处理程序.在Akka中,Actor的每个实例都是单线程的,但是当许多这些Actors放在一起时,它们会创建一个具有并发性的系统.

例如,Actor A可以并行地向Actor B和C发送消息.演员B和C可以将消息发送回Actor A.演员A将有消息处理程序来接收这些消息并按照需要运行.

要了解有关Actor模型的更多信息,我建议您阅读Akka文档.写的很好:http://doc.akka.io/docs/akka/2.1.4/

关于事件驱动并发的网络上还有很多关于事件驱动并发的好文档,我们比我在这里写的要详细得多. http://berb.github.io/diploma-thesis/original/055_events.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读