Why Golang?—— Go vs. C++
- Go语言提供了很好的RPC包支持,课程过去使用的C++很难找到很好的RPC包
- Go语言是类型安全、内存安全的,内置GC避免了内存泄漏;在多线程编程中,支持GC是非常重要的,使得代码变得简洁,避免了程序员使用计数来管理申请的内存(对象)
- 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