「エッセイの6.824分散系統的な研究」(1)

ショートリストされている記事、私はMIT 6.824 2020分散システムを学んで発生した問題のいくつかのこと、自分の思考を記録しようとして「6.824だけの系統的な研究を分散します」。このコースの終了後、私たちは、断片化されたシステムの問題整理にエネルギーを持っていると思います。

背景問題

講演2-RPC及びスレッドで、教師は、いくつかのクローラ提供crawler.goを。プログラムが実装クローラの三つの異なる実装を、それぞれ、

  1. シリアル爬虫類
  2. 共有状態の同時実行爬虫類とミューテックスを通じて達成
  3. 同時は通路爬虫類によって達成しました

「2」では、このようなA部分コードがあります。

func ConcurrentMutex(url string, fetcher Fetcher, f *fetchState) {
    fmt.Println(url)
    f.mu.Lock()
    already := f.fetched[url]
    f.fetched[url] = true
    f.mu.Unlock()
    if already {
        return
    }
    urls, err := fetcher.Fetch(url)
    if err != nil {
        return
    }
    var done sync.WaitGroup
    for _, u := range urls {
        done.Add(1)
        go func(u string) {
            defer done.Done() // defer保证了无论下一行函数是否正确执行,WaitGroup计数器都能-1,使done.Wait()可以不必一直等待
            ConcurrentMutex(u, fetcher, f)
        } (u)
    }
    done.Wait()
    return
}

教室では、生徒が匿名関数を作ったgo func(u string) {...}uは不変オブジェクトである文字列であるため、uが、行くを渡しません。実際には、不変の文字列は、文字列自体を指し不変であるが、私たちは、文字列の引用符を変更することができ、それは別の文字列を基準点です。だから、行くuの値を渡すことが必要です。
#TODO:次の三つの比較実験を行います

1. DOは変更しません

U 2.削除パス

3.ターゲットの変更内容URL

概要

おすすめ

転載: www.cnblogs.com/0x105/p/12387541.html