
golang
文章平均质量分 67
王建文go
这个作者很懒,什么都没留下…
展开
-
锁 和 CPU CAS 原子操作
锁 和 CPU CAS 原子操作原创 2022-09-15 17:52:36 · 732 阅读 · 0 评论 -
sync.Map源码原理
shell实现简单的检测程序停止则进行重启 #!/bin/sh #无线循环 while true do echo jinru .sh echo jinru1 .sh echo jinru2 .sh ma="999@qq.com" #判断4011端口是否在执行 if netstat -lntp | grep -q ‘:4011’ then echo anquan else ./ceshi #...原创 2019-04-18 15:58:09 · 399 阅读 · 0 评论 -
Go的GMP调度器
Go的GMP调度器 上一篇文章关联链接地址点击 前言: 最后有讲系统级别多线程、多进程的问题. 最大的问题其实就是资源浪费,切换成本高 所以导致很多语言对线程的控制要求比较高,否则容易出现内存溢出,或者频繁的让cpu滴使用 率达过高 Go的GMP就很好的解决了这部分的问题。这也是Go逐渐成为热门语言的原因之一。 线程补充: 线程是系统级别进行控制(系统态)。 线程会由机器的多核数量来达到是否存在并行的情况。 协程 co-routine 是有用户态进行管理操作 CPU cpu只看系统态,只会看向原创 2021-02-20 14:32:15 · 251 阅读 · 0 评论 -
统一实现rpc,grpc,tcp,http等协议简单的负载均衡
** 统一实现rpc,grpc,tcp,http等协议简单的负载均衡 ** 利用:zookeeper或者etcd来实现.(zookeeper的源码为java,etcd的源码为go) 本文选用zookeeper来实现服务之间的调用负载。原因:作为一个go开发程序员,我觉得zookeeper部署加运用容易点,不过听说etcd是会好一点,具体我是没有做实验进行对比的,有空的话可以试试。(部署自行google 不管是哪个系统都容易的很) 实现思路: 程序之所以能调用肯定是分为了serve以及client,那么就得先原创 2020-06-28 16:59:44 · 733 阅读 · 0 评论 -
携程并发两小坑
携程: 协程和线程的区别是:协程避免了无意义的调度,由此可以提高性能,但也因此,程序员必须自己承担调度的责任,和多线程比,线程数量越多,协程的性能优势就越明显。 独占CPU导致其他Groutine饿死。 Groutine是协作式抢占调度,Groutine本身不会主动放弃CPU. func GoroutineCpu(){ runtime.GOMAXPROCS(4) //开核 go func() ...原创 2020-02-21 16:53:00 · 376 阅读 · 0 评论 -
数组、切片之优化
数组: 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成,位数不同类型也就不同,int64 != int32 切片: 切片就是一种简化版的动态数组,因为动态数组的长度不固定,所以切片的长度自然也就不能是类型的组成部分了。 切片数组的内存增长: 其实这种类型的内存增长不用做过多的介绍,因为一般的情况下不管是什么语言,他们的数组以及线程等,存入内存时,在扩容的时候都是以D...原创 2020-02-20 16:54:31 · 250 阅读 · 0 评论 -
tcp解决粘包
代码链接: https://github.com/wjw1758548031/Golang/blob/master/tcp.go tcp协议相对于udp协议的差别 TCP UDP 是否连接 面向连接 面向非连接 传输可靠性 可靠 不可靠 应用场合 少量数据 传输大量数据 速度 慢 快 根据这个确定运用场...原创 2019-12-25 10:27:29 · 187 阅读 · 0 评论 -
golang Map和指针优化
小编不啰嗦,直接上代码: 执行结果: 这里的内存分配容量和次数都为0,因为此次定义的数据量较小,直接忽略不计。 结果:带指针的结构明显执行速度比值传递快。 为什么会发生这样的情况呢,而且在我以前的文章中也能找到,频繁的带入指针, 还会影响到Gc回收,造成压力,那么在此处,为何性能快了这么多。 原因:值传递,传入过去会分配两个内存空间,意思是内存会分配两个容量存储。 而直接使用指针的话,可以直接...原创 2019-12-19 16:27:19 · 1596 阅读 · 0 评论 -
go Gc
** GC受值类型和引用类型的影响(golang) ** 前言:此篇介绍的是优化,引用传递返回值,还是值返回各自给gc带来的压力 一下是代碼: ** 测试开始: ** 下方是引用类型传递所返回的接口(也就是代码里调用的test): 下方是值类型传递所返回的接口(也就是代码里调用的testOne): 总结:很明显的看出来,值传递gc所占用的堆明显比引用要少,而且引用还在不停地叠加,因为gc无法...原创 2019-09-17 14:36:41 · 274 阅读 · 0 评论 -
Golang小技巧与原理
Golang小技巧与原理 前言:每个部分写的不太清楚,只是指出了思路,可以直接根据思路百度,应该都有相应教程。 1:&是地址 是值 当&为参数传入方法时会影响之前的值,否则不会影响(包括) 3:切面和map都是线程不安全的,建议不要开携程,否则就需要加锁。 4:for k := rang item //第一个默认值就是k而不是v 5: i:=make([]int,10);...原创 2019-04-18 14:39:05 · 242 阅读 · 0 评论