MIT6.824 L2 RPC and Threads

线程

线程数量取决于:

  1. 架构。例如:一个线程用作客户端,一个线程用作后台任务。
  2. 多核并行。Go运行时自动在可用内核上调度可运行的goroutine。
  3. IO并发。取决于延时和容量,随吞吐量增长而增长。
  4. Go线程(goroutine)成本很低,但比一次方法调用高。

风险

  1. 共享数据:
  2. Mutex原子性保证
  3. 使用并发安全的数据
  4. 线程间协作:
  5. 等待所有线程完成—> WaitGroup & Channel for go
  6. 并发粒度:
  7. 粗:逻辑简单,但是并发少
  8. 细:带来数据竞争和死锁

爬虫挑战

共享锁 vs. Channel

大多数情况下,两者都能使用,但是主要通过以下几点决定使用哪种:

  1. 状态:共享锁
  2. 交互:Channel
  3. 等待:Channel

RPC

以前写过,这里就不再写一遍了

Table of Contents