Go Let's GO 语言吧

gracezhangyaofei · 2018年06月24日 · 最后由 heshanfu 回复于 2019年03月13日 · 7964 次阅读

最近有一个机会了解了一下仰慕已久的 GO,将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,大力支持网络通信、并发和并行编程的,GO 确实很多方便做的不错,虽然在国内一直是不温不火的状态,哈哈~

这次使用的最初原因是在 ROR 中,需要发送大量 header 请求到第三方,在 worker 里面做,每 1k 请求耗时大概 2-3mins,几个 worker 还是有点浪费资源。GO 这个时候真的是体现了自己大 BOSS 的价值。GO 的 concurrency 的特性,可以实现 1k 个请求 1.5mins。一方面速度很快,当然另外一方面,实现起来也比 ROR 里面笨重的 worker 好很多。但是提到 concurrency,大多数小伙伴会想到 parallelism,但是其实还是完全不同的二个东西。

concurrency 是通过将一个大任务,切成可以单独运行的小块,并且让这些小的代码快很好的沟通的过程。而 parallelism 是同时执行计算的过程。看图:

既然是 concurrency,那么 Go Scheduler 是如何管理所有的 go routine 来提高速度呢?看图:

当正在运行的 go routine 被 block,比如正在发送第三方请求,那么 Scheduler 会重新选择一个新的 go routine,继续运行,不会让 CPU 闲置。正是因为 go 这样灵巧的管理机制,才可以让 CPU 到达了最大的利用率,从而节约时间。 另外再把 goroutine 和 channel 结合使用,即可达到预想的效果了!(字迹很丑,请多包含!)

1k/3min 和 1k/1.5min 对比,好像还是可以接受的嘛,worker 开了多少线程?

只是请求吗?可以考虑丢 ruby 的线程里。只是请求的话,本地跑到 1k/s 还是可以的。

不过这个场景,用 nio 更合适些。线程毕竟耗资源。

这种场景,go 也是要上 nio 吧?

最后还是 erlang 大法好!

Let's Elixir 吧,开发效率和运行效率都有

图和字都很不错呀

在国内一直是不温不火的状态

可能你不在国内😂 ,前段时间把一个 nodejs 的 http server 改为了 go 的 http server,没有数据库查询,接口速度 提升了 10 倍,内存变为 nodejs 版的四分之一

😀 如果能完美的代替 C++ go 肯定能火起来的,可惜 GO 在一些很底层的地方,没有进行足够的抽象。好处是你上手的,你开发的很快。但是当你成为一个老手,你的开发速度和刚开始的时候,生成的还是一样快

那么,有用 Go 写业务的吗?

lyb124553153 回复

听说老手都不喜欢写 Go,写出来看上去跟新手几乎一样,没存在感。😀 😀

Go 视频教程,要学的朋友看看 http://www.sucaihuo.com/video/414.html

好的,Go 的一个资源库网站,可以看看。https://golangexample.com/

需要 登录 后方可回复, 如果你还没有账号请 注册新账号