![](https://img-blog.csdnimg.cn/29720091857d42d1a4d37dc90fc734b7.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发编程
文章平均质量分 91
分享技术栈:goroutine、channel、runtime、sync、定时器、select、并发安全和锁、atomic(原子操作)等
码一行
一个喜爱编程技术的非著名码农人士
展开
-
Go Mutex 错过后悔的重要知识点
go 的 Mutex 实现中,state 字段是一个 32 位的整数,不同的位记录了四种不同信息,在这种情况下, 只需要通过原子操作就可以保证一次性实现对四种不同状态信息的更改,而不需要更多额外的同步机制。原创 2023-07-05 10:25:30 · 224 阅读 · 0 评论 -
如何正确使用 goroutine ?
在中我们要实现并发编程的时候,我们通常需要自己维护一个线程池,并且需要自己去包装一个又一个的任务,同时需要自己去调度线程执行任务并维护上下文切换,这一切通常会耗费程序员大量的心智。那么能不能有一种机制,程序员只需要定义很多个任务,让系统去帮助我们把这些任务分配到上实现并发执行呢?语言中的就是这样一种机制,的概念类似于线程,但 是由Go的运行时()调度和管理的。程序会智能地将 中的任务合理地分配给每个。语言之所以被称为现代化的编程语言,就是因为它在语言层面已经内置了调度和上下文切换的机制。在语言编程中你不需原创 2023-06-28 16:44:14 · 227 阅读 · 0 评论 -
go channel 详解
在Go语言中,使用goroutine单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。虽然可以使用共享内存进行数据交换,但是共享内存在不同的goroutine中容易发生竞态问题。为了保证数据交换的正确性,必须使用互斥量对内存进行加锁,这种做法势必造成性能问题。Go语言的并发模型是CSP(Communicating Sequential Processes),提倡通过通信共享内存而不是通过共享内存而实现通信。原创 2023-06-28 16:39:34 · 568 阅读 · 0 评论