skynet 学习。。。

一、环境安装

centos:yum install -y git gcc readline-devel autoconf

二、获取代码以及编译

git clone https://github.com/cloudwu/skynet.git
cd skynet
centos&&ubuntu: make linux

三、回顾多核开发

并发模型 :CSP 模型 与 actor 模型

结论:多进程并发实体是进程,多线程并发实体是线程,go 并发实体是 goroutine(协程),actor 并发实体是actor(语言层面抽象出来的“进程”)。它们都是在隔离性(运行环境)与统一性(数据统一)之间作取舍平衡,而 actor模型在语言层面做运行环境的隔离,数据同步依然需要通过消息来同步。actor 模型是加强版的多进程解决方案,进程间通信由socket 转为指针的传递,从而通信变得更加可靠,同时多进程解决方案中,公共开源组件(消息队列,rpc,zookeeper)解决的问题,在 actor 模型中处理起来更方便。

四、回顾多核开发与 actor 模型

 actor 定义:
a) 用于并行计算
b) actor 是最基本的计算单元
c) 基于消息计算
d) actor 之间通过消息沟通并且相互隔离

五、skynet 中的 actor模型

1. 结构组成
a) 隔离的环境(内存块或 lua 虚拟机)
b) 消息队列
c) 回调函数
2. 实现
a) logger 服务 service-src/service_logger.c
b) lua 服务启动器 service-src/service_snlua.c

六、actor 运行以及消息调度
在这里插入图片描述

1. 消息队列
a) 全局消息队列
b) actor 消息队列
2. skynet 中锁的使用
a) 互斥锁

在这里插入图片描述

b) 自旋锁
i. worker 轮询消息队列

在这里插入图片描述

c) 读写锁
i. handle_storage
d) 条件变量
3. skynet 中线程
a) timer
b) socket
c) worker
i. “权重”来定制消费消息的数量(-1 消费一个,0 全部消费,1 消费一半)
ii. 休眠(条件变量)与唤醒(timer 和 socket)
d) monitor
i. 检查服务消息过载

七、skynet 网络 IO

1. 阻塞 io 和非阻塞 io
a) 阻塞在网络线程
b) io 操作(read/write)在没有数据到达时是否立刻返回
c) fd 决定了是否阻塞
2. 多路复用以及 epoll
3. epoll_event 与 actor 模型关联
4. 单线程读与多线程写
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值