有人可以对此有所了解吗?
i7处理器可以运行8个线程,但我很确定我们可以在JAVA或C ++程序中创建超过8个线程(但不确定)。我有一个i5处理器,在研究并发时,我创建了10个线程进行分配。我只是想了解CPU的核心评级与线程的关系。
答案 0 :(得分:8)
您所引用的主题称为软件主题;只要您的操作系统允许,您就可以根据需要创建任意数量的软件线程。每个软件线程或代码段都可以与其他人一起运行 。
对于每个核心,至少有一个 硬件线程,操作系统可以为其分配软件线程。例如,如果你有8个内核,那么你有一个容量为8的硬件线程池。你可以将数十或数百个软件线程映射到这个8插槽池,其中只有8个线程实际上同时在硬件上运行,即 并行 。
软件线程就像人们共享同一台计算机一样。每个人都可以使用这台计算机一段时间,不一定完成任务,然后将其交给另一个人。
硬件线程就像每个人都有一台计算机的人。所有人都可以同时完成任务。
注意:对于i7,每个核心都有two hardware threads(所谓的超线程)。因此,您最多可以并行运行16个线程。
答案 1 :(得分:2)
已经有一些很好的答案谈论硬件方面的事情,但没有太多关于软件方面的讨论。
我相信你缺少的一个重要事实是并非所有线程都必须一直执行。当你在8核机器上有数千个线程时,其中只有少数线程实际上在任何给定时间运行。其他人在一些处理器时间变得空闲之前无所事事。这具有巨大的优势,因为线程可能也在等待其他资源。例如,如果我有一个线程试图从磁盘读取文件,那么它没有理由在等待硬盘数据加载到RAM时占用CPU时间。另一个例子是线程正在等待来自其他某台机器的响应(例如通过互联网的Web请求)。当您拥有的线程数超过处理器可以同时处理的数量时,操作系统和/或运行时(取决于操作系统和运行时实现)将负责决定哪些线程应该获得可用的处理器时间。这种设置可以让您最大限度地提高机器的生产率,因为CPU周期几乎一直在做有用的事情。
答案 2 :(得分:1)
“线程”是一种软件抽象,它通过程序定义单个,自洽的执行路径:在大多数现代系统中,线程数基本上仅受内存的限制。但是,只有相对较少数量的线程可以由CPU同时运行。从广义上讲,“核心数”是CPU可以并行运行的线程数:如果有更多线程要运行而不是有可用内核,操作系统将使用某种时间切片让所有线程有一些时间来执行。
当涉及到“核心:”
时,有很多术语被抛出还应该简单地提到GPU,图形卡具有巨大的核心数量并且并行运行大量(数千)线程。需要权衡的是,GPU核心的内存非常少,而且通常是一种基本上受限制的编程模型。
答案 3 :(得分:0)
答案 4 :(得分:0)
不,不,不...你的I7有8个执行线程,可以同时运行8个线程。
1000个或更多线程可以等待处理器时间。
调用thread.sleep会将一个线程从执行核心移出并返回到内存中等待直到被唤醒。