Другие языки программирования и технологии

Текущая разница между Асинхронностью и параллельными вычислениями?

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

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

Грубо говоря чем отличается:
new Task(any_asyncMethod)
от простого async await метода?

Гуглил, лишь больше запутался, понимаю на схематическом уровне, даже понимаю на примерах, но не понимаю на уровне кода.
SA
Said Amirov
36 730
Папаллельные вычисления - ты запустил, и они выполняются.
Асинхронность - это ожидание некоего сигнала. Прерывание. Сигнал пришёл, функция выполнилась. Всё. Но, в принципе, да, асинхронное выполнение редко бывает без многопоточности. Но может быть основанно на внутренних прерываниях.
Arthu Didigov
Arthu Didigov
26 548
Лучший ответ
Said Amirov А кроме как с низкого уровня напрямую управляя прерываниями в ЯП высокого уровня реально провернуть асинхронный вызов под один поток?
Асинхронность это неявный автоматический параллелизм. При вызове асинхронной функции отдельный поток создается и управляется автоматически.
Ассинхронность никак не относится к потокам или протоколам. Синхронность или асинхронность это всего-лишь парадигма.
Передача данных может реализоваться как синхронным образом (с блокировкой процесса до тех пор, пока не придет респонс). Банальный пример TCP.
Или же как в UDP ты посылаешь данные по принципу fire and forget. И в скольки потоках или целых процессах ты это будешь делать - уже не важно. А вот на серверной части прием этой "асинхронности", в любом случае будет блокировать поток на listen'e.
Асинхронность конечно можно реализовать и с синхронными элементами, к примеру MQTT
Aбзал Калиев
Aбзал Калиев
3 431
Said Amirov вооо, я так понимаю это ближе к определению веба.

Я понимаю парадигма да.

Ноо тут скорее вопрос, в чем разница между асинхронным и параллельным вызовом )

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

new Task - создает задачу в отдельном потоке
asparallel это уже Linq, который позволяет получать доступ к коллекциям параллельно
Грубо говоря указываешь степень параллелизма - 4. Коллекция делится на 4 равные части, на каждую часть создается отдельный поток и в этом потоке идет обработка коллекции с конкретного индекса по конкретный индекс массива не трогая остальные.