MIT-6.824 前置准备

课程相关资料

课程主页

课程安排

课程视频

GitBook

GO 语言学习

拉取实验代码

1
git clone git://g.csail.mit.edu/6.824-golabs-2022 6.824

通过命令行跑一遍提供的非并行版 mrsequential.go :

1
2
3
4
5
6
7
8
9
cd 6.824
cd src/main
# 将wc.go编译成插件形式,生成wc.so
go build -race -buildmode=plugin ../mrapps/wc.go
rm mr-out*
# 进行并发检测,并将编译后生成的wc.so插件,以参数形式加入mrsequential.go,并运行
go run -race mrsequential.go wc.so pg*.txt
# 查看生成的文件
more mr-out-0

如果跑通的话会在命令行输出文本单词的出现次数。

前置准备-1

配置 GoLand 运行/调试环境

  1. 先在src/main 底下创建脚本sh文件:wc-build.sh

    前置准备-2

    1
    2
    3
    4
    # 将wc.go编译成插件形式,生成wc.so
    go build -race -buildmode=plugin ../mrapps/wc.go
    # 删除生成的mr-out*以免每次第二次运行得先删除
    rm mr-out*
  2. mrsequential 配置:

    前置准备-3

    以后启动就可以先启动wc-build.sh,然后再运行mrsequential.go。当然也可以直接在 Before launch 添加运行shell脚本,但是会有报插件运行错误的风险。这种情况就把生成的 wc.so 以及结果文本文件都删了,重新来过,最稳的就是命令行运行。

    Program arguments

    wc.so pg-being_ernest.txt pg-dorian_gray.txt

  3. mrcoordinator 配置:

    前置准备-4

    要注意一点的是程序实参的传入的 txt ,不能是 * 这种的匹配符,以 golang 运行这种实参不会进行自动匹配。 所以参数 mrcoordinator 应该为以下文件名:

    Program arguments

    pg-being_ernest.txt pg-dorian_gray.txt pg-frankenstein.txt pg-grimm.txt pg-huckleberry_finn.txt pg-metamorphosis.txt pg-sherlock_holmes.txt pg-tom_sawyer.txt

  4. mrwork配置:

    前置准备-5

    Program arguments

    wc.so 1

一般是mrcoordinator通过golang运行或者调试,mrworker每次在命令行重现编译插件后运行,利用fmt打印输出体验较佳!!!(因为wc.go编译在golang中运行实在是给跪了orz…)