高性能队列Disruptor、Linux环形缓存用到了循环并发队列
Java concurrent并发包利用ArrayBlockingQueu实现公平锁
循环队列:队空head==tail,队满(tail+1)%n=head,取余是为了将tail的值降到[0,n-1]的区间,而且为了从头取出数据时,也必须head=(head+1)%n;同时,循环队列为了进行队满和队空的区分,浪费了一个存储空间
阻塞队列(生产者-消费者模型):队列为空时,取数据会被阻塞;队列满时,插入数据会被阻塞。可以调节生产消费速度
并发队列:基于数组的循环队列,加上CAS原子操作
应用场景:
资源池,当没有空闲资源时,可以拒绝,也可以将请求排队。
排队时,【1】基于链表实现无界队列,但是可能会导致过多的请求排队,请求的相应时间过长,不适合响应敏感的系统
【2】基于数组实现的有界队列,超过队列的长度,请求就被拒绝,但是需要设置一个合理的队列大小