Libco
Tannin724
这个作者很懒,什么都没留下…
展开
-
Libco源码分析(三):时间轮的设计
时间轮是Libco中管理超时事件的定时器,在这之前先介绍一下定时器。常用的定时器数据结构有:链表:redis中的定时器是同链表实现的,时间复杂度为On,性能很差,但是redis中的超时时间只有一个所以被退化为指针。堆:堆顶是最近的超时事件,时间复杂度为logn,性能比链表较好,但是不能支持随机删除。红黑树:最左边的节点为最小超时事件,时间复杂度为logn。时间轮:时间轮本质是由数组实现,每个下标代表一个时间刻度,通过指针的移动代表时间流逝,因为是用数组,所以时间复杂度为O1,Linux内核也通原创 2020-08-05 10:58:27 · 216 阅读 · 0 评论 -
Libco源码分析(二):底层协程切换的原理
涉及文件:coctx_swap.Scoctx.cppcoctx.h协程的概念协程的提出是对标线程的,首先要了解为什么会有协程,他是用来解决什么的。这里主要聊一些很多人对于协程的误区。了解过协程的都知道协程是比线程更轻量级的存在,线程的切换是在内核态,而协程的切换是在用户态。既然协程切换更快,那是不是不用线程都用协程好呢,那为什么Java语言没有对协程的支持?实际上协程解决的问题并不是程序执行的效率问题,而是用来将异步的代码转换为同步逻辑的代码。如果用过Asio,你肯定会被那异步的逻辑恶心到,读原创 2020-06-26 13:50:27 · 410 阅读 · 0 评论 -
Libco源码分析(一)
自从拿了腾讯实习offer后就没有再学习了,今天打算重新开始学习,打算将我寒假学习协程方面的知识记录下来,也为后面秋招做准备。Libco源码地址:Libco接下来分六个章节从源码角度介绍Libco。底层协程切换的原理时间轮的设计协程原语的设计协程的调度协程的同步一些零碎的功能然后再根据我对Libco的理解再进行一些拓展。网络库的封装实现类似Golang中Channel用于协程间通讯实现一个类似Golang中select用于配合Channel实现无栈协程感谢Libco,如果原创 2020-06-09 18:31:36 · 525 阅读 · 0 评论