Golang并发(1)

Golang 并发(一)

Golang 基础之并发知识 (一)大家好,今天将梳理出的 Go 语言并发知识内容,分享给大家。 请多多指教,谢谢。 本次 - 掘金

什么是并发,并行

image-20250127203138619

https://blog.meowrain.cn/api/i/2025/01/27/YXjc5o1737981110787763430.avif

什么是原子操作

原子操作可以理解为: 在进行过程中不能被中断的操作

也就是说,针对某个值的原子操作在被进行的过程中,CPU 绝不会再去进行其它针对该值的操作,无论这些其它的操作是否为原子操作都会是这样

为了实行这样的严谨性,原子操作仅会由一个独立的 CPU 指令代表和完成,只有这样才能够在并发环境下保证原子操作的绝对安全。

Go 语言提供的原子操作都是非侵入式的,它们由标准库代码包 sync/atomic 中的众多函数代表

什么是并发锁

如果两个或者多个线程在没有互相同步的情况下,访问某个共享的资源,并且试图同时读和写这个资源,就处于互相竞争的状态,这种情况被称为 race condition 也就是竞态。

竞态状态的存在是让并发程序变得复杂的地方,十分容易引起潜在问题。

对于一个共享资源的读和写必须是原子化,可以理解为,同一时刻只能有一个线程对共享资源进行读和写的操作。

一种防止竞态状态的方法,就是使用锁机制,锁住共享资源,保证线程的同步状态。

什么是通道

Go 提供了一种称为通道的机制,通道(chan)是 goroutine 之间传递特定值的通信机制,用于在 goroutine 之间共享数据。当作为 goroutine 执行并发活动时,需要在 goroutine 之间共享资源或数据,通道充当 goroutine 之间的管道并提供一种机制来保证同步交换。

它属于 通信顺序进程并发模式(Communicating sequential processes,CSP)

Go 语言中还有另一种并发模式,即共享内存多线程的传统模型 MPG。


相关内容

0%