Vladislav
Но вообще
Vladislav
Похоже что у тебя асинк рекурсия насрала в память
Vagif
А что это вообще?
Vladislav
Запусти доттрейс или как его
Vagif
Читается нелегко.
Vladislav
А что это вообще?
Ищем самый быстрый мейлбокс
Vladislav
Точнее кушающий меньше всего
Nikolay
Запусти доттрейс или как его
Я тут набегами у компа
Vagif
А, вижу выше, у Айрата.
Nikolay
А что это вообще?
Акка очень много съела
Nikolay
Там Айрат кидал
Vagif
Вообще интересный тест.
Vagif
Но я сейчас траву сажаю, активно присоединиться не могу :-)
Vagif
Диверсификация бизнеса?
Ну да, если вернёмся в первобытнообщинный строй.
Nikolay
Надо будет написать покрасивее и с ожиданием
Ayrat
Надо будет написать покрасивее и с ожиданием
Я приду домой, покажу силу ченелов
Nikolay
Я приду домой, покажу силу ченелов
Давай, миру нужен герой
Nikolay
Я тут тоже за компом набегами
Крылатый
Ну да, если вернёмся в первобытнообщинный строй.
Тогда надо еду и патроны выращивать)
Nikolay
Nikolay
public void ChannelCSharp() { Channel<Unit> GetMailbox() { var channel = Channel.CreateUnbounded<Unit>(); async ValueTask Loop() { var r = await channel.Reader.ReadAsync(); await Loop(); } var _ = Loop(); return channel; } var processors = new Channel<Unit>[100_000]; for (var i = 0; i < processors.Length; i++) { processors[i] = GetMailbox(); } var messagesCount = 1_000_000; var random = new Random(messagesCount); for (var i = 0; i < messagesCount; i++) { var t = random.Next(0, 100_000 - 1); var mailbox = processors[t]; mailbox.Writer.WriteAsync(null); } }
Nikolay
На фшарпе почти гиг было
Nikolay
Видимо из-за асинков
Vladislav
Все так
Vladislav
Из-за CE
Nikolay
На 60 мб больше если ValueTask заменить на Task
Nikolay
На сишурупе с ValueTask без рекурсии
Nikolay
Мде
Ayrat
На сишурупе с ValueTask без рекурсии
У тебя тут валуетаски ни к селу, ни к городу
Nikolay
Шо
Ayrat
Они нужны когда ты возвращаешь синхронно, без ожидания. А ты явно ожидаешь
Vladislav
Сам
Vladislav
Return await
Vladislav
Либо вообще без него
Vladislav
Await
Ayrat
Да, код не очень
Nikolay
Разница на вставку с гопаком 100 мс
Nikolay
Надо бы эвейт сделать
Nikolay
Покажи кот.
Гопак твой код
Ayrat
Гопак у меня в крови
Ayrat
Ты кот покажи
Nikolay
public void ChannelCSharp() { Channel<Unit> GetMailbox() { var channel = Channel.CreateUnbounded<Unit>(); async ValueTask Loop() { while (true) { var r = await channel.Reader.ReadAsync(); } } var _ = Loop(); return channel; } var processors = new Channel<Unit>[100_000]; for (var i = 0; i < processors.Length; i++) { processors[i] = GetMailbox(); } var messagesCount = 1_000_000; var random = new Random(messagesCount); for (var i = 0; i < messagesCount; i++) { var t = random.Next(0, 100_000 - 1); var mailbox = processors[t]; mailbox.Writer.WriteAsync(null); } }
Nikolay
member this.Hopac() = let loop = Mailbox.take >> Job.foreverServer >> start let processors = [| for _ in 0 .. 100_000 -> Mailbox() |] Array.iter loop processors let msgCount = 1_000_000 let random = Random msgCount for i = 0 to msgCount do let t = random.Next(0, 100_000 - 1) let mb = processors.[t] Mailbox.send mb () |> start
Ayrat
Все ещё не понимаю этих ваших рандомных мейлбоксов и измерения времени асинков без ожидания
Ayrat
Ты бы уже написал то, что измеряет ответ мейлбоксов
Nikolay
Да мне пока аллокации интересны
Nikolay
Попробую с эвейтом сделать
Vladislav
Код недосягаемый
Nikolay
Вай?
Ayrat
Код недосягаемый
Да вроде ок. Будет вечно крутиться в памяти
Vladislav
Ну мб
Nikolay
Вот без лупа и с лупом
Nikolay
Nikolay
Ayrat
Да это все равно дичь
Vladislav
Присамоньте Егора сюда
Nikolay
148 мб аллоцируют просто 100к ченелов
Nikolay
Дичь какая-то
Ayrat
148 мб аллоцируют просто 100к ченелов
Полтора килобайта на объект?
Ayrat
Нихуя себе
Nikolay
126 мб
Nikolay
Вот щас верно посчитал
Ayrat
Ну по килобайту на объект.
Ayrat
Если чо, это 1000 байт
Ayrat
Ну почти)
Nikolay
Ну такое хз
Ayrat
Это дохуя
Nikolay
А щас попробую последний превью
Ayrat
Это прям жирный объект