【发布时间】:2013-09-20 14:07:23
【问题描述】:
我正在从日志文件中提取与模式匹配的行。因此,我将每个日志文件分配给一个 Runnable 对象,该对象将找到的模式行写入结果文件。 (同步良好的 writer 方法)
正在讨论的重要sn-p:
ExecutorService executor = Executors.newFixedThreadPool(NUM_THREAD);
for (File eachLogFile : hundredsOfLogFilesArrayObject) {
executor.execute(new RunnableSlavePatternMatcher(eachLogFile));
}
重要标准:
日志文件的数量可能很少,比如 20 个,或者对于某些用户来说,日志文件的数量可能超过 1000 个。我在 Excel 表中记录了一系列测试,我真的很关心标记为 RED 的结果。
1.我假设如果创建的线程数等于要处理的文件数,那么与线程数小于文件数的情况相比,处理时间会更短。要处理的文件没有发生。 (如果我的理解有误请指教)
结果:
- 我想为 NUM_THREAD 确定一个值,该值对于更少的文件以及 1000 个文件都很有效
建议我回答问题 1 和 2
谢谢! 钱德鲁
【问题讨论】:
-
除了第一行,你所有的数字看起来都差不多。我没有发现任何重大问题。
-
@MarkoTopolnik 也许是因为初始属性文件变量初始化。您能否建议一个适合任何情况的 NUM_THREAD 值(无论是 10 个文件还是 1000 个文件?将 500 作为值是个好主意)
-
最佳数量高度依赖于上下文:您拥有多少内核,每个线程花费多少等待 I/O 操作,一个文件的读取速度因读取另一个文件而减慢了多少文件(磁盘寻道时间)等
标签: java multithreading performance executorservice