
GO语言
文章平均质量分 82
beyondma
一个温柔的程序员爸爸
展开
-
为什么新一代的Rust、Go等编程语言都如此讨厌if-else、Switch结构
今天我们还是继续来聊高并发的话题,我们知道Swich分支是一个非常有用的语法,这是一个可以回溯到上世纪的Pascal、C等经典语言的分支结构,主要的作用就是判断变量的取值并将程序代码送入不同的分支,这种设计在当时的环境下非常的精妙,但是在当前最新的CPU环境下,却会带来很多意想不到的坑。Swich的坑,环境一变效率就差远了由于Rust并没有Switch了,因此以下代码就暂用Go语言来演示了。我们先来看以下这段代码:package mainimport ( "fmt...原创 2021-08-14 10:57:48 · 5427 阅读 · 10 评论 -
用了十年竟然都不对,Java、Rust、Go主流编程语言的哈希表比较
哈希表(HashMap、字典)是日常编程当中所经常用到的一种数据结构,程序员经常接解到的大数据Hadoop技术栈、Redis缓存数据库等等最近热度很高的技术,其实都是对键值(key-value)数据的高效存储与提取,而key-value恰恰就是哈希表中存储的元素结构,可以说Redis、HDFS这些都是哈希表的经典应用,不过笔者之前也只知道哈希表比较快,但对于具体什么场景下快,怎么用才快等等知识却一知半解,因此这里把目前的一些研究成果分享给大家。重新认识哈希表所谓的哈希表就是通过哈希算法快速搜索查..原创 2021-07-17 12:23:27 · 5275 阅读 · 10 评论 -
终于把之前的坑填上了:远看像乱序执行,其实是内存屏障的BUG,如何用汇编搞定?
前几天我发布了《几种主流语言的高并发实现的比较,Serverless时代Rust即将迎来春天》后,针对热心读者的回复针对他所提出的问题我又总结了一篇文章《一顿操作猛如虎,一看结果却是0》,其中我对于多并发操作,结果却还是0的情况给出了多核竞争冲突的解释,结果一石击起千层浪,再次收到很多热心读者的反馈,其中有几个回复特别值得一说。单核环境y也是0:其中一位非常细心的读者针对这个多核竞争造成问题的结论进行了验证,亲身在单核的环境ECS上实验,结果发现结果照样y=0。后发先至:另外一位读者则给出了一个..原创 2021-06-26 13:01:32 · 2592 阅读 · 3 评论 -
大厂都在用的GO语言入门-Helloworld
近期腾讯发布了《腾讯研发大数据报告》,Go语言在鹅厂的使用率,已经上升到了TOP5的位置了。我们知道腾讯在智能运维尤其是DEVOPS方面,是走在各大厂的前列的,尤其是基于GO语言开的蓝鲸平台,水平相当高。经笔者实地上手体验,GO语言在各个方面还是非常优秀的,因此笔者计划出一系列的教程详细的介绍一下GO语言的特性一.GO常用终端命令如果有读者没有使用本书有前文介绍的li...原创 2020-04-25 13:19:47 · 2278 阅读 · 2 评论 -
高并发时代下的设计模式-GO和JAVA的对比
在这个高并发时代最重要的设计模式无疑是生产者、消费者模式,比如著名的消息队列kafka其实就是一个巨型的生产者消费者模式的实现。生产者消费者问题,也称有限缓冲问题,是一个并发环境编程的经典案例。生产者生成一定量的产品放到库房,并不断重复此过程;与此同时,消费者也在缓冲区消耗这些数据,但由于库房大小有限,所以生产者和消费者之间步调协调,生产者不会在库房满的情况放入端口,消费者也不会在库房空时消耗数据...原创 2020-04-11 21:19:26 · 3005 阅读 · 2 评论 -
一文读透GO语言的通道
channel是GO语言并发体系中的主推的通信机制,它可以让一个 goroutine 通过它给另一个 goroutine 发送值信息。每个 channel 都有一个特殊的类型,也就是 channels 可发送数据的类型。一个可以发送 int 类型数据的 channel 一般写为 chan int。Go语言提倡使用通信的方法代替共享内存,当一个资源需要在 goroutine 之间共享时,通道在 go...原创 2020-04-04 13:18:35 · 2183 阅读 · 0 评论 -
GO语言的并发根本不需要用SLEEP,赶快让清理文件的程序并行的跑起来吧。
我们上文中介绍了GO语言封装了所有的系统调用,因此凡是被阻塞的操作,都能被调度器感知,通过阅读goroutine的代码位置在GOPATH\src\runtime\proc.go中,其中retake函数的功能是实现抢占式调度,调度逻辑如下,首先如果目前正在运行的goroutine被阻塞那么即可直接让度CPU,不需要抢占。如果正在运行的goroutine距上次调度的时间超过了一定的阈值,那么就...原创 2020-03-26 18:28:21 · 2294 阅读 · 0 评论 -
一文弄清GO语言的并发基础
相信很多读者和我一样,也都是冲着 Go 大肆宣扬的高并发而入坑,从源码的角度来看,协程goroutine本质是由谷歌实现的超级“线程池”。每个goroutine大约 4-5KB的栈内存消耗的确更加符合目前web服务的场景,和由于实现机制和轻量级的开销,Go的高并发性的确有目共睹。goroutine在我们使用JAVA或者C编写网络程序时,基本都是用一个线程来处理一个http请求, 但是这样的...原创 2020-03-22 12:04:23 · 1715 阅读 · 1 评论 -
清理你的重复文件,GO语言并发初步
上周笔者的博客《为什么大厂上在用GO语言-读透GO语言的切片》立了个flag,要带大家共同来实战一下GO语言的项目,通过这些日子的研究对于GO语言笔者已经路转粉了。笔者在接触GO之前长期从事物联网操作系统的内核及时序数据库的开发工作,特别推崇开源精神,曾经参与国产开源数据库Tdengine与TencentOS等开源项目,在优快云公众号中发表过《腾讯开源开年红!TencentOS 内核正式开源...原创 2020-03-14 14:54:47 · 2967 阅读 · 1 评论 -
为什么大厂都在用GO语言-读透GO语言的切片
近日腾讯发布了《腾讯研发大数据报告》,笔者发现GO语言的使用在鹅厂已经上升到了TOP5的位置了,我们知道腾讯尤其是Docker容器化这一块,是走在各大厂的前列的,尤其是他们的基于GO语言开发的DEVOPS蓝鲸平台,水平相当高。经笔者实地上手体验,GO语言在并发等方面还是相当优秀的,笔者在上一篇《一文读透GO语言的哈希表》,曾经和读者聊了一下GO语言,下面笔者就继续上次的话题,汇报...原创 2020-03-11 16:48:42 · 7957 阅读 · 6 评论 -
一文读透GO语言的哈希表
最近一直远程办公,所以经常会从各种群邮件,钉钉等软件上收到一些重复的文件,突然发现原本不大的笔记本硬盘也会经常被这些文件所占据,而针对WINDOWS的重复文件清理软件如Duplicate Cleaner等笔者亲测也会带有一些捆绑式的安装,而其实这个需求没有那么难以解决,简单来说只需要建立 一个以文件名为索引,文件大小为键值的哈希表,然后遍历所有文件就能完成,在看过了所有典型的哈希表之后笔者发现GO...原创 2020-03-09 15:19:18 · 3561 阅读 · 2 评论