ET框架学习之CoroutineLockComponent协程锁剖析

一、背景介绍

最近对ET的深度学习,记录学习过程遇到一些比较啃的硬骨头,也为后面回顾记录一些笔记。协程锁是一种与传统锁不一样的实现,功能一样都是防止某段代码并发执行。ET的协程锁是一种更轻量级的自我实现lock机制,深度学习CoroutineLockComponent能够更好理解lock技术和理解并发原理。

二、CoroutineLockComponent的数据结构

在这里插入图片描述

  • 从CoroutineLockComponent Instance可以看出该类是一个单例,为整个框架服务。
  • list是不同的类型的协程锁列表,项目都有很多控制并发的代码块,为每个块定义不同的类型,从而有很多的协程锁。
  • CoroutineLockQueueType类中存了一个字典数据 Dictionary<long, CoroutineLockQueue> dictionary,key为long类型的协程锁type,CoroutineLockQueue为了具体某个类型的锁当前并发执行的个数列表。
  • nextFrameRun表示下帧需要执行的锁数据,后面重点介绍。
  • timers表示加入到锁管理器的所有的协程锁数据,key是时间即超时时间,value(CoroutineLockTimer)即实际的锁数据。该字典是一个排序好的SortedDictionary,提高timers的遍历访问效率。
  • timeOutIds所有超时应该触发的协程锁。
  • idGenerator内部管理的数据ID。
  • minTime当前协程锁数据timers中超时时间最短那个。也就是说timers最先执行的时间,如果当前时间比minTime这个时间小说明当前的超时队列不会有任何锁超时被执行。
  • timeNow当前时间。

二、CoroutineLockQueueType的数据结构

1、CoroutineLockQueueType基本数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 从上面的数据结构定义可以看出CoroutineLockQueueType是一个字典类型,key是一个long类型数据即所有的锁数据类型
    在这里插入图片描述
    自定义其他的锁类型可以在该类里面添加,在CoroutineLockComponentAwakeSystem初始化的时候会创建 List list数据,并且创建各个协程类型管理对象。
  • CoroutineLockQueue是一个队列,里面存了CoroutineLockInfo,表示具体某个协程类型的实际锁数量,即当前代码块并发执行的个数。
  • CoroutineLockInfo里面存了一个时间Time,以及ETTask Tcs,当前一个协程锁执行完成设置下一个Tcs的完成标签即激活下一个协程锁执行。

三、CoroutineLockComponent的执行流程

1. 添加协程锁

在这里插入图片描述
2. 协程锁超时逻辑判断
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2. 激活下一个协程锁
在这里插入图片描述

  • coroutineLockQueueType.Remove(key)把对应协程锁类型从dictionary里面移除并且情况CoroutineLockQueue队列。
  • 在CoroutineLockDestroySystem中如果是当前协程锁自然正常执行则也会 把自己添加到RunNextCoroutine中即:
    CoroutineLockComponent.Instance.RunNextCoroutine(self.coroutineLockType, self.key, self.level + 1);
    在Update中会正常释放
    那在
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ET框架

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值