Go 语言开发小技巧 & 易错点 100 例(四)
往期回顾:
本期看点(技巧类用【技】表示,易错点用【易】表示):
(1)goroutine 控制并发数量的方式【技】
(2)Go 发起 HTTP 请求【技】
(3)包循环依赖导致的异常【易】
正文如下:
1 goroutine 控制并发数量的方式【技】
首先我们思考一个问题,为什么要控制 goroutine 的数量呢?
虽然 goroutine 的创建成本很低,而且占用的内存也很少,但是一旦数量没有控制,导致短时间内大量的 goroutine 同时执行也会造成内存崩溃、CPU 占用率过高等问题,因此我们在生产级的项目中一定要注意控制好 goroutine 的数量,以免发生生产事故。
那么,我们都有哪些方式来控制 goroutine 的数量呢?
sync.WaitGroup
channel
sync.WaitGroup+channel
semaphore
(1)最简单的方式
复制代码
这种方式非常的简单,但是弊端就是不容易灵活扩展
(2)sync.WaitGroup+channel 方式
复制代码
测试:
复制代码
2 Go 发起 HTTP 请求【技】
服务端:
复制代码
Go 发送 Http 请求:
复制代码
3 包循环依赖导致的异常【易】
循环依赖是一个在代码层面很常见的概念了,简单来说就是 A 依赖 B,B 依赖 A,从而导致的先有蛋还是先有鸡的问题,下面来一个示例:
package_a 代码:
复制代码
package_b 代码:
复制代码
测试方法:
复制代码
执行结果:
如何避免循环依赖呢?
说实话没有什么特别好的办法,就是在平时写代码前先做好设计,设计好每一层的依赖关系,尽量不要产生额外的循环依赖即可。
版权声明: 本文为 InfoQ 作者【海风极客】的原创文章。
原文链接:【http://xie.infoq.cn/article/2578f75cbfe6e7fff07db3b4a】。文章转载请联系作者。
评论