170 похожих чатов

Стивен Клири в своей книге Concurrency in .NET пишет что

для параллельных i/o операций лучше использовать массив тасок с Task.WhenAll вместо Parallel.ForEach, а в первом ответе по этой ссылке чел говорит что Task.WhenAll создаст много ненужных тасок что плохо повлияет на перф. У меня есть массив урлов по которым нужно ходить параллельно что для этого лучше использовать?

22 ответов

22 просмотра

Подождать нет6 можешь там завезли паралел асинк, в текущий реалиях массив тасок но ты можешь управлять набором активный накидыв сверху кода, или заюзать через я ченелы пайплан и там тоже можно управлять конкаренси

Зависит от кардинальности этого "массива урлов". Если это 2-3 урла, можно хоть whenall хоть parallel. Если у тебя постоянно обрабатываются новые урлы, то нужно регулировать степень параллелизма. Это организуется с помощью фиксированного количества джобов, которые в цикле вычитывают очередь.

Bekzhan-Bubakanov Автор вопроса

net6 ждать не могу, про channel'ы почитаю спасибо

Bekzhan-Bubakanov Автор вопроса

проблема в том что запросы асинковые поэтому parallel не подойдет, запросов примерно 200-300, обрабатываются не постоянно а по таймеру ежедневно

Конечно же, Parallel.ForEachAsync из .NET 6. Там наконец-то сделали хорошо, и ты можешь контролировать степень параллельности.

Bekzhan-Bubakanov Автор вопроса

пока выйдет нет6 меня возможно на этом проекте уже не будет)

https://www.nuget.org/packages/Open.ChannelExtensions/ возьми готовую надстройку над каналами. В примерах увидишь как подать массив и выставить паралелизм

Bekzhan-Bubakanov Автор вопроса

спасибо

Для 200-300 это не 2-3, имеет смысл сделать контроль конкаренси. Можешь просто семафор использовать. Короче опции такие у тебя, от простого к сложному. Parallel.ForEachAsync ConcurrentQueue и джобы. Channel и джобы Semaphore

запусти таски через Task.Run и сделай whenAll. У тебя перф весь в IO сети упрётся один хер. Незачем городить сложное

Месяца через три тебя уже не будет, бро? Земля пухом :(

Bekzhan-Bubakanov Автор вопроса

думаю чаннелы заюзать, спасибо

Да, и пусть потом отдел SRE через год огребает закончившиеся эфемеральные порты на тачке.

Bekzhan-Bubakanov Автор вопроса

я имел ввиду что с проекта переведут

Троттлинг и для тасок делается несложно, зачем пальцы загибаешь?

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

Странно тогда, что предлагаешь внутри тасок использовать семафоры тогда.

Почему тебе кажется странным? Ты сам это предлагал.

Нет, конкретно семафор внутри тасок я не предлагал. Если тебе не кажется этот подход странным, то 🤷‍♂

Мне уже интересно, как еще ты предлагал использовать семафор, если таски не входят и не выходят из него? Как вообще его можно использовать иначе?

А что за чэнелы? Мог бы тыкнуть в мат часть

https://habr.com/ru/post/508726/

Похожие вопросы

Обсуждают сегодня

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Мужики. привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных элементов...
Kraszx
2
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Карта сайта