【CMU 6.824】 RPC & Threads

Why Golang?—— Go vs. C++

  1. Go语言提供了很好的RPC包支持,课程过去使用的C++很难找到很好的RPC包
  2. Go语言是类型安全、内存安全的,内置GC避免了内存泄漏;在多线程编程中,支持GC是非常重要的,使得代码变得简洁,避免了程序员使用计数来管理申请的内存(对象)
  3. Go语言足够简单,编译器报错简洁精准

Threads

多线程是我们用来管理程序中并发问题的关键:在程序解决需要与多个计算机沟通的任务时,使用多线程能够很方便的实现。在Go语言中,Threads意味着Goroutine。

todo: Goroutine的资料

Why Threads?

  • 多线程允许程序的不同部分做它们自己的事情,因为历史原因,称为并发I/O(I/O concurrency)。这里,我们常说的并发I/O是指一个已经启动的程序在同一时间内通过RPC来对不同的服务器来进行请求,使用多线程可以允许我们同时进行多个网络请求。事实上,多线程不止可以解决网络请求的问题。
  • 并行性能:能否在大型服务器集群上使用多核心CPU的处理能力是实现分布式系统的关键
  • 方便:可以在后台使用worker来执行周期性事务

并发concurrency vs. 并行parallelism
并发与并行的区别是什么? - 刘志军的回答 - 知乎

If not Threads

如果没有线程,我们如何处理这种需求?一种主流做法是异步编程,或者说事件驱动编程(event-driven)

事实上,使用多线程的方式编写程序将程序的功能分割成多个小模块,更易理解。

Thread Challenges

  • 如何处理共享数据?多线程一个很方便的点在于这些线程是共享内存的,但是这很容易出错——很经典的并发问题——竞争(RACE)

to be continue

posted @ 2020-06-16 13:30  喻晓  阅读(44)  评论(0编辑  收藏