一个二进制文件,同时解析记录,我有我想分析的二进制文件。该文件被分解成每个都是1024字节的记录。所需的高级步骤是:在围棋
- 从文件中一次读取1024个字节。
- 解析每个1024字节的“记录”(块),并将解析的数据放置到的地图或结构。
- 将解析的数据返回给用户和任何错误。
我不是在寻找代码,只是设计/方法的帮助。
由于I/O限制,我认为从文件中尝试并发读取是没有意义的。但是,我没有看到为什么无法使用goroutine分析1024字节的记录,以便同时解析多个1024字节的记录。我是新来走,所以我想看看这是有道理的,或者有更好的(更快)的方式:
- 主要功能打开文件,并在同一时间为字节数组,读取1024个字节(记录)。
- 记录被传递给一个将数据解析为映射或结构的函数。解析器函数将作为每条记录上的goroutine调用。
- 解析后的地图/结构通过通道附加到切片。我将预先分配由slice管理的底层数组作为文件大小(以字节为单位)除以1024,因为这应该是元素的确切数目(假设没有错误)。
我不得不确保我没有用完内存,因为文件可以从几百MB到256TB(罕见但可能)。这是否合理?还是我错误地考虑了这个问题?这是否比仅仅以一种线性方式解析文件要慢?因为我一次读取1024个字节,或者当字节数组执行得更好时,会同时解析这些记录?还是我在想这个问题都是错的?
我不是找代码,只是设计/方法的帮助。
Cross-posted on Software Engineering
如果你想知道哪种方法比较快,就需要比较基准。使其并发的开销可能会否定任何节省,但如果没有执行测试,我们只是在猜测。 – JimB