先进先出队列的应用非常广泛,它见诸于各式各样的应用程序当中。举个例子,很多电商网站都会在节日时推出一些秒杀活动,这些活动会放出数量有限的商品供用户抢购,秒杀系统的一个特点就是在短时间内会有大量用户同时进行相同的购买操作,如果使用事务或者锁去实现秒杀程序,那么就会因为锁和事务的重试特性而导致性能低下,并且由于重试的存在,成功购买商品的用户可能并不是最早执行购买操作的用户,因此这种秒杀系统实际上是不公平的。

    解决上述问题的其中一个方法就是把用户的购买操作都放入到先进先出队列里面,然后以队列方式处理用户的购买操作,这样程序就可以在不使用锁或者事务的情况下实现秒杀系统,并且得益于先进先出队列的特性,这种秒杀系统可以按照用户执行购买操作的顺序来判断哪些用户可以成功执行购买操作,因此它是公平的。


    代码清单 4-1 使用列表实现的先进先出队列:


    作为例子,我们可以通过执行以下代码,载入并创建一个先进先出队列:

    最后,按照先进先出顺序,依次从队列中弹出相应的购买请求:

    可以看到,队列弹出元素的顺序跟元素入队时的顺序是完全相同的:最先是 元素,接着是 元素,最后是 元素。