Операции блокировки заканчиваются быстрее?Или это то, что вы получаете реальную выгоду только тогда, когда он "полностью асинхронен?"
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