我知道内核越多并不总是越好,而且大多数应用程序都是单线程的,但是操作系统会利用额外的内核吗?例如,假设有一个应用程序,如字典暴力破解器。如果程序实际上是多线程的,那么在四核处理器上运行四个单独的实例(在单独的 1/4 字典上)是否能获得相同的好处?本质上,操作系统是否会允许所有四个实例真正同时运行而不会抢占?
我倾向于同时运行许多独立的应用程序(带有大量选项卡的 Firefox、办公、聊天、开发工具、游戏)。
答案1
一般来说,是的,如果内核可用(即其他程序未使用它们),操作系统会将程序的 4 个实例分布在 4 个内核上。与使用 4 个线程相比,这可以为您带来类似的好处,但潜在的开销除外(例如,4 个线程很可能共享任何已加载字典的一个副本,而 4 个进程很可能各自加载字典的单独副本)。
答案2
要利用所有可用核心,您需要 (a) 操作系统的支持,以及 (b) 能够利用多个核心的应用程序工作负载。操作系统的支持是所有现代操作系统的必然选择,因此这取决于您的应用程序工作负载是否能够利用多个核心。
如果您同时运行多个应用程序,那么多核将为您带来好处。如果多个程序都试图同时运行,操作系统会将它们调度到多个核上。
如果您一次只使用一个应用程序,那么多核是否对您有帮助取决于该应用程序。具体来说,这取决于该应用程序是编写为多线程还是单线程。单线程应用程序一次只执行一项任务,因此只能使用一个内核。多线程应用程序会创建多个线程来同时执行多项任务,从而使操作系统能够将每个线程安排在不同内核上,并可能提高多核处理器的速度。
应用程序需要经过专门设计和编写才能使用多线程并充分利用多核,许多常见应用程序无法从多核中获益,但有些应用程序却能。例如,Photoshop 的编写方式是,如果您要求它执行一项计算量大的任务,它会将任务分解为较小的部分,并将这些部分分配到多个线程中,以便它们可以在多个内核上运行。这需要 Photoshop 开发人员进行特殊编程,并且需要开发人员付出大量额外努力,因此许多或大多数应用程序都没有费心使用这种编程风格,也不会从多核机器中获益太多,但有些应用程序会。
鉴于您倾向于同时运行许多独立程序,您可能会从多核处理器中看到至少一些好处。