Параллелизм. Это слово означает «вещи, которые происходят или существуют вместе в одно и то же время». Программисты и инженеры в 1960-х годах объединились в IBM, чтобы возглавить SMT, или одновременную многопоточность. Что это значит? Это означает, что ребята, которые создали конкретный язык, дали вам, смертным, возможность разделить кусок кода и распределить его между вашими жаждущими процессорами, в основном РАВНОМЕРНО!

Необходимость возникла, когда МНОГО кода, я говорю о коде, который высадил нас на Луну (якобы), нужно было обрабатывать быстрее. Когда технология стала ленивой, умные люди, называемые программистами, придумали решение. Они сказали, что каким бы большим ни был процессор, задачи все равно будут выполняться медленно, если только код не распределяется везде по центральному процессору, где он выполняет свою работу, а затем, как нити, отделившиеся от одной веревки, возвращаются обратно и присоединиться.

Потоки объединяются, когда мы вызываем определенную функцию, и это приводит к окончательному объединению задачи.

Это была теория. Далее следует код, который я написал на C++ с несколькими абстрактными концепциями, такими как лямбда-функции и объектно-ориентированное программирование. Так что продолжайте на свой страх и риск.

(1) Импорт

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

(2) Вызываемый

Вызываемый объект может возвращать вычисленный результат, выполненный потоком, в отличие от исполняемого интерфейса, который может запускать только поток.

В моем примере я буду использовать три разных типа вызываемых объектов и доступные подходы для абсолютных новичков.

Первая — это простая функция в качестве вызываемой.

Второй будет целым классом, у которого будет создан вызываемый объект, потому что C++ объектно-ориентирован, так почему бы и нет.

И последняя — наша любимая лямбда-функция. Если вы понятия не имеете, что это такое, или недостаточно уверены, то обязательно пропустите эту часть.

Надеюсь, вы следите за своими причудливыми IDE, а за OG — вашими VIM, хе-хе.

Далее следует часть, где происходит волшебство. Функция main().

Первые три строки кода — это создание потоков (th1, th2 и th3). Эти три строки используют #include ‹thread›импорт и внутренне делят код на три отдельные независимые процедуры, которые займут свои места в процессорах.

Предположим, у вас есть четырехъядерная система (система с 4 ядрами/ЦП). Затем эти потоки случайным образом возьмут каждый процессор и продолжат свою работу там. Вот как внутри будет выглядеть разделение процедуры на два потока:

Единственный основной поток проходит через библиотеку ‹thread› и разделяется в зависимости от того, сколько потоков мы указываем компилятору создать. Строка кода, которая делает это, такова:

Затем потоки объединятся с помощью функции «.join()».

Это все, я думаю, по крайней мере, для начинающих, как я. Параллелизм включает в себя множество других свойств, таких как асинхронное программирование, фьючерсы и промисы, атрибуты, факторинг нагрузки и многое другое. Это пока не то, что я могу комментировать, потому что мне нужно время, чтобы сжать это для себя.

На этом этапе попытайтесь включить все это в базовую программу, которая, возможно, печатает простые числа от 0 до заданного диапазона. Не имеет значения, использовали ли вы для этого один поток или несколько, потому что поиск простых чисел не является сложной задачей.