Почему два одинаковых процесса не принимают двойную нагрузку на процессор

Я использую Raspberry Pi 3 и в основном перешагнул через небольшую путаницу.

У меня очень большая и сложная программа, которая отнимает много памяти и имеет большую нагрузку на процессор. Я думал, что это нормально, что если я запустил тот же процесс, пока первый еще работал, он занял бы тот же объем памяти и особенно удвоил загрузку процессора. Я обнаружил, что это не отнимает больше памяти и не влияет на загрузку процессора.

Чтобы выяснить, происходит ли такое поведение от моей программы, я написал крошечную программу на С ++, которая использует чрезвычайно много памяти, вот она:

#include <iostream>

using namespace std;

int main()
{
    for(int i = 0; i<100; i++) {

        float a[100][100][100];
        for (int i2 = 0; i2 < 99; ++i2) {
            for (int i3 = 0; i3 < 99; ++i3){
                for (int i4 = 0; i4 < 99; ++i4){
                    a[i2][i3][i4] = i2*i3*i4;
                    cout << a[i2][i3][i4] << endl;
                }
            }
        }
    }
    return 0;
}

Загрузка процессора составляет около 30 % от максимального уровня, я запустил код в одном терминале. Как ни странно, когда я одновременно запустил его в другом терминале, это не повлияло на загрузку процессора. Я пришел к выводу, что это поведение не может исходить из моей программы.

Теперь я хочу знать:

  • Есть ли "замок", который гарантирует, что определенный тип процесса не решит ваши ядра?

  • Почему два одинаковых процесса не удваивают загрузку процессора?

1 ответ

Решение

Что ж, я обнаружил, что существует "блокировка", которая гарантирует, что процесс не забирает всю память и увеличивает нагрузку на процессор до 100%. Кажется, что чем больше процессов, тем больше загрузка ЦП, но не линейно.

Кроме того, код, который я написал для поиска поведения, имеет только высокое использование памяти, уровень 30% пришел из cout в стандартной библиотеке. Несколько процессов могут использовать команду одновременно, не увеличивая загрузку ЦП, но это влияет на скорость печати.

Когда я узнал об этом, я заподозрил скорость программ. Я использовал аналитику в моей среде IDE для C++, чтобы узнать продолжительность моей исходной программы, и действительно она была чуть более чем в два раза медленнее.

Похоже, это то решение, которое я искал, но я думаю, что это не совсем применимо для большой аудитории, поскольку структура Raspberry Pi очень специфична. Я не знаю, как это работает для других систем.

Кстати, я мог бы догадаться, что есть замок. Я имею в виду, что если вы запустите 10 процессов, которые убирают 15% от максимального уровня загрузки процессора, вы будете использовать 150% загрузки процессора. НЕВОЗМОЖНО!

Другие вопросы по тегам