![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
6.824 与 go
文章平均质量分 75
6.824课程与go语言
passenger12234
这个作者很懒,什么都没留下…
展开
-
6.824 2020春 论文阅读 FaRM
0. PreludeThis article is relevant to lecture 14. Although this paper take a lot of space to talk about fault recovery, .1. OverviewFaRMis distributed in-memory database , which consists of many machines in one datacenter(including clients) and leverag原创 2022-02-24 23:29:31 · 219 阅读 · 0 评论 -
6.824 2020春 论文阅读 spanner
0. prelude写了两篇之后我发现自己的懒癌又犯了,尝试接下来的博客用英语来记录的课程内容,算是对一种对继续写的激励吧…orz1. Overview designSpanner is a semi-relational and globally distributed database with strong consistency and support of distributed transaction.Figure 1 is a deployment instance of Spann原创 2022-02-24 12:08:06 · 122 阅读 · 0 评论 -
6.824 2020春 材料阅读 6.033 chapter9
0. 序本节内容对应lecture12, 感觉核心是讨论distributed transaction.1. two phase lock一种加锁的基本方法,针对9.5.2中的simple locking的优化,保证concurrent transaction is serializable,遵循两个原则:在读或写任何object前都先加锁直到完成所有object的读写后才能释放锁(一个小优化:在获取所有锁之后,且在完成所有object读写前,如果某个object是只读的,并且以后再也不需要读原创 2022-02-20 23:36:31 · 250 阅读 · 0 评论 -
6.824 2020春 论文阅读 Frangipani
0. 序尝试回想了一下这门课之前读的论文,发现除了核心的一个想法,其它论文中讨论的细节都忘得差不多了。现在读到Frangipani,觉得写一下笔记还是十分有必要的吧。1. 总体结构Frangipani是基于一个叫做Petal的分布式virtual disk,Petal本身具体fault tolerance, replication之类的性质,对上提供了一个单个磁盘的抽象。另外独立的一块就是具体fault tolerance属性的lock server,向Frangipani提供分布式读写锁的服务。原创 2022-02-19 01:07:35 · 108 阅读 · 0 评论 -
6.824 lab3
延迟过高,原因是leader提交太慢bug:raft总是有可能提交重复的日志(比如client提交日志给A,A复制到B,然后因为某些原因,B变成了新的leader,A返回提交失败给client,client此时再提交该日志给B,原来的日志还没有提交,新的重复日志来了,没有办法判重)outstandingReq的处理,判断是否是leader与加入outstandingReq应该是原子操作,此时要求同时持有server锁和raft锁...原创 2022-02-16 21:28:06 · 1143 阅读 · 0 评论 -
vscode,配置launch.json运行go的单元测试
在写6.824的lab3A,debug的时候,发现单个测试很难报错(点击vscode编辑器中的debug test),而在跑脚本统一测试所有情况时错误又暴露出来了。我希望能够在vscode中一口气跑许多测试,这样能够在错误暴露时暂停程序从而找到问题所在。具体来说,我参考了这俩文档microsoft-vscodevscode-go然后得到了下面的launch.json文件{ "configurations": [ { "name": "Launch t原创 2022-02-14 18:49:31 · 2415 阅读 · 2 评论 -
6.824 raft算法与lab2
0. 序继续回来填6.824的坑。1. 关于raft算法不认可处理removed server来捣乱的方法(好像确实可以,论文中的做法是server会丢掉requestVote,并且不更新term,如果server在minimun election timeout的时间内收到了leader的消息。我之前想到partition网络恢复时也许这个会造成问题,但是如果上面的限制只是针对follower来做的话就没问题了。),不能理解如何实现linearizable semantics(对于read on原创 2022-01-09 19:25:08 · 684 阅读 · 0 评论 -
go time.Ticker与time.Timer使用
一篇速记1. time.Ticker的正确使用方法copy from go examplefunc main() { // Calling NewTicker method Ticker := time.NewTicker(2 * time.Second) // Creating channel using make // keyword mychannel := make(chan bool) // Go function g原创 2021-12-27 21:46:29 · 461 阅读 · 0 评论 -
关于go的interface机制
一篇速记1. 基本实现照例先贴两个链接吧(好的,我就是粘贴怪了)Go Data Structures: Interfacesgolang的interface剖析可以先看第一篇,再看第二篇。总结一下两篇文章的大意吧interface结构占16个字节(64位机器),前8位是一个tab指针,指向全局的itable(hash表)的一个tab表项(具体的结构体定义可以参考第二篇链接)。后8位是一般是一个数据指针,指向实际存放的数据。映射关系:(interface接口,实际的数据类型) -> t原创 2021-11-30 11:54:14 · 183 阅读 · 0 评论 -
go的slice 与 导入本地package方法
一篇速记1. go中的slice特性首先知道slice是[指向数组的指针,len, cap]这个三元组构成的,然后看下面的两个例子。package mainimport "fmt"func main() { s := []int{2, 3, 5, 7, 11, 13} printSlice(s) // 截取切片使其长度为 0 y := s[:1] printSlice(y) y[0] = 100 printSlice(s) y = append(y, 101) printS原创 2021-11-29 23:04:56 · 271 阅读 · 0 评论 -
6.824 lab1 go的serialization
0. 序lab1前前后后做了两三天,终于写完了。其实lab本身思路还是蛮清晰的,主要是对go不怎么熟悉,在调试上绕了很久。1. go语言中数据的序列化方法写的时候面临的第一个问题是map_worker产生的keyValue切片以什么样的形式保存到临时文件中。脑海里首先想到的是像C一样直接把产生的二进制数据保存到文件里面就可以了。但是没有办法从手上的切片句柄中直接拿到指向底层数组的指针,究其根本,go是否允许像C一样对数据进行任意地转换类型然后处理?搜索了一下,查到了unsafe包中的uintptr原创 2021-09-17 17:45:41 · 546 阅读 · 1 评论 -
一点关于golang闭包机制的思考
0. 序在MIT的6.824的第二节课中,一段展示并发golang爬虫代码很有意思,查阅了一些关于闭包的资料,结合自己的调试结果,记录一下。1. 缘由type fetchState struct { mu sync.Mutex fetched map[string]bool}func ConcurrentMutex(url string, fetcher Fetcher, f *fetchState) { f.mu.Lock() already := f.fetched[ur原创 2021-09-11 22:07:08 · 120 阅读 · 0 评论