概念Goroutine可以理解为一种Go语言的协程(轻量级线程),是Go支持高并发的基础,属于用户态的线程,由Go runtime管理而不是操作系统。底层...
在Go一共可以分为两种抢锁的模式,一种是正常模式,另外一种是饥饿模式。正常模式(非公平锁)在刚开始的时候,是处于正常模式(Barging),也就是,当一个...
死锁:单个协程永久阻塞两个或两个以上的协程的执行过程中,由于竞争资源或由于彼此通信而造成的一种阻塞的现象。channel死锁场景:非缓存channel只写...
“不要通过共享内存来通信,我们应该使用通信来共享内存” 这句话想必大家已经非常熟悉了,在官方的博客,初学时的教程,甚至是在 Go 的源码中都能看到无论是通...
多个goroutine并发执行时,每一个goroutine抢到处理器的时间点不一致,gorouine的执行本身不能保证顺序。即代码中先写的gorouine...
为什么设计成线程安全?不同协程通过channel进行通信,本身的使用场景就是多线程,为了保证数据的一致性,必须实现线程安全如何实现线程安全的?channe...
Go 语言的 sync.Map 支持并发读写,采取了 “空间换时间” 的机制,冗余了两个数据结构,分别是:read 和 dirtytype Map str...
什么是负载因子?负载因子(load factor),用于衡量当前哈希表中空间占用率的核心指标,也就是每个 bucket 桶存储的平均元素个数。负载因子 =...
先看下线程安全的定义:多个线程访问同一个对象时,调用这个对象的行为都可以获得正确的结果,那么这个对象就是线程安全的。若有多个线程同时执行写操作,一般都需要...
先说下结论:Go语言中所有的传参都是值传递(传值),都是一个副本,一个拷贝。参数如果是非引用类型(int、string、struct等这些),这样就在函数...