go并发编程
文章平均质量分 81
流光影下
一个爱编程的技术宅
展开
-
go并发编程-锁、Sync与原子操作
延迟一个开销很大的初始化操作到真正用到它的时候再执行是一个很好的实践。当互斥锁释放后,等待的goroutine才可以获取锁进入临界区,多个goroutine同时等待一个锁时,唤醒的策略是随机的。互斥锁是完全互斥的,但是有很多实际的场景下是读多写少的,当我们并发的去读取一个资源不涉及资源修改的时候是没有必要加锁的,这种场景下使用读写锁是更好的一种选择。上面的代码中我们开启了两个goroutine去累加变量x的值,这两个goroutine在访问和修改x变量的时候就会存在数据竞争,导致最后的结果与期待的不符。原创 2024-02-01 08:00:00 · 958 阅读 · 0 评论 -
go并发编程-定时器与select多路复用
select的使用类似于switch语句,它有一系列case分支和一个默认的分支。每个case会对应一个通道的通信(接收或发送)过程。select会一直等待,直到某个case的通信操作完成时,就会执行case分支对应的语句。这种方式虽然可以实现从多个通道接收值的需求,但是运行性能会差很多。为了应对这种场景,Go内置了select关键字,可以同时响应多个通道的操作。在某些场景下我们需要同时从多个通道接收数据。通道在接收数据时,如果没有数据可以接收将会发生阻塞。原创 2024-01-31 09:31:31 · 507 阅读 · 0 评论 -
go并发编程-介绍与Goroutine使用
进程和线程A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中的多个线程之间可以并发执行。并发和并行A. 多线程程序在一个核的cpu上运行,就是并发。B. 多线程程序在多个核的cpu上运行,就是并行。并发并行协程和线程。原创 2024-01-29 11:04:22 · 1291 阅读 · 0 评论 -
go并发编程-runtime、Channel与Goroutine
channel常见的异常总结,如下图:注意:关闭已经关闭的channel也会引发panic。原创 2024-01-29 11:05:36 · 920 阅读 · 0 评论