Scala的react、loop代码编程

消息传送的Actor一般都会使用线程,Actor越多,线程占的资源也越多。

Scala提供的reaction和loop可以提供Actor的重用,以减少资源占用,提高性能。

loop方式的代码:

package com.dt.scala.actor

import scala.actors.Actor
import scala.actors.Actor._
import java.net.InetAddress
import java.net.UnknownHostExeption

object NameResolver extends Actor{
  
  def act(){
    loop {
      react {
        case Net (name, actor) =>
          sender ! getIp(name)
          act
        case msg =>
          println("Unhandled 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]) {
    NameResolver.start
    NameResolver ! Net("www.baidu.com", self)
    
    println(self.receiveWithin(1000){case x => x})
  }
}

以上loop可改用reaction方法的代码:

    react {
      case Net (name, actor) =>
        sender ! getIp(name)
        act
      case "EXIT" => println("Name resolver exiting. ")
      case msg =>
        println("Unhandled message : " + msg)
        act
    }

利用再次调用act的方式。

代码参考DT大数据梦工厂团队王家林的授课内容。

信息来源于 DT大数据梦工厂微信公众账号:DT_Spark

视频:http://pan.baidu.com/s/1pJtEubL?qq-pf-to=pcqq.group

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值