文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档> Programming in Scala ch30 (Actor..

Programming in Scala ch30 (Actor..

时间:2010-09-27  来源:jamesqiu

scala> self ! "hello"

scala>  self.receive { case x => x }

res9: Any = hello

30.4        线程复用以提高性能(P613)

由于react方法不需要返回,其实现就无需保存当前线程的调用栈,所以当前线程可以被下一个唤醒的actor所使用。该方法很高效,如果程序中所有actor都使用react方法而不是receive方法,只需一个线程就可以处理程序所有的actor(如果计算机是多核CPU,actor就会生成足够多的线程以充分利用CPU所有的核)。

  import actors._, actors.Actor._, java.net._

  object NameResolver extends Actor { // 得到域名对应的ip

    def act() {

      react {

        case (name: String, actor: Actor) => actor ! getIp(name); act()

        case "EXIT" => println("Name resolver exiting.")

        case msg => println("Unhandled message: " + msg); act()

      }

    }

    def getIp(name: String): Option[InetAddress] = {

      try { Some(InetAddress.getByName(name))

      } catch { case _: UnknownHostException => None }

    }

  }

scala> self.receiveWithin(0) { case x => x }

res3: Any = Some(www.scala-lang.org/128.178.154.159)

scala> NameResolver ! ("wwwwww.scala-lang.org", self)

scala> self.receiveWithin(0) { case x => x }        

res5: Any = None

  def act() {

    loop {

      react {

        case (name: String, actor: Actor) => actor ! getIp(name)

        case msg => println("Unhandled message: " + msg)

      }

    }

相关阅读 更多 +
排行榜 更多 +
幸存者的命运

幸存者的命运

飞行射击 下载
精英战区3d

精英战区3d

飞行射击 下载
货运猎人

货运猎人

飞行射击 下载