Skynet学习笔记(二)整体架构

Skynet对象关系

  一个集群,可以有多个节点
  一个节点,对应一个进程,有IP和Port
  一个节点,可以有多个服务,一个服务就是一个lua虚拟机
  一个节点启动时,会初始化多个调度线程,用于调度多个服务的消息
  一个服务接受到一个消息时,会创建一个协程来处理这个消息(co_create)

Skynet消息调度

  每个在线客户的客户端,在skynet server上都对应有一个socket与其连接。
  一个socket在skynet内部对应一个lua虚拟机和一个客户特定消息队列(per client mq)。当客户特定消息队列中有消息时,该队列就会挂载到全局队列(global message queue)上,供工作线程(worker threads)进行调度处理。
  lua虚拟机本身没有多线程支持的,为了实现cpu的摊分,skynet实现上在一个线程运行多个lua虚拟机实例。而同一时间下,调度线程只运行一个服务实例。
图片

Skynet消息处理

  每个OS线程上创建一个lua虚拟机(lua_State),虚拟机上可以创建海量的coroutine。由coroutine对信息进行处理。
  Lua虚拟机状态是全局的,可被多个协程共享

当调用lua_newstate时,实际上分为两步:
  1.创建并初始化一个Lua虚拟机
  2.创建一个主线程运行于虚拟机中

  当调用lua_newthread时
  将在已有Lua虚拟机上,创建另一个协程执行环境
  该协程与已有协程共享虚拟机状态
图片

参考资料
https://blog.csdn.net/jxw167/article/details/54848150

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值