4

好的,所以我用标记了这个问题, 因为我主要考虑它,因为这是我目前正在编写的语言。然而,这在编程世界中同样普遍。

我的问题是:处理器可以处理的线程数是否有任何限制,以及我的应用程序最大化此限制的可能性有多大?如果我这样做会发生什么?

我对线程知之甚少——我只知道它们使您能够同时执行两个进程(这甚至可能不是正确的术语)。最初,我认为单核处理器不允许多线程,但后来常识开始了,我想在 Windows 和其他东西的情况下这是不可能的。但现在我想知道,单核和多核处理器有什么区别/多核处理器允许什么?

以最简单的术语进行解释将不胜感激。提前致谢

4

5 回答 5

5

处理器通常一次可以运行一个线程。然而,它可以处理的远不止这些。当您有多个进程在运行时,您的处理器会非常快速地在它们之间切换,从而为每个进程提供处理器时间的一部分。这给人一种并发的错觉,但实际上一切都是串行发生的。

您可以运行的线程数量并没有真正的硬性限制,但是当处理器在线程之间切换时产生开销。如果您正在使用 GUI 构建应用程序,最好为长时间运行的任务生成一个单独的线程,以便 GUI 可以保持响应。如果您希望在具有多个处理器或其他允许真正并发的解决方案的计算机上运行,​​您可以尝试通过在单独的线程中运行来利用它,但这确实会使您的问题更加复杂并且可能导致难以解决的错误追查。

今天大多数计算机都是多核的,实际上可以同时运行多个线程。事实上,更多的并发性,而不是更强大的单个处理器,很可能是计算机未来的发展方式。能够利用这一点很重要,但也很难。如果您没有特定的理由让您的应用程序成为多线程的,我建议您避免使用它,直到您觉得这样做很舒服。

于 2012-07-27T12:15:23.810 回答
3

在 Java 中,当您用完内存来处理线程时,您将遇到创建线程的限制。我在 2GiB 的 RAM 上花了大约 10,000 来完成这项工作。一旦你点击了一个,OutOfMemoryException你就会遇到问题,除非你已经打开了一个 shell/任务管理器,因为你可能会努力杀死 JVM 进程。

就处理器而言,它们一次只运行 1 个(或 2 个)内核。调度程序(操作系统的一部分)的工作是分配时间,因此线程 A 将运行一点点,然后是线程 2 等。通过这种方式,它们允许您一次执行多项操作。如果您有一个多核 cpu,调度程序还将负责分配哪个线程到哪个内核,让您无需额外努力即可利用这一点。

一般来说,你不需要太担心这个。当您需要同时处理事物时,只需创建多个线程(例如,GUI 代码必须在后台任务发生时继续处理)。无论如何,大多数应用程序都有 <20 个线程。

于 2012-07-27T12:09:00.103 回答
2

处理器可以处理的线程数是否有任何限制,

它只能运行一两个(使用超线程)。一些 sparc 处理器最多可以处理 16 个。

在考虑创建大量线程时值得记住这一点,因为创建更多线程可能效率低下(特别是如果进程受 CPU 限制)

我只知道它们使您能够一次执行两个进程

一个“进程”包含一个或多个线程。即“过程”具有特定含义。

单核和多核处理器有什么区别/多核处理器允许什么

多个核心可以同时运行多个线程。单个内核可以模拟运行多个线程(足够快你不会注意到)

只要您有足够的线程来使用所有内核,您就可以获得吞吐量的线性提升。例如,如果您可以使用一个内核每秒处理 10,000 个请求,那么您可能可以使用 8 个内核每秒处理 80,000 个请求。

于 2012-07-27T12:03:18.013 回答
0

我想您知道只有少量(取决于处理器)真正可以并发运行的线程。但是我想您是在问总共可以处理多少个线程(并且不时切换)。

我认为线程总数可能有一个限制(取决于操作系统和使用的硬件) ,但你肯定不会达到这个最大值。之前,您会遇到大量的性能问题,因为(从特定数量的线程开始)更多的线程不会带来更多的性能,而是相反。

然而,这条线,从那里你不会通过更多的并行度获得更多的性能,而不是你的核心数量,而是可以高出两到四倍。

于 2012-07-27T12:08:28.930 回答
0
Is there any limit to how many threads a processor can handle?

1) 您的计算机可以同时执行与可用 CPU 中的内核一样多的 RUNNING 线程。

2)如果需要执行的线程多于内核数,则操作系统应用调度算法来决定在任何进入操作系统的硬件中断或系统调用并更改需要执行的线程集之后运行哪一组线程。

3)未运行/准备运行的线程,即。正在等待 I/O 或彼此,只是虚拟内存中的死代码/堆栈空间,因此不会产生直接开销。

概括:

处理器可以处理的运行线程的限制与内核的数量相同。

操作系统/内存系统限制任何状态下的线程总数。

于 2012-07-27T12:45:23.593 回答