Всем привет. Недавно на собеседовании спросили, зачем вообще нужно асинхронное программирование в С#. Я более-менее в нём разбираюсь, но затупил и не ответил на вопрос. Более того, даже сейчас я не понимаю, как правильно и красиво ответить на него. Может кто помочь?
Асинхронность нужна чтобы главный "процесс" программы, не блокировал выполнение инструкций. А передавал управление другому независимому потоку/процессу, до тех пор пока прошлый не ответит успехом об успешности завершения выполнения и готовности дальше идти по коду/инструкциям.
Цели:
- ускорение работы программы
- выполнение без блокирующих эффектов (в том числе и в интерфейсе пользователя)
- многозадачность + многопоточность
makarychev13, не обязательно. по сути главный процесс делает оркестрацию между другими независимыми потоками. Он преедает им управление по очереди, как только кто-то говорит ему - что результат выполнения инструкции будет позже, нужно ждать - происходит переключение на слудующего и следующего и т.д.
если конечно не будет больше процессов - то да, он (главный) будет ожидать, "простаивать" - но это нормально.
Но есть еще асинхронность бизнес процесса. Это когда мы например отправили запрос в какой-то сторонний сервис, но результат он нам не вернет сразу, нет синхронности.
Результат будет получен с помощью Callback механизма.
Иван Филатов, судя по вашему описанию, от оркестрации будет только медленнее, т.к. помимо вычислений вашей программе ещё придется тратить время на выделение ресурсов под потоки и на саму оркестрацию. И простаивание процесса - это совсем не нормально(
Ну и не путайте, пожалуйста, процесс с потоком.
Про асинхронность бизнесс процесса сами придумали, признайтесь))
т.к. помимо вычислений вашей программе ещё придется тратить время на выделение ресурсов под потоки и на саму оркестрацию.
как бы ваши инструкции написанные в коде и инструкции которые получатся после компиляции в исполняемом файле - разные вещи. в результирующем файле будут инструкции и на выделение пямяти, и на создание потоков и на много чего. и ДА, программа будет тратить на это время. И никуда вы не денетесь.
Ну и не путайте, пожалуйста, процесс с потоком.
я не путаю. я их в ковычках и писал. это просто детали реализации.
Про асинхронность бизнесс процесса сами придумали, признайтесь))
у нас так принято на работе было называть. когда мы отправляли запрос/платеж в процессинг, но успешность или неуспешность вернется через Callback, который мы указали в запросе. С точки зрения бизнеса, доменной логики - операция асинхронная.
Иван Филатов, простите, но вы что-то совсем не то пишете( При сем тут байткод и доменная модель. Процесс и поток - это вовсе не деталь реализации, а две разных сущности. Я вам тоже советую почитать CLR via C#.
Асинхронность, по простому, нужна, чтобы вызывающий поток не находился в состоянии ожидания окончания операции. Польза от асинхронности заметна в основном при операциях ввода/вывода, когда аппаратные средства явно могут уведомить ОС об окончании ввода/вывода. При выполнении вычислительных операций на CPU асинхронность скорее навредит производительности. Читайте Рихтера, у него всё разжевано на примерах.