- worker pool(goroutine池):Go语言中的goroutine虽然相对于系统线程来说比较轻量级,但是在高并发量下的goroutine频繁创建和销毁对于性能损耗以及GC来说压力也不小。充分将goroutine复用,减少goroutine的创建/销毁的性能损耗,这便是grpool对goroutine进行池化封装的目的。例如,针对于100W个执行任务,使用goroutine的话需要不停创建并销毁100W个goroutine,而使用grpool也许底层只需要几千个goroutine便能充分复用地执行完成所有任务。经测试,在高并发下grpool的性能比原生的goroutine高出几倍到数百倍!并且随之也极大地降低了内存使用率。
- select多路复用:从多个通道取值的操作。
- goroutine是用户态的线程。
- golang默认跑满cpu,一般日志服务要设置核心数,一般占用一个核心即可。
- https://www.liwenzhou.com/images/Go/concurrence/channel01.png channel的各种情况
- channel是一种类型,一种引用类型。
- channel读和存的时候都可以套上select,免得当前goroutine卡住。
- golang的:互斥锁:只有一个goroutine访问共享资源。sync的mutex。
- 互斥锁的根本就是当一个goroutine访问的时候,其他goroutine都不能访问,这样肯定保证了资源的同步,避免了竞争,不过也降低了性能。当我们读取一个数据的时候,如果这个数据永远不会被修改,那么其实是不存在资源竞争的问题的,因为数据是不变的,不管怎么读取,多少goroutine同时读取,都是
golang学习笔记(二)
最新推荐文章于 2024-04-17 07:44:31 发布