Go Let's GO 语言吧

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

最近有一个机会了解了一下仰慕已久的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结合使用,即可达到预想的效果了!(字迹很丑,请多包含!)

共收到 10 条回复

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/

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