CMU15-445 2023 Spring Proj0 C++ Primer
实验说明
实验主页https://15445.courses.cs.cmu.edu/spring2023/project0/
本次Proj主要完成copy-on-write trie前缀树
C++17
Task #1 - Copy-On-Write Trie
Task 1要求完成一个copy-on-write前缀树,需要学习一下相关C++17的语法以及智能指针的使用,学习完成后此任务难度不高。
Get
Get函数主要是根据给定的key来查找是否有对应的value并返回,此部分不涉及copy-on-write。
设置一个std::shared_ptr node = 根节点
遍历key的每一个字符c,如果可以从node的children中找到对应的child,那么令node = next_node,否则返回nullptr
遍历至最后一个节点,判断是否是value节点,使用dynamic_cast<const TrieNodeWithValue *>进行强制的类型转换获取value并返回
dynamic_cast 只适用于指针和引用类型,不能用于普通对象
dynamic ...
MIT6.824 2020 Lab2 Raft Part 2A
后续实验对此部分代码进行了重构,因此代码不具备参考性,仅适用于本次实验
阅读本文前请先仔细阅读Lab 2Part 2A相关实验要求并熟悉基础代码。
本文只提供相关实现思路,希望可以读者由此获得灵感。
2A实验说明
2A部分需要完成Raft系统中的leader election和heartbeats
保证系统中最多只有一个leader,如有特殊情况可以发生leader的取代
相关RPC的调用可以阅读labrpc文件夹中的代码
Test分析
代码编写完成后通过go test进行测试,可以理解为C艹中的单元测试,这里通过make_config构建起整个系统cfg。
cfg中包括有多个raft对象,每个raft对象对应有自己的ClientEnd数组peers,表示自己与其他raft的连接,可以理解为传输数据的通道(通过RPC)
网络中各个raft初始化完成后通过connect进行raft之间的连接(对应RPC通信)
每个raft有三种state对应论文中的leader,candidate,follower
以计算机网络的视角来看,cfg.net对应网络层,ClientEnd对应传输层 ...
MIT6.824 2020 Lab1 MapReduce
阅读本文前请先仔细阅读Lab 1实验要求并熟悉基础代码,了解Go中的RPC通信。
Lab环境的配置过程中可能会出现若干问题,参照此处解决。
本文只提供相关实现思路,希望可以读者由此获得灵感。
实验说明
完成分布式MapReduce系统设计,实现词频统计
Worker分别调用Map和Reduce Function来读取和处理文件
Master用来调度和处理失败的Worker
主要修改src/mr文件夹中的master.go rpc.go worker.go
Lab中是所有Map任务完成后才进行Reduce任务
Worker和Master之间利用RPC进行通信
设计概述
大部分思路来自于https://github.com/yzongyue/6.824-golabs-2020,在此基础上进行修改,十分感谢!
结构说明
调用mrmaster.go启动Master,监听是否有人向自身发送RPC请求。
调用mrworker.go启动Worker,首先询问Master是否已经分配了全部任务,如果分配完成了就不新建Worker,直接退出,如果未完成,则新建Worker分担任务。
此处询问 ...