所以最近我学到了一些关于多线程的基本知识。我所理解的是,线程是一个轻量级进程,它通过共享内存在进程下运行,而一个进程在一个CPU核心下运行。
然而,从这个角度来看,我无法理解一些说法,即线程利用多个核心,使整个程序执行更有效。据我所知,一个进程创建的线程应该只在该特定进程下运行,这意味着它应该只在一个CPU核心下运行。如果我们想使用多个核心,我们实际上应该使用多进程并行运行。我研究的大部分内容只是关于结论,即多线程使用多个核心,但没有一个能解释我的问题。我觉得有什么不对吗?谢谢
您的困惑在于:
[…]同时一个进程在一个CPU内核下运行。
[…]由一个进程创建的线程应该只在该特定进程下运行,这意味着它应该只在一个CPU核心下运行。
这不是真的。我认为你读到的各种解释意味着任何进程都有至少一个线程(其中"线程"是由CPU内核运行的指令序列(。
如果你有一个多线程程序,这个进程将有几个线程(由一个CPU内核运行的指令序列(,可以在不同的CPU内核上同时运行。
在任何给定的时间,您的计算机上都有许多进程在执行。操作系统(OS(是将硬件资源(CPU内核(分配给所有这些进程并决定哪个进程可以在另一个进程使用CPU之前使用哪些内核多长时间的程序。一个进程是否能够使用多个核心并不完全取决于该进程。更令人困惑的是,多线程程序可以使用比计算机CPU上的内核更多的线程。在这种情况下,您可以确定所有线程不是并行运行的。
还有一件事:
[…]线程利用多个内核,使整个程序执行更有效的
我听起来很迂腐,但比这更复杂。这取决于你所说的";有效";。我们谈论的是总计算时间、能耗吗。。?
就功耗而言,顺序(1线程(程序可能非常有效,但计算时间非常长。如果你能够使用多个线程,你可能会减少计算时间,但这可能会产生新的成本(线程之间的同步,针对并发访问的额外保护机制…(
此外,多线程对CPU领域之外的某些任务也没有帮助。例如,除非您有一些非常特定的硬件支持,否则从具有2个或更多并发线程的硬盘驱动器读取文件将无法有效地并行化。