队列汇总

来源:互联网 发布: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);

0 0