Suj*_*jay 2 java file-io multithreading random-access
我有一个包含信息块的二进制文件(我将其称为数据包).每个数据包由一个固定长度的头和一个可变长度的主体组成.我要从包头本身确定身体的长度.我的任务是从文件中读取这些数据包并对它们执行一些操作.目前我正在执行以下任务:
你可以猜到,当文件大小很大时,连续读取每个数据包并处理它是一件非常耗时的事情.我想以某种方式并行化这个操作,即数据包生成操作,并将其放入一些阻塞队列,然后从队列中并行检索每个数据包并执行我的操作.
有人可以建议我如何并行生成这些数据包?
您应该只在文件中按顺序读取一个线程,因为我假设文件位于单个驱动器中.读取文件受到IO速度的限制,因此在CPU中并行化是没有意义的.实际上,非顺序读取实际上会显着降低性能,因为常规硬盘设计用于顺序IO.对于它读入的每个数据包,它应该将该对象放入一个线程安全的队列中.
现在您可以开始并行处理数据包了.创建多个线程并让它们分别读入队列中的数据包.每个线程都应该进行处理并将其放入一些"已完成"的队列中.
一旦IO线程读完文件,就应该设置一个标志,以便在队列为空时工作线程停止.