Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 一个进程如何获得许多CPU周期?_C++_C_Cpu Cycles - Fatal编程技术网

C++ 一个进程如何获得许多CPU周期?

C++ 一个进程如何获得许多CPU周期?,c++,c,cpu-cycles,C++,C,Cpu Cycles,我注意到,当执行从MP4到MP3的文件转换时,VLC media player有时会占用高达98%的CPU。我的理解是,操作系统试图平衡每个进程获得的时间,因此这引起了我的注意。我有一种感觉,像磁盘碎片整理程序和防病毒程序也可能需要如此大的处理器周期。它是如何在代码(C,C++)中实现的 这取决于操作系统,但操作系统试图平衡每个进程获得的时间通常不是首要目标 智能调度程序将利用可用的CPU,同时仍能响应更高优先级的事情,如用户输入和硬件事件。如果没有更多的工作要做(例如阻止事件),一个行为良好的

我注意到,当执行从MP4到MP3的文件转换时,VLC media player有时会占用高达98%的CPU。我的理解是,操作系统试图平衡每个进程获得的时间,因此这引起了我的注意。我有一种感觉,像磁盘碎片整理程序和防病毒程序也可能需要如此大的处理器周期。它是如何在代码(C,C++)中实现的

这取决于操作系统,但操作系统试图平衡每个进程获得的时间通常不是首要目标

智能调度程序将利用可用的CPU,同时仍能响应更高优先级的事情,如用户输入和硬件事件。如果没有更多的工作要做(例如阻止事件),一个行为良好的线程也会在其cpu配额之前收回其时间片,否则在最后期限时,调度程序可能会接管cpu(抢占),并给其他线程一个执行的机会

您可以将线程优先级设置为对调度程序的提示,这可能会影响接管条件,但这完全取决于调度程序和操作系统内部


简单地说,你不需要做特殊的事情来利用cpu核心,如果你有密集的计算,操作系统会给你最大的帮助。

通过使用多线程,一个进程可以在多核cpu上使用更多的计算资源。但我认为您看到的效果是调度器()的正常行为;不是通过代码实现的(虽然调度程序有一些参数可以由客户端设置;
nice
在linux中实现了这一点。因为转换需要做很多工作,所以您做的工作越多,完成它所需的资源就越多。我怀疑碎片整理会占用很多CPU,它相当于I/O限制,即它取决于硬盘的性能。为什么要使用antivirus或碎片整理会导致100%的CPU负载?通常防病毒软件只是在后台监视文件访问。而类似碎片整理的程序通常只在系统空闲时运行,因为它们所做的事情比其他任何事情都不重要。@Zeta:在单核处理器上,如果没有其他进程或线程,它们将使用100%的CPU争夺CPU时间。在多核处理器上,循环将只使用CPU的1/NumberOfCores。但是,如果启动多个线程并在每个线程中运行该循环,则可以使用接近100%的CPU。考虑到您的计算机每秒执行数十亿次操作,并且每隔几秒钟就更新一次漂亮的图形,则不会几乎没有时间了,唯一一个在你的系统上做任何工作的程序会得到所有其他未使用的时钟周期,这不是很自然吗?如果我并行运行编译/测试套件,VLC不会再得到100%。。。