浅谈go的并发编程

目前各种主流的 CPU 频率基本被锁定在了 3Ghz 附近。单核 CPU 的发展的停滞,给多核 CPU 的发展带来了机遇。相应地,编程语言也开始逐步向并行化的方向发展。Go 语言正是在多核和网络化的时代背景下诞生的原生支持并发的编程语言。

来自书《go语言高级编程》

go并发编程和多线程的区别和联系?

回答:常见的并发编程有多种模型,主要包括多线程,消息传递等。

从理论上来说,多线程和基于消息的并发编程(MPI)是等价的,因为多线程的并发模型可以自然的对应多核处理器,主流的操作系统也提供了系统级的多线程支持,

Goroutine和系统级别线程的区别?

Goroutine是 Go 语言特有的并发体,是一种轻量级的线程,由 go 关键字启动。在真实的 Go 语言的实现中,goroutine 和系统线程也不是等价的。两者区别实际上就只是一个量的区别,

  • 系统级线程会有一个固定大小的栈(一般是2MB)这个栈主要来保存函数递归调用的局部变量。系统进程调度主要靠操作系统。
  • Goroutine的创建会以一个很小的栈启动(可能是2KB也可能是4KB),当发生函数递归调用导致栈空间不足的情况下,goroutine会根据动态地伸缩栈的大小(理论可以达到1GB)。goroutine的调度依靠的是go调度器(只有发生阻塞时才会导致调度,采用的是半抢占式的调度)。可以采用rutime.GOMAXPROCS来控制当前正常运行的系统线程的数目
怎样保证原子操作?

首先先了解什么是原子操作:所谓的原子操作指的是并发编程最小不可并行化的操作。说人话就是多个并发体再同一个时间只能有一个对共享资源进行操作。原子操作主要是保证共享资源的完整性

go语言提供几种方法去保证原子操作

  • 互斥锁,sync.Mutex :Mutex是一个互斥锁ÿ

你可能感兴趣的:(浅谈go系列,golang,go)