Denis
Очередь проще делать на семафорах, а семафоры через кондвар
koder
Через фьютекс
по апи это одно и то же. фютекс просто иногда быстрее
koder
Denis
в чем разница?
Мьютекс защищает критическую секцию, а фьютекс блокируется и ждет пробуждения
Denis
Если мьютекс захвачен, его может отпустить только тот же поток, который его захватил
koder
футекс - это fast mutex
Denis
Глянь man futex
koder
он сначала делает спин-лок, а если спин лок не срабатывает - уходит в полноценный мютекс
koder
к критической секции это не имеет никакого отношения
Denis
На нем можно реализовать мьютекс, да
Denis
Кондвар тоже можно, а вот кондвар на мьютексе уже нет
koder
Если мьютекс захвачен, его может отпустить только тот же поток, который его захватил
это не имеет отношения к мютексу, это просто доп апи для надстроек над мютексами
Denis
это не имеет отношения к мютексу, это просто доп апи для надстроек над мютексами
Покажешь, как эффективный кондвар через мьютекс сделать?
Aragaer
кондвар делается на мьютексе, но для работы кондвара нужен еще один мьютекс
koder
Кондвар тоже можно, а вот кондвар на мьютексе уже нет
https://stackoverflow.com/questions/11000725/implementation-of-condition-variables
koder
https://en.wikipedia.org/wiki/Futex
koder
а семафор нельзя сделать через мютекс?
koder
семафор это мютекс и счетчик
Denis
Ну покажи, как его через мьютекс сделать
koder
ты серьезно? мне все погуглить за тебя?
Denis
Да, погугли, пожалуйста
Aragaer
семафор на одном мьютексе опять же не делается
koder
вот тебе сверху описание того, что такое futex
Aragaer
ну или счетчик атомарный
koder
это спинлок+мютекс
Denis
Я не про устройство фьютекса спрашиваю
Aragaer
а впрочем я не знаю
Denis
А про то, как сделать семафор только на мьютексах
Denis
Хотя бы псевдо
koder
захватываешь блокировку, смотришь на значение счетчика, если с ним все ок - меняешься его (вверх или вниз, в зависимости от операции), если уменьшил - смотришь на счетчик ожидающих. Если он не ноль - анлокаешь второй мютекс. Освобождаешь основной мютекс. Если захватить не удалось - увеличиваешь счетчик ожидаюзиз и захватываешь (возможно два раза) второй мютекс и висишь на нем
koder
Анлокать мьютекс, который захватил не ты, это UB
эээээ? это в каким апи? в питоне и посиксе это совершнно законно
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
Ilya
а в чем проблема? графана умеет делать любые запросы в инфлюкс
Разобрался, просто логически прикинул Select с импользование OR и там надо было найти функцию суммы value
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
koder
И питоновские локи таки сделаны на семафорах https://github.com/python/cpython/blob/d0eeb936d8daf05d7d89f6935e3f4c0dee49c5be/Python/thread_pthread.h#L422
еще раз - все примитивы сонхронизации можно сделать на мютексах. Семафоры над ними расширители апи, значит все можно сделать, при желании, и на семафорах. Но мы не обсуждали на чем оно конкретно сделанно - мы обсуждали как его можно сделать. Питоновский кондишенал можно сделать на питоновских мютексах. По поводу футекс - ты говорил, что это совсем не мютекс, у него другое апи. Это совершенно неверно. Вверху ссылка. Футекс имеет то же самое апи что и мютекс (имена функций ессно другие), только иногда он быстрее
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
Блин, похоже я с начала не так понял. Т.е. для брокера лучше реббит? Это не будет overkill?
https://en.wikipedia.org/wiki/Category:Message-oriented_middleware выбирай. хотя это далеко не полный список
Pavel
не хочешь rabbitmq - можешь посмотреть на crossbar.io (WAMP)
Sergey
Не, дело не в том, что не хочу
Sergey
У меня опыта в этом вопросе ровно 0, пытаюсь понять что мне нужно.
Pavel
в общем, софта такого очень много. просто RabbitMQ(AMQP) долгое время был "решением по умолчанию", хотя сейчас постепенно теряет позиции
Pavel
из твоих сообщений вообще говоря не очень понятно, какие у тебя критерии выбора
Sergey
из твоих сообщений вообще говоря не очень понятно, какие у тебя критерии выбора
Так в том и проблема, что я не знаю из чего исходить, выбирая брокера.
Pavel
Так в том и проблема, что я не знаю из чего исходить, выбирая брокера.
хм. а как тогда ты вообще пришёл к мысли о том, что он тебе нужен?