Skynet的Actor对等调度:如何理解其独特的任务调度机制?
- 内容介绍
- 文章标签
- 相关推荐

文章浏览阅读707次。
一、 actor对等调度
唉,说起Skynet的actor调度,我这老程序员也真是头疼。为啥呢?主要原因是它跟那些传统的线程池、协程啥的dou不太一样,有点儿…独特。简单Skynet的核心理念就是“suo有actordou是平等的”。什么意思呢?就是说每个actordou有机会被施行, 我给跪了。 没有优先级之分。这种平等体现在资源分配上,也体现在调度策略上。想想kan,以前我们Zuo多线程编程,总得搞个锁啊、队列啊,防止数据竞争啥的。dan是在Skynet里这些问题被大大简化了!当然啦,简化不是说没有了问题,而是把问题转移到了lua虚拟机层面去处理。
不过说实话吧, Skynet的设计哲学有点像早期互联网的精神:开放、平等、共享。每个actordou觉得自己hen重要, douNeng独立完成任务, 却又需要和其他actor协作才Neng构建一个完整的系统。这种感觉... 挺怀旧的,出道即巅峰。。
二、 调度流程源码分析
要理解Skynet的调度机制,就得扒一扒源码了。别怕!我尽量讲得通俗易懂一点。
2.1、thread_worker
thread_worker是线程池中的工作线程函数。它就像一个勤劳的小蜜蜂,不停地从消息队列中取出消息, 勇敢一点... ran后交给相应的actor处理。这个函数是整个调度的入口点之一。
2.2、 struct skynet_context
skynet_context结构体包含了actor运行所需的suo有信息:lua虚拟机环境、消息队列等等。你可yi把它想象成一个actor的工作台,suo有的工具和材料dou放在上面了,一针见血。。
2.3、skynet_context_message_dispatch
这个函数负责将消息分发给对应的actor的处理函数。它会根据消息类型和目标地址找到正确的处理函数并调用它,你看啊...。

文章浏览阅读707次。
一、 actor对等调度
唉,说起Skynet的actor调度,我这老程序员也真是头疼。为啥呢?主要原因是它跟那些传统的线程池、协程啥的dou不太一样,有点儿…独特。简单Skynet的核心理念就是“suo有actordou是平等的”。什么意思呢?就是说每个actordou有机会被施行, 我给跪了。 没有优先级之分。这种平等体现在资源分配上,也体现在调度策略上。想想kan,以前我们Zuo多线程编程,总得搞个锁啊、队列啊,防止数据竞争啥的。dan是在Skynet里这些问题被大大简化了!当然啦,简化不是说没有了问题,而是把问题转移到了lua虚拟机层面去处理。
不过说实话吧, Skynet的设计哲学有点像早期互联网的精神:开放、平等、共享。每个actordou觉得自己hen重要, douNeng独立完成任务, 却又需要和其他actor协作才Neng构建一个完整的系统。这种感觉... 挺怀旧的,出道即巅峰。。
二、 调度流程源码分析
要理解Skynet的调度机制,就得扒一扒源码了。别怕!我尽量讲得通俗易懂一点。
2.1、thread_worker
thread_worker是线程池中的工作线程函数。它就像一个勤劳的小蜜蜂,不停地从消息队列中取出消息, 勇敢一点... ran后交给相应的actor处理。这个函数是整个调度的入口点之一。
2.2、 struct skynet_context
skynet_context结构体包含了actor运行所需的suo有信息:lua虚拟机环境、消息队列等等。你可yi把它想象成一个actor的工作台,suo有的工具和材料dou放在上面了,一针见血。。
2.3、skynet_context_message_dispatch
这个函数负责将消息分发给对应的actor的处理函数。它会根据消息类型和目标地址找到正确的处理函数并调用它,你看啊...。

