讲给Java/C++开发者的Go高效并发编程-学习笔记

Channel 没有buffer的,需要发送和接收的同时准备好,不然另一方就会阻塞住
在这里插入图片描述
可以用channel实现 future

在这里插入图片描述

Rate Limit 限流

不是限制并发量,而是限制请求的频率,比如一分钟可以处理10个,但是可能10个都是第一秒请求,就需要进行限制。可以通过token实现

Traps

golang都是传值的,slice 和 channel也是传值的,只不过复制了结构里面的指针

在这里插入图片描述
上图,第一个所有值都是一个,第二个才是正确的。

在这里插入图片描述

上图,第一个 会导致其他的go routine 泄露,因为用的无buffer的channel,其他的会阻塞

Recipes

  • Rate Limit 限流

  • Timeout/Circuit Break 熔断

  • number of Goroutine limit 不建议

在这里插入图片描述
在这里插入图片描述

close之后,channel所有的接收方会有广播的效果,上面的函数会立即返回true

在这里插入图片描述

但是对于父子协程这种复杂的树形关系,用context更好,另外context还可以实现传递消息
在这里插入图片描述

能不用锁,一定不要用锁

在这里插入图片描述

Disruptor框架

key points

  • continuous memory

    使用连续的内存,CPU的catch机制,catch in line,64 byte,读的时候会读一个连续的64字节,

    如果用list等非连续的,可能加载的并非是自己想用的,所以尽量用数组用连续存储空间

  • avoid of the high cost operations(memory allocation, GC)

    slice是数组,但是每次重分配都会有GC和mem 碎片压力

  • Lock Free

  • Leverage modern CPU

    Cache-line/False Share

    Memory Barrier

使用大的mem+偏移量提高性能

视频链接:https://mp.weixin.qq.com/s/5r6VPoOlooMaL_baoVS2GA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值