.NET Async vs Blocking: почему async так разочаровывает?

Операции блокировки оказываются быстрее? Или это то, что вы получаете реальную выгоду только тогда, когда он "полностью асинхронен?"

Поэтому я провел довольно много времени за годы работы с многопоточными приложениями и оптимизацией для параллелизма.

async-await это посланник [спасибо всем, кто участвовал в создании этого].

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

Я хорошо знаю эту теорию, и во многих случаях при мониторинге кажется, что асинхронность намного лучше. Но эти странные причины

Это все еще может быть правдой, но ошибка была зарегистрирована для FileStream тот .WriteAsync() делал дополнительные процессы, которые замедляли его. Хорошо, нет проблем, я просто сделаю.Write().

Тем не менее, тестирование использования Channel (асинхронный) против BlockingCollection для очередей данных в FileStream, приводит к этим удивительным результатам: (блокирующие операции заканчиваются быстрее?)

STANDARD BENCHMARKS:
Total Bytes: 115,888,890

File stream standard benchmark. (for loop)
Total Elapsed Time: 1.8994005 seconds
------------------------

Synchronized file stream benchmark. (in parallel with lock)
Total Time: 1.6911277 seconds
Aggregate Waiting: 00:00:03.6219495
------------------------

TESTS WITH PARTIAL BLOCKING: (all fed in parallel)

150,000 capacity BlockingCollection.
Total Time: 1.9066117 seconds
Aggregate Waiting: 00:00:01.8377548
------------------------

150,000 capacity Channel.
Total Time: 2.8085457 seconds
Aggregate Waiting: 00:00:10.0840823
------------------------

100,000 capacity BlockingCollection.
Total Time: 2.0116308 seconds
Aggregate Waiting: 00:00:01.9312396
------------------------

100,000 capacity Channel.
Total Time: 2.2340504 seconds
Aggregate Waiting: 00:00:14.3782481
------------------------

50,000 capacity BlockingCollection.
Total Time: 2.0616825 seconds
Aggregate Waiting: 00:00:07.4741103
------------------------

50,000 capacity Channel.
Total Time: 1.9812716 seconds
Aggregate Waiting: 00:00:01.5531377
------------------------

10,000 capacity BlockingCollection.
Total Time: 1.7345184 seconds
Aggregate Waiting: 00:00:01.6600510
------------------------

10,000 capacity Channel.
Total Time: 4.6379626 seconds
Aggregate Waiting: 00:01:06.4975673
------------------------

https://github.com/electricessence/AsyncFileWriter/tree/netcore

0 ответов

Другие вопросы по тегам