我有一个要解析的二进制文件。该文件分为每个1024字节的记录。所需的高级步骤是:
我不是在寻找代码,只是在设计/方法帮助。
由于I/O的限制,我认为尝试并发读取文件没有任何意义。但是,我看不出为什么无法使用goroutines解析1024字节的记录,从而无法同时解析多个1024字节的记录。我是Go的新手,所以我想看看这是否有意义,或者是否有更好(更快)的方法:
我必须确保我也不会用完内存,因为文件的大小可以从几百MB到256 TB(稀有,但可能)。这有意义还是我在错误地考虑这个问题?这会比我一次读取1024个字节时以线性方式简单地解析文件要慢,还是会随着字节数组的性能更好而同时解析这些记录呢?还是我在想这个问题全错了?
我不是在寻找代码,只是在设计/方法帮助。
Cross-posted on Software Engineering
最佳答案
这是producer-consumer problem的一个实例,其中生产者是生成1024字节记录的主要功能,而使用者应处理这些记录并将其发送到 channel ,以便将它们添加到最终 slice 中。有一些questions tagged producer-consumer and Go,它们应该帮助您入门。至于最快的情况,则取决于很多事情,因此实际上无法回答。最好的解决方案可能是从完全顺序实现到服务器集群的任何位置,在该服务器集群中,RabbitMQ或类似的东西在其中移动记录。