scala实现actor间同步和异步的信息传输

actor是scala一个比较好用的库,使并发编程更加便捷。

 

 

package actor_test

import scala.actors.Actor
import scala.actors.Actor._

// define a message
class FromXX(msg:String, idx:Int) {
	val msg_ = msg
	val idx_ = idx
}

object Stop

class XX(var count: Int, yy: Actor) extends Actor {
    def act() {
        for (idx <- 0 to count) {
            val tmp = new FromXX("MSG " + idx + " FROM XX", idx)
            //yy !? tmp // synchronous
            yy ! tmp // asynchronous
            Console.println("MSG " + idx + " SENT")
        }
        Console.println("XX HAS STOP SEND MSG TO YY!")
        yy ! Stop
    }
}

class YY extends Actor {
    def act() {
        while (true) {
            receive {
                case t:FromXX =>
                    Console.println("YY RECEIVE: " + t.msg_)
                    sender ! 0
                case Stop =>
                    Console.println("YY RECEIVE STOP ORDRE!")
                    exit()
            }
        }
    }
}

object test extends Application {
    val yy = new YY
    val xx = new XX(3, yy)
    xx.start
    yy.start
}

 

异步运行结果:

 

 

MSG 0 SENT

YY RECEIVE: MSG 0 FROM XX

YY RECEIVE: MSG 1 FROM XX

MSG 1 SENT

MSG 2 SENT

YY RECEIVE: MSG 2 FROM XX

MSG 3 SENT

YY RECEIVE: MSG 3 FROM XX

XX HAS STOP SEND MSG TO YY!

YY RECEIVE STOP ORDRE!

 

同步运行结果:

 

YY RECEIVE: MSG 0 FROM XX

MSG 0 SENT

YY RECEIVE: MSG 1 FROM XX

MSG 1 SENT

YY RECEIVE: MSG 2 FROM XX

MSG 2 SENT

YY RECEIVE: MSG 3 FROM XX

MSG 3 SENT

XX HAS STOP SEND MSG TO YY!

YY RECEIVE STOP ORDRE!

 

我们也可以看到actor的一些特性,

例如actor A发给actor B的消息,B必须是按顺序收到的。

参考

http://www.scala-lang.org/node/242

http://docs.scala-lang.org/overviews/core/actors.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值