scala学习八:scala的actor

本文深入探讨Scala的Actor系统,从创建和使用Actor开始,详细阐述Actor的消息传递机制,特别是同步消息和Future的运用。同时,提供了Actor的最佳实践,包括避免公用状态、保持actor简单、在消息中包含上下文数据等,旨在提升程序效率和稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

scala学习八:scala的actor

标签(空格分隔): scala


[Toc]

一,actor的创建和使用

001.PNG-60.9kB

import scala.actors._
//Actor是一个抽象类
class HiActor extends Actor{
    def act():Unit ={
        //处理消息
        while(true){
            receive{
                case "hi" => println("hi actor")
                case "hello" => println("hello actor")
            }
        }
    }
}

object HiActor{
    def main(args: Array[String]){
        val actor1=new HiActor
        actor1.start()
        //! 方法名称
        actor1 !"hi"
    }
}

二,Actor的消息机制

001.PNG-29.4kB


import scala.actors._

case class MyMessage(inputdata:Int,outputChannel:OutputChannel[Int])

class MyComputer extends Actor{
    def act():Unit ={
        //处理消息
        while(true){
            receive{
                case MyMessage(inputdata,outputChannel) =>{
                    val ret=inputdata*10
                    outputChannel !ret
                }
            }
        }
    }
}

object MyComputer{
    def main(args: Array[String]){
        val computor=new MyComputer
        computor.start()

        val channel=new Channel[Int]()
        MyMessage msg=new MyMessage(10,channel)

        computer ! msg

        channel.receive{
            case 110 =>println("the result is correct!")
        }

    }
}

三,同步消息和Future

同步消息

import scala.actors._
//Actor是一个抽象类
//处理同步消息的时候,处理方会返回一个结果给发送发
//同步消息会阻塞当前线程的执行,知道收到返回的结果
class HiActor extends Actor{
    def act():Unit ={
        //处理消息
        while(true){
            receive{
                case "hi" => {
                    println("hi actor")
                    reply("success")
                }
                case "hello" => println("hello actor")
            }
        }
    }
}

object HiActor{
    def main(args: Array[String]){
        val actor1=new HiActor
        actor1.start()
        //! 方法名称
        val ret=actor1 !?"hi"
        ret match{
            case "success" =>{
                println("success")
            }
        }
    }
}

001.PNG-20.4kB

四,Actor使用最佳实践

1,避免使用公用状态:尽量不要使用对象以外的的数据
2,不要调用actor方法
3,保持每个actor的简单:actor尽量只做一件事,保持程序的简洁和高效
4,将上下文数据包含在消息中
5,最小化给发送方回复:减小网络开销
6,最小化阻塞调用
7,尽量使用react
8,建立失败区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

forrestxingyunfei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值