如何防止 open_port 的消息泛滥?

How do I prevent message flooding with open_port?

我正在尝试使用

一次一行地通过标准输入读取一个 100GB 的文件
Port = open_port({fd, 0, 1}, [in, binary, {line, 4096}]),

但这会使我的系统充满消息,直到我 运行 内存不足。有没有办法让它像端口一样{active, once}?还有 io:get_line() 但我想知道这是否可行。

不,端口没有流量控制,所以如果您的处理速度不够快,您应该使用其他处理方法。您可以使用

STDIN 上设置二进制模式
ok = io:setopts(standard_io, [binary]),

如果您使用的是版本 17 或更高版本(存在影响性能的错误),您可以使用 file:read_line(standard_io) 阅读它。