jasper的技术小窝

关注DevOps、运维监控、Python、Golang、开源、大数据、web开发、互联网

深入Golang之sync.mutex

作者:jasper | 分类:Golang | 标签:   | 阅读 946 次 | 发布:2017-11-20 10:03 p.m.

锁不管在操作系统里面,还是在各个编程语言里面都是非常重要的。特别是在Golang的goroutine中,会涉及到很多对同一个对象的操作,虽然考虑到锁对性能的影响,我们在Golang中会尽量使用channel来达到同样的效果,但是有时候还是不得不使用锁,现在来看看锁在Golang中的实现。

阅读全文

深入Golang之goroutine

作者:jasper | 分类:Golang | 标签:   | 阅读 876 次 | 发布:2017-11-12 12:08 a.m.

终于要来说说Golang中最吸引人的goroutine了,这也是Golang能够横空出世的主要原因。不同于Python基于进程的并发模型,以及C++、Java等基于线程的并发模型。Golang采用轻量级的goroutine来实现并发,可以大大减少CPU的切换。现在已经有太多的文章来介绍goroutine的用法,在这里,我们从源码的角度来看看其内部实现。

阅读全文

深入Golang之select

作者:jasper | 分类:Golang | 标签:   | 阅读 552 次 | 发布:2017-10-21 6:52 p.m.

接着上一篇的channel来说,channel就像一个管道,而我们在利用Golang的goroutines来编程的时候,对于多个goroutines(最常见的用time.Tick来控制时间的)的情况,我们一般需要用select语句来接收channel中的数据。本篇就来看看select的内部实现。

阅读全文

深入Golang之channel

作者:jasper | 分类:Golang | 标签:   | 阅读 641 次 | 发布:2017-10-15 6:53 p.m.

在Golang中channel被广泛地运用,它可以被存储到变量中,可以作为参数传递给函数,也可以作为函数的返回值返回。在Golang中常常使用channel+goroutine来实现并发的控制并发,下面来了解下channel的内部实现。

阅读全文

深入Golang之interface

作者:jasper | 分类:Golang | 标签:   | 阅读 835 次 | 发布:2017-09-23 11:43 p.m.

Golang中的interface是其比较有特色的地方,其并不只是类似于Java中的Object一样,是所有对象的祖先,而且在Golang中interface还有很多不一样的特性。Go语言的主要设计者之一罗布·派克( Rob Pike)曾经说过,如果只能选择一个Golang语言的 性移植到其他语言中,他会选择interface。

阅读全文

深入Golang之map

作者:jasper | 分类:Golang | 标签:   | 阅读 798 次 | 发布:2017-09-16 10 p.m.

现在我们接着来看一看Golang中的map,map具有O(1)的存取速度,所以十分高效。同Java语言一样,Golang的map也是hash结构的,代码在“runtime/hashmap.go”中,下面让我们来细细剖析。

阅读全文

深入Golang之slice

作者:jasper | 分类:Golang | 标签:   | 阅读 727 次 | 发布:2017-09-09 11:47 p.m.

虽然现在网上已经有了很多对Golang的深入的分析什么的,但是为了加深自己的理解,我还是打算自己看看源码,研究一下Golang的一些内部实现,并记录下来。首先就从slice这个类型开始吧。

阅读全文

Golang中非你所想的runtime.GOMAXPROCS(1)

作者:jasper | 分类:Golang | 标签:   | 阅读 1648 次 | 发布:2017-08-06 5:42 p.m.

在Golang中,我们可以通过runtime.GOMAXPROCS(x)来指定运行当前应用的系统线程数,而goroutine实际上也是运行在系统线程上的,那么如果我们将runtime.GOMAXPROCS(1)设为1,是不是就表示应用在单线程上运行,这样就可以不用加锁或者channel啦?答案是否定的,我们来细聊一下。

阅读全文

Golang中用race检测并发

作者:jasper | 分类:Golang | 标签:   | 阅读 1440 次 | 发布:2017-08-05 6:38 p.m.

数据竞争是并发系统中最常见和最难调试类型的错误之一。特别是在Golang中,由于goroutine的使用,这样的问题更容易出现,好在Golang提供了race这个功能。

阅读全文

Golang内存模型

作者:jasper | 分类:Golang | 标签:   | 阅读 923 次 | 发布:2017-07-31 12:05 a.m.

根据官方文档,再加上自己的理解,一起来探讨一下Golang的内存模型,简言之,Golang的内存模型描述了"如何在一个goroutine中看到在另一个goroutine修改的变量的值"。具体的,我们慢慢来看。

阅读全文

其他分类: