【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函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章