Qianlv's world Home Book Archive

Infrastructure: Rpc and threads

Why Go?

关注于分布式问题本身,而不是别的。

go 支持 concurrency,RPC,GC,type safe。

go 简单

Why Thread?

利用并发, I/O 并发,多核

Thread = “Thread of excution”

线程让程序同时执行多个事情(逻辑上)

共享内存

每个线程自己的状态: programe counter,register,stack

Threading challenges:

  1. 竞态
  2. 死锁
  3. 粒度:
    • 粗粒度: 简单,更低的并发/并行。
    • 细粒度: 更高并发,更多的竞态和死锁

RPC

目标: 简化进程间网络通讯

RPC problem: lost packet, broken network, slow server, crashed server

发生下列错误时 client RPC库如何反应?

“at least once” 行为:

“at least once” 问题:

Put("k", 10)
Put("k", 20)

“at least once” 对只读操作或应用本身处理了重复请求是 OK 的

“at most once” 更好的行为:

“at most once” 复杂问题:

“at most once” server 崩溃和重启如何处理?

什么是 “exactly once”?

Go RPC is “at-most-once”