Golang Mutex源码分析
Golang Mutex源码分析Golang 中的Mutex 主要借助了 CAS 指令 + 自旋 + 信号量
CAS 指令比较并交换(compare and swap, CAS),是原子操作的一种,可用于在多线程编程中实现不被打断的数据交换操作,从而避免多线程同时改写某一数据时由于执行顺序不确定性以及中断的不可预知性产生的数据不一致问题。 该操作通过将内存中的值与指定数据进行比较,当数值一样时将内存中的数据替换为新的值。
CAS 缺点
CAS在共享资源竞争比较激烈的时候,每个goroutine会容易处于自旋状态,影响效率,在竞争激烈的时候推荐使用锁。
无法解决ABA问题
ABA问题
进程P1读取了一个数值AP1被挂起(时间片耗尽、中断等),进程P2开始执行P2修改数值A为数值B,然后又修改回AP1被唤醒,比较后发现数值A没有变化,程序继续执行。
自旋是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。
信号量信号量的概念是计算机科学家 Dijkstra (Dijkstra算法的发明者)提出来的 ...
Golang sync 包分析
第一章 Golang sync 包的相关使用方法一、锁的基本概念及使用整个包都是实现Locker接口
type Locker interface{ Lock() UnLock()}
该接口只有两个方法,Lock() 和UnLock() 。注意:该包下的对象时候过后不可进行复制
为什么需要锁?首先,我们都知道在并发 的情况下,多线程或者协程同时修改一个变量的时候时,可能会出现如下情况:
package mainimport ( "fmt" "sync" "time")func main() { var a = 0 // 启动 100 个协程,需要足够大 // var lock sync.Mutex for i := 0; i < 100; i++ { go func(idx int) { // lock.Lock() // defer lock.Unlock() ...
go语言GMP模型分析
Golang 调度器GMP原理分析Golang调度器来源单进程时代不需要调度器我们都知道,一切的软件都是跑在操作系统上。然而真正干活的其实是CPU。早期的操作系统每个程序就是一个进程,直到一个程序结束,才能进行下一个进程。这就是“单进程时代”。
早期的单进程操作系统,面临 2 个问题:
单一的执行流程,计算机只能一个任务一个任务处理。
进程阻塞所带来的 CPU 时间浪费。
那么能不能有多个进程来宏观一起来执行多个任务呢?
后来操作系统就具有了最早的并发能力:**多进程并发,当一个进程阻塞的时候,切换到另外等待执行的进程 **,这样就能尽量把 CPU 利用起来,CPU 就不浪费了。
多进程/线程时代有了调度器的需求
在多进程 / 多线程的操作系统中,就解决了阻塞的问题,因为一个进程阻塞 cpu 可以立刻切换到其他进程中去执行,而且调度 cpu 的算法可以保证在运行的进程都可以被分配到 cpu 的运行时间片。这样从宏观来看,似乎多个进程是在同时被运行。
但新的问题就又出现了,进程拥有太多的资源,进程的创建、切换、销毁,都会占用很长的时间,CPU 虽然利用起来了,但如果进程过多,C ...
CDC_Architecture_Analysis
CDC整体架构分析CDC 概览
CDC流程图
Range Feed原理分析RangeFeed数据来源下图中的步骤③当raft group leader 将raft log apply到状态机时,将raftCommand中对应的数据变更publish出来RangeFeed捕获变更数据流程Feed结构分析
The Difficulty With Decoding WriteBatchesMVCC操作对应的WriteBatch包含的entries
- MVCCPut - inline (never transactional) + write meta key w/ inline value - not inline - transactional - no + write new version - yes ...
Hexo-Theme-Sakura
hexo-theme-sakura主题 English document
基于WordPress主题Sakura修改成Hexo的主题。
demo预览
正在开发中……
交流群若你是使用者,加群QQ: 801511924
若你是创作者,加群QQ: 194472590
主题特性
首页大屏视频
首页随机封面
图片懒加载
valine评论
fancy-box相册
pjax支持,音乐不间断
aplayer音乐播放器
多级导航菜单(按现在大部分hexo主题来说,这也算是个特性了)
赞赏作者如果喜欢hexo-theme-sakura主题,可以考虑资助一下哦~非常感激!
paypal | Alipay 支付宝 | WeChat Pay 微信支付
未完善的使用教程那啥?老实说我目前也不是很有条理233333333~
1、主题下载安装hexo-theme-sakura建议下载压缩包格式,因为除了主题内容还有些source的配置对新手来说比较太麻烦,直接下载解压就省去这些麻烦咯。
下载好后解压到博客根目录(不是主题目录哦,重复的选择替换)。接着在命令行(cmd、bash)运行npm i安装依赖。
2、主题 ...