第66讲:Scala并发编程实战初体验及其在Spark源码中的应用解析笔记
程序宏大时java并发编程变得非常复杂,
java并发编程的理念是:基于共享数据和加锁的线程模型
--若干程序访问共享数据,用监视器监控共享数据的访问。
synchronized
线程是动态的概念
写程序时要考虑每一时刻
java多线程同时访问一个加锁数据时易发生死锁
scala的并发编程:actor
与java实现方式完全不同,
actor不共享数据依赖消息传递
A传给B消息,B不停看收件箱。
B看到邮件后处理。
android框架中也有基于消息机制的并发模型。
scala原生就有基于消息机制的并发模型。
akka是基于actor的消息机制,非常好用。
避免死锁和资源争论。
问题:actor和线程是一一对应的吗?
通过这个案例我们可以了解scala是如何使用actor实现并发编程的。
程序宏大时java并发编程变得非常复杂,
java并发编程的理念是:基于共享数据和加锁的线程模型
--若干程序访问共享数据,用监视器监控共享数据的访问。
synchronized
线程是动态的概念
写程序时要考虑每一时刻
java多线程同时访问一个加锁数据时易发生死锁
scala的并发编程:actor
与java实现方式完全不同,
actor不共享数据依赖消息传递
A传给B消息,B不停看收件箱。
B看到邮件后处理。
android框架中也有基于消息机制的并发模型。
scala原生就有基于消息机制的并发模型。
akka是基于actor的消息机制,非常好用。
避免死锁和资源争论。
问题:actor和线程是一一对应的吗?
master和worker都是actor级别的,运行时master和worker都不断查看自己的邮箱。
实战案例:
object First_Actor extends Actor {
def act() {
for (i <- 1 to 10) {
println("Step : “ + i )
Thread.sleep(2000)
}
}
}
object Second_Actor extends Actor {
def act() {
for (i <- 1 to 10) {
println("Step Further : “ + i )
Thread.sleep(2000)
}
}
}
object Hello_Actor {
def main(args: Array[String]) {
First_Actor.start
/*注意这里是用.start而不是调用act方法*,下同/
Second_Actor.start
}
}
以上内容是从王家林老师DT大数据课程,
DT大数据微信公众账号:DT_Spark
scala第66讲视频观看链接:
http://yun.baidu.com/s/1pJ5jzHx#path=%252F
我的百度网盘共享内容:http://pan.baidu.com/s/1qWK9CMo