我想通过10个线程访问一个大文件(文件大小可能从30MB到1GB不等),然后通过10个线程处理文件中的每一行并将它们写入另一个文件。如果我只使用一个线程访问IO,其他线程就会被阻塞。该处理花费的时间几乎相当于从文件系统读取一行代码。还有一个限制,输出文件中的数据应与输入文件中的数据顺序相同。
我想了解您对这个系统设计的想法。是否有现有的API支持文件的并发访问?
此外,写入同一文件可能会导致死锁。
如果我担心时间限制,请建议如何实现这一目标。
我将从三个线程开始。
- 读取数据的读取器线程,将其分成“行”并将它们放入有界阻塞队列(Q1)中,
- 一个处理线程从 Q1 读取数据,进行处理并将它们放入第二个有界阻塞队列 (Q2),以及
- 从 Q2 读取数据并将其写入磁盘的写入器线程。
当然,我还要确保输出文件与输入文件位于不同的物理磁盘上。
If processing tends to be faster slower than the I/O (monitor the queue sizes), you could then start experimenting with two or more parallell "processors" that are synchronized in how they read and write their data.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)