Re[13]: Как тестировать многопоточные штуки?
От: Doom100500 Израиль  
Дата: 12.02.25 07:23
Оценка:
Здравствуйте, Shmj, Вы писали:

S>На каком ЯП вам привести пример, чтобы вы поняли свою ошибку?


Мою ошибку в твоём кривом дизайне?
Ты победил.
Спасибо за внимание
Re[14]: Как тестировать многопоточные штуки?
От: Shmj Ниоткуда  
Дата: 12.02.25 07:47
Оценка:
Здравствуйте, Doom100500, Вы писали:

D>Мою ошибку в твоём кривом дизайне?

D>Ты победил.

Все что ты говоришь — это относится к однопоточному приложению. Видел ли когда-нибудь тесты, направленные именно на проверку в многопотоке? Только честно.
=сначала спроси у GPT=
Re[15]: Как тестировать многопоточные штуки?
От: Doom100500 Израиль  
Дата: 12.02.25 08:07
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, Doom100500, Вы писали:


D>>Мою ошибку в твоём кривом дизайне?

D>>Ты победил.

S>Все что ты говоришь — это относится к однопоточному приложению. Видел ли когда-нибудь тесты, направленные именно на проверку в многопотоке? Только честно.


Я их писал на нескольких языках.
Тебе надо проверять ожидаемое состояние с текущим.

Тебе надо знать что будет система дедать и как обрабатывать систуации когда это не согласуется (это то, чего в твоём дизаине нет в принципе).

Ты не можешь тестами задетектить дедлок, но ты можешь сделать дизаин таким, чтобы ты смог определить такую ситуацию и принать соответствующие меры (вот это ты в тестах и проверяешь).
Сделать ты это можешь, если у тебя всегда есть хендлы/указатели/ референсы на что-то, что во что у тебя обёрнуты потоки. Синхронизация должна быть с таймаутами (опять что-то, что можно протестировать), а это уже не просто lock{} из helloword и chatgpt, а что-то с контролем времени. Тебе нужно знать как очистить систему при возникновении ситуации, когда ты решаешь прибить сущетвующие задачи с соответствуйющим фидбеком вызывающей стороне, чтобы она также могла обработать эту ситуацию. А для этого тебе нуже вменяемый протокол обмена информацией между твоими потоками. Всего этого у тебя нет.

Весь это обвес и проверяешь в тестах мокая то один интерфейс то другой, дабы создать валидное/не валидное состояние.

И это называется архитектурой. А потом уже TDD.
Спасибо за внимание
Re: Как тестировать многопоточные штуки?
От: Sharowarsheg  
Дата: 12.02.25 08:11
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Допустим вы сделали решение. Как вы его будете тестировать?


Никак, мы сразу правильно пишем.
Re[16]: Как тестировать многопоточные штуки?
От: Shmj Ниоткуда  
Дата: 12.02.25 08:17
Оценка:
Здравствуйте, Doom100500, Вы писали:

D>Сделать ты это можешь, если у тебя всегда есть хендлы/указатели/ референсы на что-то, что во что у тебя обёрнуты потоки. Синхронизация должна быть с таймаутами (опять что-то, что можно протестировать), а это уже не просто lock{} из helloword и chatgpt, а что-то с контролем времени. Тебе нужно знать как очистить систему при возникновении ситуации, когда ты решаешь прибить сущетвующие задачи с соответствуйющим фидбеком вызывающей стороне, чтобы она также могла обработать эту ситуацию. А для этого тебе нуже вменяемый протокол обмена информацией между твоими потоками. Всего этого у тебя нет.


Для конкретного обсуждения нужно уточнить пример — указать язык/платформу. Потому что в некоторых случаях все исполняется вообще в одном потоке — что даже синхронизация не нужна (Future может вызывать системный вызов в другом потоке, но потом все-равно вернет управление в тот же поток). Но при этом все-равно возможна проблема с очередностью вызовов.

