Pull to refresh
30
0.4

Погромист на csharp

Send message

И будет у меня бенчмарк операции длиной 5мс, а не механизма "синхронизации".

Сейчас накладные в наносекундах, и их "съест" дополнительная логика в 5мс.

В любом случае, вы написали статью о том что стандартные механизмы синхронизации плохи и всё с ними грустно, но по факту - всё с ними хорошо, насколько я вижу.

По ссылке выше ( https://gist.github.com/MonkAlex/3ee81313728b3b7227a8a223f64973c3 ) я ошибся вызовом. Когда сделал синхронный вызов, удалось померять производительность, результаты по ссылке приложил - лок работает быстрее.

По вашему примеру в статье попытался сделать вот такое https://gist.github.com/MonkAlex/f9df69aa26ae06896aa374563896dba0

Результаты по ссылке тоже приложил, лок опять быстрее, примерно на порядок.

Вы живой человек или чатгпт?

Я прошу примеры, вы говорите "вот примеры".

Я пытаюсь ими пользоваться - вы говорите, так нельзя, в этом нет смысла.

В чём есть смысл то? Когда мне нужен ваш код, в каких сценариях использования?

ПС: ваши бенчи я не понял, поэтому и задаю вопросы.

Так, я решил попробовать синхронный вариант, взял https://raw.githubusercontent.com/gentlee/SerialQueue/master/SerialQueue/SerialQueue.cs

Накидал вот такой код (с использованием библиотеки BenchmarkDotNet, чтобы посчитать эффективность хотя бы линейного использования)

https://gist.github.com/MonkAlex/3ee81313728b3b7227a8a223f64973c3

Код с локом ожидаемо работает и довольно шустро (т.к. линейный подход в один поток), а ваш код оказывается возвращает управление не выполнив работу, и мой метод Assert валится с разным числом выполненых обработчиков.

Поэтому я ещё раз прошу - дайте конкретные примеры, какой код какому коду соответствует, чтобы было понятно, что на что можно заменять.

В текущем виде синхронная реализация некорректна и использовать её нельзя.

ПС: асинхронную\многопоточную без понятия как измерять, т.к. оно будет зависеть от очень большого числа случайных переменных на ПК.

Я может мысли плохо свои выражаю, но я хочу видеть код "до" применения вашей библиотеки.

Какой у меня в приложении должен быть код, чтобы ваша библиотека решала мою "проблему"?

Слона в вакууме обсуждаем, я просил у вас примеры кода "до" и "после", но ни одного примера так и не увидел.

Кейс нужен, чтобы понять что на что заменяется. И вот это уже можно мерять и оценивать.

Почему память то?

Условно в очередь я добавляю по 1000 элементов в секунду, а разгребаю по 10.

Это тоже переполнение.

Как пирамида не работает, так и ваша схема - не работает.

Так а новость то о чём? Новость о том, что леста готова переносить свои игры на "платформы" новые. Но даже под линукс с макосью нет официальной поддержки. Под консоли есть, но там по моему другой продукт физически, т.е. не та же самая игра.

Просто вот взяли, нажали на офф-сайте "скачать" и установили? Нет же?

Во первых им занималась варгейминг, а не леста.

Во вторых - танки как основной продукт - не работают нативно под линуксом.

Ну, если там будет виндовс - то да, они готовы. В остальных случаях я сомневаюсь.

Ну вот я открыл https://github.com/gentlee/SerialQueue/blob/master/Benchmark/SerialQueueTasksMonitor.cs

Какой пример кода оно заменяет?

Я вижу Task.Run, обернутый в lock, зачем - непонятно. Никаких проблем, решаемых таким подходом, я не знаю.

Тем что это Task.Run, но не на тредпуле, а на одном треде, внутри нельзя делать Task.Run, получим дедлок.

Я так понял ридми, возможно ошибаюсь.

Отдельно про SO и минус на нём - вам вполне корректно указали, что ваше решение не вписывает в SO, нужен реальный код, а не ссылка на либу.

Ваши бенчмарки для меня выглядят сложными и неочевидными, я не уверен, что именно вы меряли.

Хотелось бы увидеть пример кода (более-менее реального) с примитивом синхронизации и ваш способ его заменить вашей библиотекой.

ЯННП

Открываю https://github.com/gentlee/SerialQueue

Смотрю ридми

Там примеры кода, по которым я бы сказал что это аналог Task.Run

Где синхронизация?

Хороший вопрос, у меня нет на него ответа. У меня пароли и TOTP в одной базе кипаса, так что вместе утекут, если что.

сохраняйте также и текстовый ключ инициализации

В парольном менеджере, т.к. по ключу можно генерировать коды и вся безопасность улетучивается в трубу.

А тогда уж можно использовать KeePassXC, в котором есть и возможность работать с TOTP.

Вызов dbContext.Models.FirstOrDefault синхронный же. По моему верно написано - текущий поток будет отпущен, а вот поток внутри Task.Run - синхронно ждёт.

Не уверен, что правильно понял.

Можно сделать абстрактный класс без абстрактных методов и свойств.

Такой класс нельзя будет создавать (через new по крайней мере), что потребует явно объявить наследник для использования.

А вот если в обычный класс воткнуть абстрактный метод - да, класс придётся тоже объявить абстрактным.

Так что вроде в целом текст логически верный.

Information

Rating
1,608-th
Location
Ижевск, Удмуртия, Россия
Registered
Activity