Russian Qt Forum
Ноябрь 22, 2024, 01:43
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Компиляторы и платформы
>
Linux
>
Ликвидировать демона
Страниц:
1
[
2
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Ликвидировать демона (Прочитано 14569 раз)
qate
Супер
Offline
Сообщений: 1177
Re: Ликвидировать демона
«
Ответ #15 :
Апрель 02, 2020, 18:16 »
могу предложить такое решение - писать программу без демонизации "как обычно", затем :
1. linux =
https://askubuntu.com/questions/610017/running-a-command-in-screen-daemon-mode
2. windows =
https://superuser.com/questions/643120/windows-powershell-screen-equivalent
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Ликвидировать демона
«
Ответ #16 :
Апрель 02, 2020, 18:43 »
Цитата: qate от Апрель 02, 2020, 18:03
Цитата: Авварон от Апрель 02, 2020, 13:46
Там внутре вообще select() испльзуется => проблему 10к на кутешных сокетах не решить.
была проблема 1024 сокетов, ее решили после 5.6
Глянул в код, действительно, они иногда используют poll(), а иногда
qt_poll
, который использует select()
Видимо, некоторым платформам не повезло.
Но всё равно, poll() тоже не является серебряной пулей и дескрипторы надо перебирать - алгоритмическая сложность O(N).
Я уж молчу что сокеты нельзя на тредпул раскидать.
Записан
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Ликвидировать демона
«
Ответ #17 :
Апрель 02, 2020, 19:24 »
Цитировать
Но всё равно, poll() тоже не является серебряной пулей и дескрипторы надо перебирать - алгоритмическая сложность O(N).
Я уж молчу что сокеты нельзя на тредпул раскидать.
А какие есть иные варианты?
Записан
ArchLinux x86_64 / Win10 64 bit
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Ликвидировать демона
«
Ответ #18 :
Апрель 02, 2020, 19:37 »
Цитата: Авварон от Апрель 02, 2020, 18:43
Но всё равно, poll() тоже не является серебряной пулей и дескрипторы надо перебирать - алгоритмическая сложность O(N).
Я уж молчу что сокеты нельзя на тредпул раскидать.
А вот asio использует epoll, легко раскидывает обработку на пул потов и мьютексы у него где надо, конечно если хотим на нескольких ядрах все крутить. А если не хотим, то флажочек указываем и он мьютексы все отключает.
«
Последнее редактирование: Апрель 02, 2020, 21:05 от Old
»
Записан
DarkHobbit
Самовар
Offline
Сообщений: 197
Re: Ликвидировать демона
«
Ответ #19 :
Апрель 02, 2020, 19:59 »
Цитата: Inhibitor от Апрель 02, 2020, 17:16
Товарищ DarkHobbit озвучил мои опасения. Это про коммит четырехлетней давности. Так что пока в раздумиях...
(густо краснеет) Ну на самом деле, у меня бы это были не основные опасения. Тут нужно просто взять и проверить, насколько оно хорошо работает с актуальными (для вас) версиями Qt, на линуксе и на винде. Практика - критерий истины.
Вот с сетевой работой возможны более серьёзные (и не сразу выявляемые) грабли. Оно у вас планируется к работе 24/7 или только в течение рабочего дня?
Цитата: Inhibitor от Апрель 02, 2020, 17:16
Увы, это не чисто серверное приложение, GUI там присутствует в достаточном количестве.
Хм, тогда не очень понял, при чём тут демон. В комплексе несколько программ, одна работает как демон, остальные с GUI?
«
Последнее редактирование: Апрель 03, 2020, 12:09 от DarkHobbit
»
Записан
Мои проекты на Qt:
DoubleContact
,
LInvert
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Ликвидировать демона
«
Ответ #20 :
Апрель 02, 2020, 23:52 »
Цитата: Old от Апрель 02, 2020, 19:37
Цитата: Авварон от Апрель 02, 2020, 18:43
Но всё равно, poll() тоже не является серебряной пулей и дескрипторы надо перебирать - алгоритмическая сложность O(N).
Я уж молчу что сокеты нельзя на тредпул раскидать.
А вот asio использует epoll, легко раскидывает обработку на пул потов и мьютексы у него где надо, конечно если хотим на нескольких ядрах все крутить. А если не хотим, то флажочек указываем и он мьютексы все отключает.
Но ведь основная прелесть еполла что к дескриптору можно привязывать контекст и тем самым обеспечивать разделение по данным, то есть никакие мьютексы там нафик не нужны.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Ликвидировать демона
«
Ответ #21 :
Апрель 03, 2020, 09:53 »
Цитата: Авварон от Апрель 02, 2020, 23:52
Но ведь основная прелесть еполла что к дескриптору можно привязывать контекст и тем самым обеспечивать разделение по данным, то есть никакие мьютексы там нафик не нужны.
И asio использует эту возможность epoll.
Но, если мы говорим про пул потоков, то даже если мы сразу получили дескриптор сокета, событие и контекст, нам нужно впихнуть обработчик этого события в пул потоков, а это мьютекс + условная переменная.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Ликвидировать демона
«
Ответ #22 :
Апрель 03, 2020, 12:28 »
Цитата: Old от Апрель 03, 2020, 09:53
И asio использует эту возможность epoll.
Но, если мы говорим про пул потоков, то даже если мы сразу получили дескриптор сокета, событие и контекст, нам нужно впихнуть обработчик этого события в пул потоков, а это мьютекс + условная переменная.
Погодите, там что, еполл отдельно а пул отдельно?
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Ликвидировать демона
«
Ответ #23 :
Апрель 03, 2020, 12:53 »
Цитата: Авварон от Апрель 03, 2020, 12:28
Погодите, там что, еполл отдельно а пул отдельно?
Отдельно от чего?
В asio есть io_context, это некотрый аналог QEventLoop, который можно запустить в 1 потоке, а можно и в 101.
Все сокеты/таймеры привязываются к этому контексту.
Вот как тут понять, отдельно или нет?
Но я говорил про решение без привязки в чему либо. Если у нас есть пул потоков, то у нас мьютекс. Да epoll нас избавляет от еще одного мьютекса на коллекцию сокет -> контекст.
Записан
Inhibitor
Гость
Re: Ликвидировать демона
«
Ответ #24 :
Апрель 04, 2020, 13:21 »
Цитата: qate от Апрель 02, 2020, 18:16
могу предложить такое решение - писать программу без демонизации "как обычно", затем :
...
Qate, спасибо за идею, попробую, наверное, Ваше предложение реализовать.
Цитата: DarkHobbit от Апрель 02, 2020, 19:59
Оно у вас планируется к работе 24/7 или только в течение рабочего дня?
В течение рабочего дня. А иногда и того меньше.
Цитата: DarkHobbit от Апрель 02, 2020, 19:59
Хм, тогда не очень понял, при чём тут демон. В комплексе несколько программ, одна работает как демон, остальные с GUI?
Основное приложение крутится как демон, настройка и управление этим приложением реализовано через GUI.
Записан
DarkHobbit
Самовар
Offline
Сообщений: 197
Re: Ликвидировать демона
«
Ответ #25 :
Апрель 14, 2020, 16:13 »
Цитата: Inhibitor от Апрель 04, 2020, 13:21
Основное приложение крутится как демон, настройка и управление этим приложением реализовано через GUI.
Ну тогда можно применение Qt ограничить именно управляющей программой, а основное приложение написать на чистом C++, возможно, с бустом. Но это не догма, это один из вариантов. Главное понимать, что вы хотите получить от Qt в "серверном" варианте.
А вот идея писать программу без демонизации, а потом пускать её под screen мне совсем не нравится. Это же костыль для ситуации, когда других вариантов нет. Я, например, OpenSimulator на VDS так пускал, и это, считаю, одна из причин, затрудняющих его распространение. Тем более, для винды и линукса костыли разные потребуются.
Я бы всё-таки, если делать демона на Qt, потыкал бы сначала QtService.
Записан
Мои проекты на Qt:
DoubleContact
,
LInvert
Страниц:
1
[
2
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...