【发布时间】:2010-08-18 03:33:15
【问题描述】:
我们公司正在运行 Java 应用程序(在单 CPU Windows 服务器上)从 TCP/IP 套接字读取数据并检查特定条件(使用正则表达式),如果找到匹配项,则将数据存储在MySQL 数据库。数据量很大,以每秒 800 条记录的速度读取,大约 70% 的记录将是匹配记录,因此涉及大量数据库写入。该程序使用 LinkedBlockingQueue 来处理数据。生产者类只是读取记录并将其放入队列,消费者类从队列中删除并进行处理。
所以问题是:如果我使用多个消费者线程而不是单个线程会有帮助吗?线程在上述情况下真的有用吗(因为我使用的是单 CPU)?我正在寻找有关如何加快速度(不改变硬件)的建议。
任何建议将不胜感激。谢谢
【问题讨论】:
-
核心数仅与 CPU 密集型应用程序的线程数有关。我想说绝大多数应用程序不是。
-
为什么是“LinkedBlockingQueue”?数据是否必须有序地存储在数据库中?
-
我认为您需要在更改应用程序之前对其进行概要分析。您必须计算 IO(网络数据到达)和 CPU 的利用率百分比。批处理数据以供 cpu 处理是另一种可能的优化。但真正的问题是你真的有性能问题吗?
标签: java multithreading sockets tcp