.NET Async vs Blocking: почему async так разочаровывает? - PullRequest
0 голосов
/ 03 декабря 2018

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

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

...