Pull to refresh

Comments 17

Здорово! Неделю назад делал свой «велосипед», не зная про эту библиотеку.
Оказывается все уже изобретено. Спасибо переводчику!
Добрый день,

А если я хочу передать текстовый файл длиной 10 MByte? Как быть в этом случае? Я не хочу на принимающей стороне (сервер) делать модуль который будет аккумулировать части сообщений и затем собирать их в одно большое сообщение. Спасибо!
Возьмите готовый веб сервер с байндингом на какой-то из файловых типов. Задача описанная в статье и предложенный апи немного более низкоуровневая и описанный инструмент так же вернёт вам готовый файл, только сделает это создавая меньше нагрузки на gc при возможности.
обеспечивающие бесперебойные асинхронные операции без распределения

Что-что, простите?
Вот это и стало понятно только из оригинала статьи. Поэтому я поддержу товарища kekekeks с его комментарием к предыдущей статье касательно перевода.
аллокацию довольно часто называют распределением, думаю можно считать устоявшимся термином., просто как-то мимо вас прошло)
погуглите «распределение памяти memory allocation», найдется куча всего подряд с первых мест
Всё-таки allocation = выделение в этом контексте. Вот смотрите, вам нужен кусок памяти, вы его себе распределите, или же выделите?
Ну наконец-то какой-то конвейер с backpressure.
Может, теперь reactor .net доделают, и можно будет возвращаться на .net :)
А чем вас не устраивали вот эти?

TPL Dataflow
Rx.NET (System.Reactive) — правда, тут backpressure только синхронный
Akka.NET Streams
Могу ошибаться, но в rx вроде как нет backpressure вообще — простой producer/consumer. В data flow ещё есть bounded buffer, но там на клиенте надо делать все — исходя из результата post. А в pipelines backpressure сделан внутри самой либы и flush блочит producer’a.

В rx можно получить backpressure в некоторых операторах, если не возвращать управление из OnNext.


Кстати, вот еще одна библиотека: System. Threading.Channels

По поводу rx это врядли можно считать поддержкой backpressure т.к имплементируешь сам. По поводу channels — оно вроде как ещё очень далеко от production ready функционала. Все эти вещи впринципе можно сделать на Blocking Collection из коробки далеко не надо ходить. Другое дело что все это не затачивалось под оптимизацию нагрузки на gc, и работу с sequence/slices потока — инструменты для разных задач будем говорить прямо.
Ну, про Rx тут уже сказали, а Akka слишком тяжеловесна для массового inproc (да, у нас есть немного Акки inter-proc и на важных участках inproc)
Довольно интересная библиотека на самом деле. Нашел ей применение при решении задачи, в которой нужно было очень быстро, используя как можно меньше памяти, парсить среднего размера файлы (20-40 мб) в структуры данных приложения. По итогам написал заметку о примере использования, может, кому-нибудь пригодится: timiskhakov.github.io/posts/exploring-spans-and-pipelines.
Sign up to leave a comment.