MIT 6.824 Lecture 2 - RPC and Threads

Go语言的优势

Go语言在多线程、锁、RPC等的使用非常方便,但在其他语言如C++等很复杂。

  • good support for threads/RPC:对线程和RPC的支持度高
  • gc:自带GC,无需考虑垃圾回收问题
  • type safe:类型安全
  • simple:简单易上手
  • compiled:编译型语言,运行时开销更低

多线程

在Go中,线程称为goroutine,线程只有最基本的PC程序计数器、一套寄存器Registers、一个栈Stack,这样就能描述当前的执行状态。

Why we need Threads

  1. I/O 可能导致阻塞,多线程可以分配一个线程给I/0(such as network IO) (避免阻塞)
  2. 利用现代计算机多核处理器cpu(多核并行,提高整体吞吐量)
  3. background threads做些处理。(守护线程)

多进程和多线程的区别?

在同一个进程中,线程之间共享内存,可以使用channel(Go中的概念)进行同步,但进程之间是没有交集的

多线程的挑战

  • race conditions:多线程会引入竞态条件的场景

    • avoid sharing:避免共享内存以防止竞态条件场景的产生(Go有一个竞态检测器race detector,能够辅助识别代码中的一些竞态条件场景)
    • use locks:让一系列指令变成原子操作
  • coordination:同步协调问题,比如一个线程的执行依赖另一个线程的执行结果等

    • channels:通道允许同时通信和协调
    • condition variables:配合互斥锁使用
  • deadlock:死锁问题,比如在go中简单的死锁场景,一个写线程往channel写数据,但是永远没有读线程从channel读数据,那么写线程被永久阻塞,即死锁,go会抓住这种场景,抛出运行时错误runtime error。

Why Go?

  • good support for threads/RPC:对线程和RPC的支持度高
  • gc:自带GC,无需考虑垃圾回收问题
  • type safe:类型安全
  • simple:简单易上手
  • compiled:编译型语言,运行时开销更低

Go如何实现多线程

  • channels
  • 条件变量
  • waitGroup

RPC

什么是RPC?

  • RPC全称Remote Procedure Call译为远程过程调用
  • RPC是一个计算机通信协议,允许调用不同进程空间的程序。
  • RPC允许跨机器、跨语言调用计算机程序方法。
  • RPC的客户端和服务器可以在一台机器上,也可以在不同的机器上。

程序员使用RPC时,就像调用本地程序一样,无需关注内部的实现细节。运行于一台计算机的程序调用另一台计算机的子程序,程序员无需额外地为交互作用编程。RPC允许开发者直接调用另一台计算机上的程序,开发者无需额外地为这个调用过程编写网络通信相关代码,使得开发包括网络分布式程序在内的应用程序更加容易。

总结

虽然这节课的title是RPC和Threads,但是并没有讲到PRC,我看的是2020版的,同学们的提问有点太多了,感觉有点偏题了都。加上我也还没学完GO,学起来真有点费劲,后面先把go的基本语法学了吧。然后后面应该会去看21年版本的了,据说讲的要好一些。

更多的笔记后面再补。

Reference

Go RPC

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值