如何防止 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)
阅读它。
我正在尝试使用
一次一行地通过标准输入读取一个 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)
阅读它。