Vladislav
ты хоть отпиши
Vladislav
или зря гуглил за тебя?
Павел
Не торопи человека ну что ты
mr.
public $mutex = 'mutex';
public function init()
{
parent::init();
$this->mutex = Instance::ensure($this->mutex, Mutex::class);
}
instead
Yii::$app->mutex
Ура, я взрослею))
Алимжан
SiZE
mr.
Зачем семафоры?
mr.
О_о
Алимжан
mr.
Лично мне на это задачу уже не зачем, думал замутить, так как конкуренция за железку была, а ответ от железки и прочие факторы могли задерживаться, а оказалось, проблема в другом была.
mr.
mr.
Допустим ограничить 3х юзеров, чтобы только 1 мог что-то делать в 1 момент времени.
Алимжан
mr.
Ну вот как у меня выше пример, только 1 юзер до железки должен стучаться.
mr.
Там просто китайское железо и китайское ПО, ПО я обернул в сервис докера, доработал API их, железо гонво, ну что сделать, только страдать.
Алимжан
Но это же в фоне, или у тебя http запрос висит в ожидании?
mr.
Блин, ты похоже не понял что такое мьютексы. Ты вообще, с блокировками работали? Race condition не пустые слова? dead lock? просто хочу понять, есть ли у тебя база.
mr.
Просто когда нет проблем, то ок.
mr.
Получается если юзер1 делает что-то с железом hw1, я делаю блокировку с именем hw1, далее пришел юзер2 и такой попытался взять блокировку hw1, но был послан поккурить/выпить чаю/грабить караваны, т.к. hw1 залочена уже
mr.
Т.е. мьютекс именно как мьютекс, синхронизация между потоками.
mr.
Хотя тут потоки не те потоки, которые в multi thread привыкли понимать.
Sergey
mr.
mr.
Мьютексы одна из тех вещей, что радует меня в коробке, хотя многие не знаю про это даже
Алимжан
mr.
mr.
Как в кабинку туалета ручку дергаешь, оттуда крик ЗАНЯТО
mr.
Мьютекс кабинка_сортира :D
mr.
Кстати кабинка сортира отличное описание мьютекса)
Алимжан
Задача была такова. Есть ресурс, к примеру твой, с ограниченным запасом ресурсов. Открывают три юзера. У двоих из них плашка "Ожидание подключения". Как только первый закончил, то у второго сразу плашка исчезает и работает он. Третий все еще в ожидании. И наконец очередь доходит до третьего
mr.
Очередь + мьтекс
Vladislav
Без реконнекта не обойтись же
Vladislav
От клиента
Vladislav
Ибр по таймауту будет умирать
Vladislav
Не?
Sergey
Vladislav
Vladislav
Второй будет стоять и нюхать
Sergey
Там не только срать можно
mr.
Очередь юзеров хранить где-то, дать на коннект 30 секунд после следующего, долбить апи каждые 10 сек
mr.
Ну и т.д.
mr.
Отвлекли, пойду работать)_
mr.
Рад что годную тему поднял)
mr.
Но закончилось туалетом :D
Vladislav
Vladislav
В этом и суть
Алимжан
Там не только срать можно
В туалете можно не только срать, так же, как и срать можно не только в туалете 👌🏾
Sergey
Не, нам нужно получить эксклюзивный доступ к ресурсу
Sergey
А делать мы с этим ресурсом можем не то что собирались делать другие запросы
mr.
Написал тест, был прав, первый шаг в TDD)
mr.
Не в мьютексах дело было)
mr.
Хотя на большой нагрузке они понадобятся.
SiZE
mr.
Sergey
Vladislav
Для неконкурентных
Юрий
Так что шаг в другую сторону
mr.
mr.
Разве это не TDD?
Юрий
Нет
Юрий
В тдд ты написал бы тест сначала и код был бы без бага. У тебя ITSDD - i tak soidet driven development
mr.
Ну извините, покрыть все юзкейся я не могу, по тому что на продакщене всплывают узкие места под нагрузкой, как тогда быть?
mr.
ITSDD задолбало)
Юрий
Не называть это tdd
mr.
а как?
Юрий
Многопоточный запуск тестов, конкурентность, вот это все
Юрий
Сразу бы увидел свои узкие места
mr.
В кодцепшене есть многопоток?
mr.
Или колхозить только?
Юрий
Запустить несколько инстансов кодсепшена не вариант? Решений полно, посмотри
mr.
> Запустить несколько инстансов кодсепшена не вариант?
Дичь.
Павел
Молчал потому что тесты писал 😆
Vladimir
SiZE
tdd = нет багов?
есть конечно. никогда нельзя быть уверенным что код покрыт на 100% тестами
Vladimir
вот имеено
Vladimir
@exileum так что tdd ;)
Юрий
tdd = нет багов?
Уменьшенная вероятность. Есть тут фанатичные люди у которых и правда нет.