队列汇总
来源:互联网 发布:led单色显示屏软件 编辑:程序博客网 时间:2024/05/22 01:38
消息队列可以把消息产生和消息处理解耦合,分离开来,并且可以避免了使用线程或进程同步的锁
是一个典型的生产者消费者模式
生产者生产数据入队列=>队列缓存=>消费者取数据
队列采用先进先出的阻塞队列,队列前后分别有至少一个线程,前一线程负责往队列中放数据,后一线程负责从队列中取数据进行分析处理等操作
经典的队列应用:
1.内存队列
2.无锁内存队列Ringbuffer
3.EventBus(EventBus是一款针对Android优化的发布/订阅事件总线,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦)
4.分布式队列kafka(一种高吞吐量的分布式发布订阅消息系统,kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理)
5.akka(消息传递-事件驱动、分而治之无锁无阻塞、无共享内存,就像发邮件一样简单)
CAS(Compare and swap)乐观锁
是一种有名的无锁(lock-free)非阻塞算法
算法:
public final int getAndIncremet()
{
while(1)
{
long current = get();
long next = current+1;
if(compareandSet(current,next))
return current;
}
}
实现互斥锁的功能两个函数:
bool __sync_bool_compare_and_swap (type*ptr, type oldval, type newval, ...)
type __sync_val_compare_and_swap (type *ptr, type oldval, type newval, ...)
原子性操作函数,多线程对全局变量进行自加,我们就再也不用理线程锁
type __sync_fetch_and_add (type *ptr, type value);
type __sync_fetch_and_sub (type *ptr, type value);
type __sync_fetch_and_or (type *ptr, type value);
type __sync_fetch_and_and (type *ptr, type value);
type __sync_fetch_and_xor (type *ptr, type value);
type __sync_fetch_and_nand (type *ptr, type value);
type __sync_add_and_fetch (type *ptr, type value);
type __sync_sub_and_fetch (type *ptr, type value);
type __sync_or_and_fetch (type *ptr, type value);
type __sync_and_and_fetch (type *ptr, type value);
type __sync_xor_and_fetch (type *ptr, type value);
type __sync_nand_and_fetch (type *ptr, type value);
- 队列汇总
- 数据结构经典算法汇总___循环队列:
- 数据结构之栈和队列题目汇总
- 4.2 内核工作队列原理汇总
- 栈和队列经典题目汇总
- 基于Redis实现分布式消息队列(汇总目录)
- 算法-1-堆和队列-汇总(持续更新)-目录呈现
- 【原创】STL部分常用数据结构用法汇总 -优先队列,set
- 汇总
- 汇总
- 汇总
- 汇总
- 汇总
- 汇总
- 汇总
- 数据结构类型定义及基本操作汇总(一)--线性表,单链表,栈和队列
- 面试准备系列02----面试中的栈和队列题目汇总
- 算法-第四版-1.3 背包、队列和栈-习题索引汇总
- Android插件—H.A.X.M(硬件加速执行管理器)
- LeetCode 027 Remove Element
- ngx_http_rewrite_module
- 【TBC】关于Oracle的一些零碎问题的记录
- spring batch + spring boot 配置
- 队列汇总
- Slick 3.0.0 RC1 发布,Scala 数据库访问层
- spring mvc常用配置
- oracle 11.2.0.4 查找还在使用默认密码的用户
- oracle删除当前用户所有表,视图,存储过程等
- 浅谈 ScrollView 用法
- Flume
- RBAC用户权限管理数据库设计
- PL/SQL Developer导入导出数据库