Если готовы не хорохориться перед девками а серьезно обсуждать — давай приведу пример на C#, к примеру.
=сначала спроси у GPT=
Отредактировано 12.02.2025 8:20 Shmj . Предыдущая версия .
Re[17]: Как тестировать многопоточные штуки?
От: Doom100500 Израиль  
Дата: 12.02.25 08:22
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Если готовы не хорохориться перед девками а серьезно обсуждать — давай приведу пример на C#, к примеру.


Ты бы не обещал, а делал. Хочешь показать код — показывай. Хочешь оставаться в КСВ (а иначе зачем это всё тут) — оставайся.
Хорохоришься здесь ты защищая своё (списанное скорре всего) кривое решение (как впрочем всегда).

Я уже видел как тебя непрошибаемым называют. А сейчас увидел почему.
Спасибо за внимание
Re[18]: Как тестировать многопоточные штуки?
От: Shmj Ниоткуда  
Дата: 12.02.25 08:26
Оценка:
Здравствуйте, Doom100500, Вы писали:

D>Ты бы не обещал, а делал. Хочешь показать код — показывай. Хочешь оставаться в КСВ (а иначе зачем это всё тут) — оставайся.

D>Хорохоришься здесь ты защищая своё (списанное скорре всего) кривое решение (как впрочем всегда).

Дело в том что мой конкретный код — под Flutter. А это скорее язык мало распространен. Можно перевести на C#, но проблема в том что с потоками эти платформы работают совершенно по-разному. Хотя кое какие идеи сохраняются.
=сначала спроси у GPT=
Re[19]: Как тестировать многопоточные штуки?
От: Doom100500 Израиль  
Дата: 12.02.25 08:47
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, Doom100500, Вы писали:


D>>Ты бы не обещал, а делал. Хочешь показать код — показывай. Хочешь оставаться в КСВ (а иначе зачем это всё тут) — оставайся.

D>>Хорохоришься здесь ты защищая своё (списанное скорре всего) кривое решение (как впрочем всегда).

S>Дело в том что мой конкретный код — под Flutter. А это скорее язык мало распространен. Можно перевести на C#, но проблема в том что с потоками эти платформы работают совершенно по-разному. Хотя кое какие идеи сохраняются.


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

Если хочешь что-то делать на новом языке/технологии — то, возможно, чат-бот и даст кое-какое представление, но для построения грамотной архитектуры желательно посвятить время на изучение нюансов, которых в helloword's просто нет ( а на таких примерах chat bot, в основном, и учится — это всё-же на главных страницах проектов — легко для парсинга).

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

Серьёзно — это не долго изучить (проработать) нюансы , просто требует увлечённости и сосредоточения.

Вот суть.
Спасибо за внимание
Re: Как тестировать многопоточные штуки?
От: vsb Казахстан  
Дата: 17.02.25 04:41
Оценка:
Нормального способа такое тестировать я не знаю.

Если прям сильно надо — я бы так поступил:

1. Сделать спец-интерфейс вида interface DebugSynchronization { void wait(String point); }.

2. В реализацию класса пробросить этот интерфейс и во всех интересующих точках вызывать debugSynchronization.wait("pointname").

3. В продакшне использовать реализацию с пустым методом.

4. Для тестов использовать специальную реализацию, которой можно управлять. Т.е. запускаем интересующий нас метод в отдельном потоке, а из потока-теста вызываем что-то вроде waitForArrival("pointname"), resume("pointname"). Эти методы останавливают вызывающий поток, пока целевой поток не дойдёт до указанной точки (в этот момент тестируемый поток останавливается в wait) или продолжают выполнение тестируемого потока, который остановился в указанной точке.

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

Наверняка я не первый это придумал и такое уже есть в готовом виде.

Тут, конечно, не очень красиво получается, что в обычный код просочился тестовый. Ну лучше варианта не знаю.
Отредактировано 17.02.2025 4:42 vsb . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.