Io Erlang消费队列

Io Erlang消费队列,io,erlang,queue,throughput,Io,Erlang,Queue,Throughput,我有一个问题,我想把离散的数据块从磁盘拉到一个队列中,然后把它们排到另一个进程中。此数据随机位于磁盘上,因此无法从顺序读取中获得实质性好处。它有很多数据,所以我不能一次加载所有数据,也不能一次加载一个块 我希望消费者能够以自己的速度运行,但要为它准备一个健康的数据队列,这样我就不会在处理数据块时一直等待磁盘读取 有没有一个既定的方法来做到这一点?即使用作业框架或安全阀?实现这一点感觉就像重新发明轮子,作为一个在磁盘数据上操作的缓慢消费者是一个常见的问题 关于如何以Erlang方式最好地解决这个问

我有一个问题,我想把离散的数据块从磁盘拉到一个队列中,然后把它们排到另一个进程中。此数据随机位于磁盘上,因此无法从顺序读取中获得实质性好处。它有很多数据,所以我不能一次加载所有数据,也不能一次加载一个块

我希望消费者能够以自己的速度运行,但要为它准备一个健康的数据队列,这样我就不会在处理数据块时一直等待磁盘读取

有没有一个既定的方法来做到这一点?即使用作业框架或安全阀?实现这一点感觉就像重新发明轮子,作为一个在磁盘数据上操作的缓慢消费者是一个常见的问题


关于如何以Erlang方式最好地解决这个问题,您有什么建议吗?

您可以在以下位置使用
{read_ahead,Bytes}
选项:

{read_ahead,Size}

此选项激活读取数据缓冲。如果
read/2
调用的字节数明显小于
Size
字节数,则仍会对
Size
字节块执行对操作系统的读取操作。额外的数据被缓冲并在后续的
read/2
调用中返回,由于操作系统调用的数量减少,因此性能有所提高

read_-ahead
缓冲区也被
read_-line/1
功能在
raw
模式下高度利用,为什么在使用该功能访问原始文件时建议使用此选项(出于性能原因)

如果
read/2
调用的大小不明显小于或甚至大于
Size
字节,则无法预期性能提高


您对所提到的使用的大小一直含糊不清,但似乎玩弄缓冲区大小应该是实现所需功能的良好开端。

预读将在每次读取时加载更多数据,以便后续读取具有更好的吞吐量,但读取不是连续的。我正在读取分散在底层文件中的数据。因此,这有时可能会有所帮助,但将入站数据缓冲到顺序消费的队列中会更好。我在想,一个工作队列填满某个阈值,然后由消费者以自己的速度耗尽,这是最有意义的,但是工作似乎并不特别适合这个用例。我会用这些信息更新原始问题。我已经做了编辑。我将提前实现read_,只是为了测试我对性能的假设,谢谢你的建议。