包阅导读总结
1. `PayPal`、`虚拟机`、`交易`、`Actor`、`System`
2. 这段 Go 语言代码示例展示了一个包含多个`Actor`的`System`,通过消息传递机制处理数据。创建了`Actor`和`System`结构体,实现了`Actor`的处理消息和运行方法,以及`System`的发送消息功能,在`main`函数中创建了系统并发送消息。
3.
– 定义了`Actor`结构体,包含状态和邮箱通道。
– `NewActor`函数用于创建`Actor`实例。
– `ProcessMessage`方法处理消息并更新状态。
– `Run`方法从邮箱接收消息并处理。
– 定义了`System`结构体,包含`Actor`切片。
– `NewSystem`函数创建指定数量的`Actor`并启动运行。
– `SendMessage`函数根据消息选择`Actor`发送。
– 在`main`函数中
– 创建了包含 3 个`Actor`的系统。
– 启动 5 个协程发送消息。
– 使用`WaitGroup`等待所有协程完成。
思维导图:
文章地址:https://mp.weixin.qq.com/s/5QXt2lxEtF7m0jWoPzKoFA
文章来源:mp.weixin.qq.com
作者:Neo??Kim
发布时间:2024/8/21 10:31
语言:中文
总字数:2923字
预计阅读时间:12分钟
评分:89分
标签:支付系统,虚拟机,Actor模型,Akka框架,并发处理
以下为原文内容
本内容来源于用户推荐转载,旨在分享知识与观点,如有侵权请联系删除 联系邮箱 media@ilingban.com
package main
import (
"fmt"
"sync"
)
type Actor struct {
state int
mailbox chan int
}
func NewActor(initialState int) *Actor {
return &Actor{
state: initialState,
mailbox: make(chan int),
}
}
func (a *Actor) ProcessMessage(message int) {
fmt.Printf("Actor %d processing message: %d\n", a.state, message)
a.state += message
}
func (a *Actor) Run(wg *sync.WaitGroup) {
defer wg.Done()
for {
message := <-a.mailbox
a.ProcessMessage(message)
}
}
type System struct {
actors []*Actor
}
func NewSystem(numActors int) *System {
system := &System{}
for i := 1; i <= numActors; i++ {
actor := NewActor(i)
system.actors = append(system.actors, actor)
go actor.Run(nil)
}
return system
}
func (s *System) SendMessage(message int) {
actorIndex := message % len(s.actors)
s.actors[actorIndex].mailbox <- message
}
func main() {
actorSystem := NewSystem(3)
var wg sync.WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1)
go func(message int) {
defer wg.Done()
actorSystem.SendMessage(message)
}(i)
}
wg.Wait()
}