【发布时间】:2014-01-21 13:00:19
【问题描述】:
我需要处理数百万个线程,我知道它非常依赖于硬件配置和 jvm。 我已经为任务使用了执行者
我的项目的调用流程:
用户(移动)----->服务器(电信)----->应用程序----->服务器(电信)----->用户
代码调用流程: A-------->B---------->C
//Code snippet of A
public static final int maxPoolSize=100;
ExecutorService executorCU=Executors.newFixedThreadPool(maxPoolSize);
Runnable handleCalltask=new B(valans, sessionID, msisdn);
executorCU.execute(handleCalltask);
//Code snippet of B
public static final int maxPoolSize=10;
ExecutorService executor=Executors.newFixedThreadPool(maxPoolSize);
Runnable handleCalltask=new c(valans, sessionID, msisdn);
executor.execute(handleCalltask);
还有共享地图,我实现为 concurrencyHashMap,它在应用程序加载时被加载。
我的方法是否正确,如果不是,任何人都可以建议我如何在我的 Web 应用程序中实现最大线程。
我用 Jmeter 测试过,结果一点也不令人鼓舞。
谢谢。
【问题讨论】:
-
需求从何而来?您可能应该去workplace.stackexchange.com 并询问“我如何向我疯狂的老板或客户解释数百万个线程是个坏主意”
-
数百万个线程 -> 数百万个调用堆栈 -> 为它们准备的 TB 内存。
-
此外,数百万线程 + 共享状态并发......这无疑是最大化资源匮乏的好方法。
ConcurrentHashMap在这里帮不了你。如果您认真研究此问题,那么您将必须考虑类似Apache Storm。 -
@Suresh 您的要求超出了天真的共享状态并发可以做到的任何事情,而不会受到巨大的惩罚。我怀疑该要求只是指定错误,但如果不是,您真的需要阅读更高级的并发主题。
-
不要将数百万并发连接/请求与数百万线程混淆。请求排成一列,而适度的线程团队为它们提供服务。
标签: java multithreading threadpool