我写了一个oracle sql语法。似乎为解析多个文件而投入更多线程并不会线性加速。相反,有更多线程,内部antlr开销显着增长。
从技术上讲,每个线程都有自己的一组sql文件来解析。值得一提的是,测试是在带有1 TB ssd和64 GB RAM的2处理器至强盒上运行的。
Atached是jprofiler调用图的截图。
请注意,实际计时(使用System.currentTimeMillis()测量)甚至更差 - 因此次优行为不是所使用的探查器的工件。
答案 0 :(得分:0)
生成的Parsers和Lexers包含静态字段(_decisionToDFA,_sharedContextCache),它们在线程之间共享。也许锁定这些是一个问题?您可以测试是否手动将这些重写为ThreadLocal变量帮助。您也可以将它们作为实例变量,但是应该重用Parser和Lexer实例以继续从缓存中获益。