首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

最浅显易懂的一篇:RCU机制

RCU(Read-Copy Update)是数据同步的一种方式,在当前的Linux内核中发挥着重要的作用。RCU主要针对的数据对象是链表,目的是提高遍历读取数据的效率,为了达到目的使用RCU机制读取数据的时候不对链表进行耗时的加锁操作。这样在同一时间可以有多个线程同时读取该链表,并且允许一个线程对链表进行修改(修改的时候,需要加锁)。RCU适用于需要频繁的读取数据,而相应修改数据并不多的情景,例如在文件系统中,经常需要查找定位目录,而对目录的修改相对来说并不多,这就是RCU发挥作用的最佳场景。 Linux内核源码当中,关于RCU的文档比较齐全,你可以在 /Documentation/RCU/ 目录下找到这些文件。Paul E. McKenney 是内核中RCU源码的主要实现者,他也写了很多RCU方面的文章。他把这些文章和一些关于RCU的论文的链接整理到了一起。http://www2.rdrop.com/users/paulmck/RCU/ 在RCU的实现过程中,我们主要解决以下问题: 1,在读取过程中,另外一个线程删除了一个节点。删除线程可以把这个节点从链表中移除,但它不能直接销毁这个节点,必须等到所有的读取线程读取完成以后,才进行销毁操作。RCU中把这个过程称为宽限期(Grace period)。 2,在读取过程中,另外一个线程插入了一个新节点,而读线程读到了这个节点,那么需要保证读到的这个节点是完整的。这里涉及到了发布-订阅机制(Publish-Subscribe Mechanism)。 3, 保证读取链表的完整性。新增或者删除一个节点,不至于导致遍历一个链表从中间断开。但是RCU并不保证一定能读到新增的节点或者不读到要被删除的节点。 宽限期

02
您找到你想要的搜索结果了吗?
是的
没有找到

Kubernetes之Pod生命周期

简括:首先kubectl向 API 接口发送指令,随后kube-api 会调度到我们的kubelet,这个调度过程是由我们的etcd完成的存储,随后kubelet操作CRI ,由CRI完成容器环境的初始化。在初始化的过程中会先启动一个pause的基础容器(谷歌制作的一个非常简洁的一个容器),pause容器负责pod中容器的网络已经存心卷共享的。随后,pause进行一个或者多个或者没有 init C 的初始化。init初始化完成了。会正常退出。退出码为0,如果非零为不正常,会再根据我们的重定策略去判断是否继续重新执行。多个初始化的容器做完了之后,会进入到主容器main C .main C 在刚运行的时候,我们可以允许它启动一条命令,或者执行一个脚本都可以。main C 在结束的时候也会执行一个STOP的命令,交代一下后事,这个过程中会有readiness和liveness的参与,readiness只有成功检测了。pod的状态才会ready或者running。当我们的主容器里面的进程和liveness中检测不一致时候,那么就可以执行对应的重启命令,或者删除。

01
领券