并发编程队列探索
程序员文章站
2022-04-27 15:45:43
...
队列是编程过程中一直在使用,最近使用的频繁一点,做一下总结:
可以作为消息队列的方式有很多,不过场景不同有不同的选择
kafka:异步处理,且能实现分区,比较适合高并发分布式处理(有自动分区实现简单)
生成:异步写\同步写
消费:高级api,简单易用;低级api,可以自如控制offset
BlockingQueue:阻塞队列,这个一般用在同一进程之中,且是线程安全的,多线程下效率有影响
生成:put\offer\add put如果队列满了会一直等待;offer支持传入等待时间,等待时间过了会返回false;add会返回异常
消费:remove\pull\take 如果为空 remove返回异常;pull返回null;take会一直等待
从上面可以看出,使用queue时,必须根据业务场景选择合适的api
Disruptor:lock-free,个人感觉非常适合高并发处理,可以根据自身业务修改为快速失败或者等待
在使用cas的基础上,做了cpu缓存上的优化
redis:大多数场景的选择,不过用作缓存的比较多,用作消息队列的时候比较少
、
可以作为消息队列的方式有很多,不过场景不同有不同的选择
kafka:异步处理,且能实现分区,比较适合高并发分布式处理(有自动分区实现简单)
生成:异步写\同步写
消费:高级api,简单易用;低级api,可以自如控制offset
BlockingQueue:阻塞队列,这个一般用在同一进程之中,且是线程安全的,多线程下效率有影响
生成:put\offer\add put如果队列满了会一直等待;offer支持传入等待时间,等待时间过了会返回false;add会返回异常
消费:remove\pull\take 如果为空 remove返回异常;pull返回null;take会一直等待
从上面可以看出,使用queue时,必须根据业务场景选择合适的api
Disruptor:lock-free,个人感觉非常适合高并发处理,可以根据自身业务修改为快速失败或者等待
在使用cas的基础上,做了cpu缓存上的优化
redis:大多数场景的选择,不过用作缓存的比较多,用作消息队列的时候比较少
、
上一篇: php生成验证码与验证码验证完整实例
下一篇: 【转】聊聊高并发系统之队列术