网站首页 > 技术教程 正文
专注分享Linux后台服务器开发,包括C/C++,Linux,Nginx,Skynet,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体服务器,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等等技术,文末领取资料福利包!
一、环境安装
1. centos
yum install -y git gcc readline-devel autoconf
2. ubuntu
apt-get install git build-essential readline-dev autoconf
apt-get install git build-essential libreadline-dev autoconf (for ubuntu 16.04)
3. mac
brew install git gcc readline autocon
二、获取代码以及编译
git clone https://github.com/cloudwu/skynet.git
cd skynet
centos&&ubuntu:
make linux
mac:
make macosx
三、关于 win10
1. 开启开发者模式
系统设置->更新和安全->针对开发人员->开发者模式
2. 启用 linux 子系统组件
系统设置->应用->程序和功能->启动或关闭 windows 功能->适用于 linux 的 windows 子系
统->重启更新
3. 安装 linux 子系统
windows 应用商店->Ubuntu->修改 sources.list
https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
选择 18.04LTS
4. 在 win10 中 vscode 安装 wsl 插件
5. 在子系统 Ubuntu 中添加 skynet 源码
四、多核开发与 actor 模型
1. 多进程
a) 消息队列
i. 协议问题
ii. 断线重连
iii. 进程启动顺序问题
iv. 负载均衡问题
v. 数据同步问题
b) RPC
i. 两个系统保持同步问题
c) zk
i. 配置项管理问题
ii. 集群管理
iii. 统一命名问题
iv. 状态同步问题
v. 分布式锁问题
d) 拆分
i. 功能拆分
ii. 热点拆分
2. 多线程
3. 并发模型 :CSP 模型 与 actor 模型
4. 结论:多进程并发实体是进程,多线程并发实体是线程,go 并发实体是 goroutine(协
程),actor 并发实体是 actor(语言层面抽象出来的“进程”)。它们都是在隔离性(运行环
境)与统一性(数据统一)之间作取舍平衡,而 actor 模型在语言层面做运行环境的隔离,
数据同步依然需要通过消息来同步。actor 模型是加强版的多进程解决方案,进程间通信由
socket 转为指针的传递,从而通信变得更加可靠,同时多进程解决方案中,公共开源组件(消
息队列,rpc,zookeeper)解决的问题,在 actor 模型中处理起来更方便。
5. 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) 条件变量
i. worker 线程的休眠
3. skynet 中线程
a) timer
b) socket
c) worker
i. “权重”来定制消费消息的数量(-1 消费一个,0 全部消费,1 消费一半)
ii. 休眠(条件变量)与唤醒(timer 和 socket)
d) monitor
i. 检查服务消息过载
七、lua 与 c 接口编程
1. lua 数据类型
a) boolean,number,string,function,userdata,lightuserdata,thread,table(__index,__newind
ex,__gc,__len),nil
2. table
a) table.concat
b) table.insert
c) table.remove
d) table.sort
e) hash 表来使用
3. 元表
a) 定制行为 __index, __newindex
b) 只有 table 和 userdata 对象有独自的元表,其他类型只有类型元表
c) 只有 table 可以在 lua 中修改设置元表
d) userdata 只能在 c 中修改设置元表,lua 中不能修改 userdata 元表
4. 协程
a) 一段独立的执行线程
b) 一个 lua 虚拟机中同时只能有一个协程在运行
c) 目的:写的时候是同步的书写方式,而实际内部是异步非阻塞的实现
5. 闭包
a) 表现
i. 函数内部可以访问函数外部的变量
ii. lua 文件是一个匿名函数
b) 实现
i. c 函数以及绑定在 c 函数上的 upvalues(上值)
c) 用 lua_pushcclosure 用来创建 c 闭包
d) 通过 lua_upvalueindex 伪索引来获取上值
6. 虚拟栈
a) 栈上的都是 lua 类型的值
b) lua 调用 c 的函数都得到一个新的栈,独立于之前的栈
c) c 调用 lua,每一个协程都有一个栈,没有显示创建那么就是主协程上一个栈
7. 注册表
a) 预定义的表,用来保存任何 c 代码想保存的 lua 值
b) 使用 LUA_REGISTRYINDEX 来索引
八、skynet 网络 IO
1. 阻塞 io 和非阻塞 io
a) 阻塞在网络线程
b) io 操作(read/write)在没有数据到达时是否立刻返回
c) fd 决定了是否阻塞
2. 多路复用以及 epoll
3. epoll_event 与 actor 模型关联
4. 单线程读与多线程写
PS: skynet 实际使用的状态切换来实现的 epoll_wait 后的事件遍历。这里为了在一个循
环中将 skynet 网络功能演示。
九、actor 通信细节
1. skynet.send/skynet.call
2. skynet.redirect
3. skynet.response
4. skynet.ret
【文末福利】:小编整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以私信【1】加群找群主免费领取~更多免费直播技术点击免费即可开始学习:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂
猜你喜欢
- 2024-10-13 推荐一个小工具:flog(推荐一个好用的)
- 2024-10-13 Docker 和 Kubernetes 从听过到略懂:给程序员的旋风教程
- 2024-10-13 HTML5如何实现视频直播功能(html video直播)
- 2024-10-13 直播大火,H5直播技术你知道吗?H5直播方案大讲解!
- 2024-10-13 简单聊聊实时视频rtmp(rtsp rtmp)
- 2024-10-13 如何快速的开发一个完整的iOS直播App
- 2024-10-13 Mac安装PHP开发环境(mac 开发php)
- 2024-10-13 Mac M1芯片电脑Java开发环境准备(java开发环境)
- 2024-10-13 完整的iOS直播App——搭建直播服务器
- 2024-10-13 Mac 基于HTTP方式访问下载共享文件,配置共享服务器
你 发表评论:
欢迎- 最近发表
-
- Oracle 在其新的 Linux 内核中引入了热补丁功能
- CentOS 7.6下安装Oracle 11.2.0.4
- ORACLE体系 - 2(oracle体系讲解)
- ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务
- Hadoop自学系列集(二) ---- CentOS下安装JDK
- 如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 搭建Oracle数据库服务器(oracle服务器创建用户)
- OGG同步到Kafka(oggforbigdata到kafka)
- oracle是什么软件?(oracle是干什么用的)
- 脚本化修改Oracle用户的密码以及执行sql(增删改查等)
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)