Описание тега concurrent-programming

[CONCURRENT] программирование относится к программным парадигмам, в которых проектирование системы позволяет выполнять несколько действий одно независимо от других, в то время как системные ресурсы становятся доступными без каких-либо дополнительных ограничений (в отличие от строго [ПАРАЛЛЕЛЬНОГО] типа проектирования системы).

[CONCURRENT] программирование относится к парадигме проектирования системы, в которой несколько действий могут быть запланированы для выполнения в любое время, и если доступно больше ресурсов, некоторые из них могут выполняться одновременно.

Параллельная прогон кода-исполнения происходит одновременно (просто совпадение), с
использованием более одного процессора или процессорного ядра
и другие совместно используемые ресурсы для выполнения программы
или нескольких (но независимых друг от друга)
вычислительных блоков (задачи, потоки, и др).

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

Обычно параллельное программирование должно обеспечивать дополнительную проверку правильности и устойчивости к сбоям нескоординированных процессоров, взаимоблокировке и т. Д., В то время как оно может - просто по слабому совпадению - выиграть от лучшего использования ресурсов (более высокая степень занятости, чем просто а [SERIAL] порядок выполнения), который, с точки зрения необходимости алгоритмического обеспечения установленных ранее целей устойчивости, не гарантирует сквозную производительность параллельной обработки, линейно масштабируемой с количеством доступных ресурсов (см. ниже - не- линейное расширение накладных расходов на арбитраж ресурсов).

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


Профессиональное и принципиальное устранение неоднозначности между [PARALLEL] vs. [CONCURRENT] необходимо, поскольку для истинного параллельного выполнения кода требуется гораздо больше, чем просто наличие нескольких ядер и разветвления орды (нескоординированных) потоков, охота за доступом с разделением времени к пулу зарезервированных системой ресурсов. Параллельное выполнение - это далеко не параллельная обработка.


Хорошая речь Роба Пайка о распространенных недоразумениях по этому поводу