OriginalGriff
Проблема в том, что когда вы пытаетесь распараллелить "базовый код", вы должны быть осторожны в том, что вы делаете.
x += 1
это "синтаксический сахар", на самом деле это так:
x = x + 1
Что в "машинных терминах" представляет собой короткую последовательность дискретных операций:
1) Load "x" into a register.
2) Add one to the register.
3) Load the register into "x".
Когда вы распараллеливаете эту последовательность, вы получаете несколько задач, выполняющих ее как можно ближе одновременно, и поскольку у вас нет 154 563 отдельных ядер в вашем процессоре, это означает, что все они не выполняют одни и те же шаги одновременно. Таким образом, если у вас есть одно ядро, которое только что загрузило "x" в регистр, и второе ядро, которое как раз собирается загрузить в него новое значение, то первая задача собирается перезаписать пересмотренное значение второй задачи своим новым значением - но поскольку они оба загрузили одно и то же значение, новое значение увеличивается только один раз!
Это усложняется, и есть способы избежать этого, но они эффективно "заставляют" все параллельные задачи выполняться последовательно, потому что весь метод, который вы написали, должен рассматриваться как одна дискретная операция, и это теряет любое преимущество параллельной операции! (На самом деле, это действительно значительно замедлит все это, так как каждый поток нуждается в своем собственном пространстве памяти, стеке, контроллере потоков и потребует значительного объема работы по переключению задач операционной системой.
OriginalGriff
Если ваш код не имеет "значительного размера" - а этот код далек от этого, - то не пытайтесь распараллелить или многопоточить его, вы добавите больше накладных расходов, чем сэкономите, и если у вас нет достаточного количества ядер, чтобы было минимальное "ожидание", вы не испытаете значительного улучшения и вполне можете замедлить процесс.
Конечно, попытка использовать 154 563 отдельных потока для чего-либо обречена на провал!
Параллелизм и многопоточность не являются "волшебными пулями", которые автоматически решают проблемы: они требуют очень тщательного планирования и продуманности перед их реализацией.
В данном случае? Просто забудьте об этом - это не та задача, которая подходит для параллельной работы!