【skynet】消息传递过程

一、具体流程:
每次有个请求,处理线程把请求的消息放在 全局队列global queue里面,每次线程pop一个次级queue的消息出来,再用协程去处理具体的消息(等待协程处理完回调,等次级queue 的消息处理完再返回 global queue 再给原来调用这个服务的请求)如图示
skynet消息传递
二、代码分析:
1、消息传递:

  • global queue 包含(次级queue)
  • skynet.send(插入次级queue) 【协程处理消息】
  • skynet_context_push(mq取出次级queue,插入消息)
  • global queue 的 push 操作 +了自旋锁【多线程】

2、创建thread:skynet_start.c的start
每个worker都有一个weight值,pop出n条消息(受weight值影响):一次性消费多少条次级queue的消息
线程安全:避免服务重复调用,如何是连续两个相同的服务请求?
1)这个次级消息队列要从全局消息队列里取
2)虽然一个服务的callback函数,只能在一个thread内被调用,但是在多个thread中,可以向同一个次级消息队列push消息,即便是该次级消息队列所对应的服务正在执行callback函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值