skynet的内容学习笔记01

 

skynet的内容学习笔记01_第1张图片 

 skynet的内容学习笔记01_第2张图片

skynet的内容学习笔记01_第3张图片

强一致性和最终一致性。

 最终一致性 强调的是通知

 强一致性 强调的处理结果

 

zookeeper 服务协调问题

1  配置项目管理

2  集群管理 redis 哨兵

 

skynet的内容学习笔记01_第4张图片

skynet的内容学习笔记01_第5张图片

 

skynet的内容学习笔记01_第6张图片

 skynet的内容学习笔记01_第7张图片

 

skynet的内容学习笔记01_第8张图片

redis使用setnx()实现分布式锁。 +  过期时间 (执行逻辑时间)

setnx(key,唯一标识,timeout); 

 

skynet的内容学习笔记01_第9张图片

 问题。如果中间服务断了,对链路不敏感,需要用超时时间或是另外的进程或线程轮询。

zookeeper可以解决此问题。如果其中一个服务挂了,马上会知道。是完备的实现分布式锁问题

skynet的内容学习笔记01_第10张图片

 skynet的内容学习笔记01_第11张图片

 skynet的内容学习笔记01_第12张图片

多进程 隔离性强,统一性差

多线程特点 锁类型,应用,锁粒度,隔离性关,统一性强

 

skynet的内容学习笔记01_第13张图片

 平衡隔离性和统一性的问题

多进程 隔离性强,统一性差 进程

多线程特点 锁类型,应用,锁粒度,隔离性关,统一性强 线程

a)消息队列

b)pipe

c)锁

 

并发模型

1 actor 模型 erlang (语言层面),skynet 用框架来解决actor

从语言层面抽象出进程的概念。隔离性强,统一性差

1) 用于并行计算

2) actor是最基本的计算单元

3) 基于消息计算      skynet的回调函数

4)actor相互隔离  (内存块+lua虚拟机)  通过消息进行沟通

actor模型示意图

skynet的内容学习笔记01_第14张图片

 

2 csp go 语言为代表 goroutine  以协程为并发实体

 

3 skynet actor

skynet的内容学习笔记01_第15张图片

 

actor组成

1 隔离的环境

2 回调函数 (消费我们消息队列的)

3 消息队列

skynet c语言 + lua  

1 c actor 服务 

__init

__create

__release

__callback (回调函数)

 

2 lua actor 服务

  lua虚拟机

 

actor的运行环境及消息调度

skynet的内容学习笔记01_第16张图片

 

1 全局消息队列 存储的是, 有消息的actor消息队列指针 

2 actor消息队列 存储的是专属actor的消息队列

  worker线程 

   1) 取出actor消息队列

   2)取出消息

   3)通过回调函数(消息) 执行actor

3 消息的生产和消费

   1)actor之间消息生产

   2)网络中的消息生产

   3)定时器生产

  消费通过callback

 

隔离环境实现

skynet的内容学习笔记01_第17张图片

skynet的内容学习笔记01_第18张图片 skynet的内容学习笔记01_第19张图片

 

 

 

skynet的内容学习笔记01_第20张图片

lua 隔离环境

 

skynet的内容学习笔记01_第21张图片

 

skynet的内容学习笔记01_第22张图片

skynet的内容学习笔记01_第23张图片

 

skynet的内容学习笔记01_第24张图片

skynet的内容学习笔记01_第25张图片 

互斥锁会做切换,会执行其它任务

自旋锁,不会做切换,一直等到可用,在原地方死等 ,适应用简单,不复杂的业务逻辑

skynet的内容学习笔记01_第26张图片

 

读写锁

1 读状态加锁,为共享锁。其它线程以读的模式进入临界区,不会发生阻塞,直接访问

2 写状态加锁,此时为独享锁 ,其它线程访问此临界区,都会发生阻塞。 等待

适应用,读远大于写的情景中

 

条件变量

 skynet的内容学习笔记01_第27张图片

虚假唤醒问题

while(条件不满足) 可以解决虚假唤醒  

如果用 if (条件满足)  会产生虚假唤醒

 

代码启动

skynet的内容学习笔记01_第28张图片

 

 skynet的内容学习笔记01_第29张图片

 

skynet的内容学习笔记01_第30张图片

 

skynet的内容学习笔记01_第31张图片

skynet的内容学习笔记01_第32张图片

 

skynet的内容学习笔记01_第33张图片

 

 

 skynet的内容学习笔记01_第34张图片

skynet的内容学习笔记01_第35张图片 

 

skynet的内容学习笔记01_第36张图片

 

权重的设定,充分的利用我们的cpu,打乱cpu线程消息速度。因为不能确保每个actor都是一样量的数据,让其满载负荷运行

skynet的内容学习笔记01_第37张图片

skynet的内容学习笔记01_第38张图片

 

 1 从消息队列取消息,并通过回调函数调用,自旋锁 (粒度小,减少切换) 几个核心几个worker线程

   woker执行我们的逻辑,尽量不要休眠,不要切换。

  并发性,做逻辑比较强

2 当没有消息的时候,通过条件变量 休眠

3 唤醒只有在网络和定时器时才产生

skynet的内容学习笔记01_第39张图片

 

skynet的内容学习笔记01_第40张图片

skynet的内容学习笔记01_第41张图片

你可能感兴趣的:(socket)