Denis
Очередь проще делать на семафорах, а семафоры через кондвар
Denis
koder
Через фьютекс
по апи это одно и то же. фютекс просто иногда быстрее
Denis
koder
koder
Denis
в чем разница?
Мьютекс защищает критическую секцию, а фьютекс блокируется и ждет пробуждения
koder
Denis
Если мьютекс захвачен, его может отпустить только тот же поток, который его захватил
koder
футекс - это fast mutex
Denis
Глянь man futex
koder
он сначала делает спин-лок, а если спин лок не срабатывает - уходит в полноценный мютекс
koder
к критической секции это не имеет никакого отношения
Denis
На нем можно реализовать мьютекс, да
Denis
Кондвар тоже можно, а вот кондвар на мьютексе уже нет
koder
Denis
Aragaer
кондвар делается на мьютексе, но для работы кондвара нужен еще один мьютекс
Denis
koder
https://en.wikipedia.org/wiki/Futex
koder
а семафор нельзя сделать через мютекс?
koder
семафор это мютекс и счетчик
Denis
Ну покажи, как его через мьютекс сделать
koder
ты серьезно? мне все погуглить за тебя?
Denis
Да, погугли, пожалуйста
Aragaer
семафор на одном мьютексе опять же не делается
koder
вот тебе сверху описание того, что такое futex
Aragaer
ну или счетчик атомарный
koder
это спинлок+мютекс
Denis
Я не про устройство фьютекса спрашиваю
Aragaer
а впрочем я не знаю
Denis
А про то, как сделать семафор только на мьютексах
Alex
Denis
Denis
Хотя бы псевдо
koder
захватываешь блокировку, смотришь на значение счетчика, если с ним все ок - меняешься его (вверх или вниз, в зависимости от операции), если уменьшил - смотришь на счетчик ожидающих. Если он не ноль - анлокаешь второй мютекс. Освобождаешь основной мютекс.
Если захватить не удалось - увеличиваешь счетчик ожидаюзиз и захватываешь (возможно два раза) второй мютекс и висишь на нем
Denis
Alex
Denis
https://linux.die.net/man/3/pthread_mutex_unlock
If a thread attempts to unlock a mutex that it has not locked or a mutex which is unlocked, undefined behavior results.
koder
это какие-то быстрые посиксовые локи - PTHREAD_MUTEX_DEFAULT. Стандартные линуксовые можно и локать два раза и анлокать откуда угодно
koder
вот futex https://eli.thegreenplace.net/2018/basics-of-futexes/
koder
atomic + спинлок + mutex
Denis
Это futex, а не mutex
Denis
У него семантика другая
Denis
И питоновские локи таки сделаны на семафорах
https://github.com/python/cpython/blob/d0eeb936d8daf05d7d89f6935e3f4c0dee49c5be/Python/thread_pthread.h#L422
Denis
Всем привет, кто может подсказать, ставлю тулзу ей нужно подключение к mysql
Я установил кучу разных пакетов для этого, но ничто не помогает
rpm -qa | grep MySQL
MySQL-python-1.2.5-1.el7.x86_64
python2-PyMySQL-0.9.2-2.el7.noarch
python27-MySQL-python-1.2.3-11.el7.x86_64
pip list | grep mysql
mysql-connector-python 8.0.16
Использую python 2.7 и CentOS 7
Ошибка: https://pastebin.com/mnAjKip0
Vladimir
Denis
еще раз - все примитивы сонхронизации можно сделать на мютексах. Семафоры над ними расширители апи, значит все можно сделать, при желании, и на семафорах. Но мы не обсуждали на чем оно конкретно сделанно - мы обсуждали как его можно сделать. Питоновский кондишенал можно сделать на питоновских мютексах.
По поводу футекс - ты говорил, что это совсем не мютекс, у него другое апи. Это совершенно неверно. Вверху ссылка. Футекс имеет то же самое апи что и мютекс (имена функций ессно другие), только иногда он быстрее
Если брать классический мьютекс, который, например, в стандартной библиотеке С++, то на нем (эффективный) семафор сделать нельзя. Если питоновский, у которого внутри семафор и который работает медленнее, то можно, да. И wait+wake это по смыслу совсем не то же, что acquire+release
Denis
koder
Если брать классический мьютекс, который, например, в стандартной библиотеке С++, то на нем (эффективный) семафор сделать нельзя. Если питоновский, у которого внутри семафор и который работает медленнее, то можно, да. И wait+wake это по смыслу совсем не то же, что acquire+release
сори, моя логика кончилась, мы ходим по кругу. "эффективность" ни раз не обсуждалось, это вообще другой и очень сложный вопрос
Denis
Эффективностью я тут называю отсутствие бесконечного спинвейта
Denis
С ним, конечно, в юзерспейсе все можно сделать
Irina
#работа #москва #удаленка
Выбрать оптимальный микрокомпьютер и написать на него софт на Python/С
Оплата обсуждаема
Нужен СТО в команду Kidsy (https://kidsy.tech), который сможет подобрать микрокомпьютер для реализации всех нужных нам функций в игрушке. Потом придумать, как все будет взаимодействовать на уровне софта
И написать софт на микрокомпьютер (это может быть софт под Unix ядро или Unix ядро с софтом на уровне ядра или просто Linux скрипты или BareMetal или ещё что-то, нужно обсуждать)
Кого заинтресует, здесь более подробное описание: https://docs.google.com/document/d/1gq0MM-VFiRfBGux8qLIJBkGEw6fCWzlW_Z03ZJIJ9ng/edit
Sergey
Товарищи, направьте пожалуйста на правильный путь. Есть сервис с кучей задач, всё это управляется через cron (сами задачи - management-комманды Django). Чем дальше, тем сложнее и неуклюжей становится система. Понял что нужно делать через Celery, но встал вопрос выбора брокера - по факту выбираю между Reddis и RabbitMQ. Пытаюсь по обзорам понять разницу и выбрать, но уверенности нет. Судя по всему нужно брать RabbitMQ, т.к. возможности намного шире. Но есть опасение что он куда сложнее в настройке. Подскажите, какой вариант потимальный? От чего должен зависеть выбор?
koder
<капитан мод>reddis и rabit довольно сильно отличаются по АПИ. Запише требования к мессежденгу, которые у вас есть и сравните с возможностами обоих </капитан мод>
Sergey
Различаются по сложности или просто по разному организованы?
Tishka17
на редисе лучше делать очередь заданий, которые можно потом если что перегенерировать
Denis
Комрады, а есть какой-то тул для проверки валидности docstring? Что описанные аргументы на самом деле обьвлены у функции например?
Sergey
Tishka17
в смысле, редис бери если меньше требования к надежности
Sergey
ок, понял, спасибо
Tishka17
я бы взял реббит
Tishka17
очрееди на редисе - это все таки не очень стандартное применение его
Sergey
Блин, похоже я с начала не так понял. Т.е. для брокера лучше реббит? Это не будет overkill?
Tishka17
overkill - это если бы кафку взял
Sergey
были такие мысли поначалу))
Tishka17
выглядит как будто реббит ставить ну очень просто
Pavel
не хочешь rabbitmq - можешь посмотреть на crossbar.io (WAMP)
Sergey
Не, дело не в том, что не хочу
Sergey
У меня опыта в этом вопросе ровно 0, пытаюсь понять что мне нужно.
Pavel
в общем, софта такого очень много. просто RabbitMQ(AMQP) долгое время был "решением по умолчанию", хотя сейчас постепенно теряет позиции
Pavel
из твоих сообщений вообще говоря не очень понятно, какие у тебя критерии выбора
Sergey
Sergey
Pavel