96线程和6500线程之间的差异?

时间:2018-04-08 17:48:03

标签: java multithreading

我最近在post中读到我可以运行96个线程。但是,当我查看我的PC性能以及this之类的帖子时,我发现有数千个线程可以运行。

我认为线程这个词在这里用于两个不同的事情(如果我错了并解释,请纠正我)。我想知道两个“线程”之间的区别是什么。为什么一个帖子说92但另一个说6500?

1 个答案:

答案 0 :(得分:0)

答案是:两个链接" talk"关于同一个线程。

主要区别在于:第一个是有效地询问给定CPU可以真正并行执行的线程数。

另一个链接说明了在某个范围内(例如一个JVM)可以共存的线程数。

换句话说:主要的想法"线程背后是...大多数时候,他们都是空闲的!因此,拥有6400个线程可以解决 - 假设您的工作负载是这样的,99.9%的时间,每个线程都无所事事(例如:等待某事发生)。但是当然:这么高的数字可能不是一个好主意,除非我们谈论的是一个拥有数以万计核心的巨大服务器。需要记住的是,线程也是操作系统拥有的资源,以及使用"更多线程"解决的许多问题。在过去没有不同的答案(例如使用 nio 包和非阻塞io而不是让数以万计的线程等待响应)。

含义:当您编写示例代码时,每个线程只计算一些东西(因此,如果单独运行,该线程将消耗100%的可用CPU周期) - 那么添加更多线程只会在系统上产生更多负载。

通常,现代CPU具有 c 核心。每个核心可以并行运行 t 线程 。所以,你经常喜欢4 x 2线程,可以并行占用CPU。但是,只要您的线程花费更多时间无所事事(等待磁盘读取或网络请求返回),您就可以轻松创建,管理和使用数百甚至数千个线程。