我们公司正在运行Java应用程序(在单个CPU Windows服务器上)从TCP/IP套接字读取数据并检查特定条件(使用正则表达式),如果找到匹配,则将数据存储在MySQL数据库。数据是巨大的,并且以800个记录/秒的速率读取,并且大约70%的记录将是匹配的记录,所以涉及很多数据库写入。该程序正在使用LinkedBlockingQueue来处理数据。生产者类只是读取记录并将其放入队列中,并且消费者类从队列中移除并执行处理。在我的场景中,单个Java线程比多线程更好吗?
所以问题是:如果我使用多个消费者线程而不是单个线程,它会有所帮助吗?在上述场景中线程是否真的有帮助(因为我使用单个CPU)?我正在寻找关于如何加速的建议(无需更改硬件)。
任何建议将非常感激。谢谢
核心数量仅与具有大量cpu绑定应用程序的线程数量相关。我会说绝大多数应用程序不是。 – CurtainDog 2010-08-18 04:39:58
为什么'LinkedBlockingQueue'?数据是否必须按顺序存储在数据库中? – 2010-08-18 04:42:43
我认为你需要在修改应用程序之前对其进行配置。您必须计算IO(网络数据到达)和CPU的百分比利用率。将cpu的数据分批处理是另一种可能的优化。但真正的问题是你真的有性能问题? – questzen 2010-08-18 06:53:07