使用Elixir进行简单,高效的FIFO队列

时间:2016-01-30 14:23:38

标签: elixir

是否有可用于Elixir中FIFO队列的内置数据类型?

我查看了列表,但似乎获得列表尾部效率不高?也许我对此错了?

我的队列需要容纳100,000个或更多元素。 我需要的是,我为音频生成{t,y}形式的44100个元组。我试图实现一个延迟,所以我需要在将音频发送到处理管道之前排队几秒钟(最多可能是10个?)。

1 个答案:

答案 0 :(得分:15)

我不确定100,000或更多元素的性能,但看起来你正在寻找documentation。它是由Erlang / OTP提供的FIFO队列。

示例:

iex(39)> queue = :queue.new                            
{[], []}
iex(40)> queue = :queue.in(1, queue)                   
{[1], []}
iex(41)> queue = :queue.in(2, queue)                   
{[2], [1]}
iex(42)> queue = :queue.in(3, queue)
{[3, 2], [1]}
iex(43)> :queue.out(queue)                             
{{:value, 1}, {[3], [2]}}
iex(44)> {{:value, head}, queue} = :queue.out(queue)
{{:value, 1}, {[3], [2]}}
iex(45)> head
1
iex(46)> {{:value, head}, queue} = :queue.out(queue)
{{:value, 2}, {[], [3]}}
iex(47)> head
2
iex(48)> {{:value, head}, queue} = :queue.out(queue)
{{:value, 3}, {[], []}}
iex(49)> head
3
iex(51)> :queue.out(queue)        
{:empty, {[], []}}