Улучшает ли использование асинхронных вызовов методов производительность по сравнению с потоками .net? - PullRequest
1 голос
/ 02 марта 2012

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

Ответы [ 3 ]

1 голос
/ 02 марта 2012

Вы совершенно правы.Потоки ввода-вывода не только приостанавливаются, они удаляются, когда они становятся ненужными.Но асинхронный ввод-вывод не является общим решением для всех проблем, и вот почему:

  • Асинхронные алгоритмы трудно кодировать.Асинхронный код более сложен и подвержен ошибкам, чем синхронный вариант.
  • Обратные вызовы завершения ввода-вывода работают в специальных потоках ввода-вывода, и программист должен сохранять эти потоки настолько свободными, насколько это возможно;в противном случае система значительно замедлится.Поэтому, если вы перейдете к асинхронному вводу-выводу, будьте готовы к реализации шаблона Producer-Consumer для фактической обработки данных
  • Если вам требуется менее 150 параллельных подключений, и приложение запускается на компьютере ПК, синхронная реализация будетнизко висящие фрукты, обеспечивающие простоту программирования и в то же время удовлетворительную производительность
0 голосов
/ 02 марта 2012

'вызов асинхронного метода также обрабатывается пулом потоков, невидимым для пользователя' - да, что-то должно делать ввод / вывод!

'это может сэкономить ресурсы, поскольку базовая операционная системаможет приостанавливать эти потоки, пока ожидающие вызовы ввода-вывода '- операционная система также может приостанавливать пользовательские потоки, в то время как ввод-вывод также ожидает.

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

0 голосов
/ 02 марта 2012

В идеале, если это возможно, вы должны использовать класс .net 4.0 System.Threading.Tasks.Parallel. Это позволит использовать многоядерные процессоры.

И это просто.

...