Строго говоря, здесь следует проводить различие между параллельным, асинхронным и параллельным.
Параллельно означает, что «задача» разбита на несколько меньших под-«задач», которые могут быть запущены одновременно,Для этого требуется многоядерный процессор или многопроцессорный компьютер, где каждая задача имеет свое выделенное ядро или процессор.Или несколько компьютеров.PLINQ (параллелизм данных) и TPL (параллелизм задач) попадают в эту категорию.
Асинхронный означает, что задачи выполняются без блокировки друг друга.Асинхронное выражение F #, Rx, Begin / End pattern являются API-интерфейсами для асинхронного программирования.
Параллельность - это более широкое понятие, чем распараллеливание и асинхронность.Параллельность означает, что несколько «задач» выполняются одновременно, взаимодействуя друг с другом.Но эти «задачи» не должны выполняться на отдельных физических вычислительных блоках, как подразумевается при распараллеливании.Например, многозадачные операционные системы могут выполнять несколько процессов одновременно даже на одноядерных компьютерах с одним процессором, используя временные интервалы.Параллельность может быть достигнута, например, с помощью модели Actor и передачи сообщений (например, почтовый ящик F #, процессы Erlang (Retlang в .Net))
Потоки являются концепцией относительно низкого уровня по сравнению с концепциями выше.Потоки - это задачи, выполняемые внутри процесса, выполняемые одновременно и управляемые непосредственно планировщиком операционной системы.Вы можете реализовать распараллеливание, когда операционная система отображает каждый поток на отдельное ядро или модель Actor, создавая очереди сообщений, маршрутизацию и т. Д. В каждом потоке.