- 博客(6)
- 收藏
- 关注
原创 Linux uptime命令 查看机器负载信息:
在UNIX系统中,系统负载是对当前CPU工作量的度量,被定义为特定时间间隔内运行队列中的平均线程数。load average 表示机器一段时间内的平均load。这个值越低越好。负载过高会导致机器无法处理其他请求及操作,甚至导致死机。Linux的负载高,主要是由于CPU使用、内存使用、IO消耗三部分构成。任意一项使用过多,都将导致服务器负载的急剧攀升。查看机器负载在Linux机器上,有多个命令都可以查看机器的负载信息。其中包括uptime、top、w等。uptime命令 upti...
2021-03-31 14:50:07
203
原创 Go Mutex 饥饿模式:
相关概念:原子操作:指那些不能够被打断的操作被称为原子操作,当有一个CPU在访问这块内容地址时,其他CPU就不能访问。互斥锁:挂起(通过休眠来使进程阻塞)自旋锁:指当一个线程在获取锁的时候,如果锁已经被其他线程获取,那么该线程将循环等待,然后不断地判断锁能否够被成功获取,直到拿到锁才会退出循环。获取锁的线程持续活跃,不挂起(不是通过休眠来使进程阻塞),继续占有cpu饥饿问题:一些悲惨的G长时间获取不到锁,导致业务逻辑不能继续完整执行。而当前正在cpu上运行的goroutine可能会更先获取到
2021-03-30 13:07:35
5655
2
原创 何时使用Channel,何时使用Mutex ?
另外还有一篇大佬介绍channel底层结构的文章,含动图:传送门~channel本质上是一个 MessageQueuegolang的核心思想是:不要通过共享内存来通信,我们应该通过通信来共享内存。场景:channel主要适用于有数据流动/传递的通讯场合;mutex则适用于数据稳定的场景。当只需锁定少量共享资源时,使用Mutex非常有用。性能:channel与Mutex相比,Channel的使用成本更高,性能更低。原因如下:(1) channel内部实现包含Mute...
2021-03-26 15:34:03
1177
原创 Go 格式化输出 %v、%+v、%#v 的区别:
参考:大佬文章1.%v 只输出所有的值2.%+v 先输出字段类型,再输出该字段的值3.%#v 先输出结构体名字值,再输出结构体(字段类型+字段的值)
2021-03-23 19:34:22
10852
原创 为什么遍历 Go map 是无序的?原生map为什么是非线程安全的?
参考:大佬文章代码层原因:for range map在开始处理循环逻辑的时候,就做了随机播种,用于决定从哪里开始循环迭代。更具体的话就是根据随机数,选择一个桶位置作为起始点进行遍历迭代。结果:因此每次重新for range map,你见到的结果都是不一样的。那是因为它的起始位置根本就不固定!根本原因:你想问为什么要这么做?当然是官方有意为之,因为官方在 Go 早期的时候,发现很多工程师都较依赖 map 的遍历迭代顺序。但这将会导致可移植性存在问题。因此,改之。也请不要依赖......
2021-03-23 19:05:13
1951
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人