演示样例代码及凝视:
//scala并发编程中的react和loop,共同特点:
//通过线程存用的方式让性能有所提升。
//Actor本身的运行,被actor子系统管理的时候,会有一个或者多个远程的线程让当前的actor使用
//普通情况下每一个Actor都有自己的线程。仅仅有有自己的线程时,我们的Actor中的actor方法才会运行。
//可是,这样线程的开销会很大,所以为了共用线程,一个actor使用多个线程后,我们不想马上回收,我们想共用。
//scala给我们提供了两个方法:react方法和loop方法
//react和receive事实上都是偏函数
object NameResolver extends Actor{
def act(){
/*react{//不返回详细的内容
case Net(name,actor)=>
sender ! getIp(name)
act
case "EXIT" => println("Name resolver exiting.")
case msg =>
println("Unhandled message : "+msg)
act
}*/
loop{//反复运行一个代码块
react{
case Net (name,actor) =>
actor ! getIp(name)
case msg =>
println("Unhadled message" + msg)
}
}
}
def getIp(name : String) : Option[InetAddress]= {
try{
println(InetAddress.getByName(name))
Some(InetAddress.getByName(name))
}catch{
case _ : UnknownHostException => None
}
}
}
case class Net(name :String,actor:Actor) object Actor_More_Effective{
def main(args: Array[String]): Unit = {
NameResolver.start
NameResolver ! Net("www.baidu.com",self) println(self.receiveWithin(1000){case x=>x})
}
}
相关来源:DT大数据梦工厂。微信公众号是DT_Spark,每天都会有大数据实战视频公布,请您持续学习。
相关资料:
scala深入浅出实战经典(1-64讲)完整视频、PPT、代码下载:
百度云盘:http://pan.baidu.com/s/1c0noOt6
腾讯微云:http://url.cn/TnGbdC
360云盘:http://yunpan.cn/cQ4c2UALDjSKy 訪问password45e2