并发编程队列探索

队列是编程过程中一直在使用,最近使用的频繁一点,做一下总结:

可以作为消息队列的方式有很多,不过场景不同有不同的选择

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:大多数场景的选择,不过用作缓存的比较多,用作消息队列的时候比较少




猜你喜欢

转载自guoke456.iteye.com/blog/2373084
今日推荐