Russian Qt Forum
Ноябрь 22, 2024, 01:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Ликвидировать демона  (Прочитано 14568 раз)
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #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 Offline

Сообщений: 3260


Просмотр профиля
« Ответ #16 : Апрель 02, 2020, 18:43 »

Там внутре вообще select() испльзуется => проблему 10к на кутешных сокетах не решить.

была проблема 1024 сокетов, ее решили после 5.6

Глянул в код, действительно, они иногда используют poll(), а иногда qt_poll, который использует select() Смеющийся
Видимо, некоторым платформам не повезло.
Но всё равно, poll() тоже не является серебряной пулей и дескрипторы надо перебирать - алгоритмическая сложность O(N).
Я уж молчу что сокеты нельзя на тредпул раскидать.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #17 : Апрель 02, 2020, 19:24 »

Цитировать
Но всё равно, poll() тоже не является серебряной пулей и дескрипторы надо перебирать - алгоритмическая сложность O(N).
Я уж молчу что сокеты нельзя на тредпул раскидать.

А какие есть иные варианты?
Записан

ArchLinux x86_64 / Win10 64 bit
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #18 : Апрель 02, 2020, 19:37 »

Но всё равно, poll() тоже не является серебряной пулей и дескрипторы надо перебирать - алгоритмическая сложность O(N).
Я уж молчу что сокеты нельзя на тредпул раскидать.
А вот asio использует epoll, легко раскидывает обработку на пул потов и мьютексы у него где надо, конечно если хотим на нескольких ядрах все крутить. А если не хотим, то флажочек указываем и он мьютексы все отключает. Улыбающийся
« Последнее редактирование: Апрель 02, 2020, 21:05 от Old » Записан
DarkHobbit
Самовар
**
Offline Offline

Сообщений: 197


Просмотр профиля
« Ответ #19 : Апрель 02, 2020, 19:59 »

Товарищ DarkHobbit озвучил мои опасения. Это про коммит четырехлетней давности. Так что пока в раздумиях...
(густо краснеет) Ну на самом деле, у меня бы это были не основные опасения. Тут нужно просто взять и проверить, насколько оно хорошо работает с актуальными (для вас) версиями Qt, на линуксе и на винде. Практика - критерий истины.

Вот с сетевой работой возможны более серьёзные (и не сразу выявляемые) грабли. Оно у вас планируется к работе 24/7 или только в течение рабочего дня?

Увы, это не чисто серверное приложение, GUI там присутствует в достаточном количестве.
Хм, тогда не очень понял, при чём тут демон. В комплексе несколько программ, одна работает как демон, остальные с GUI?
« Последнее редактирование: Апрель 03, 2020, 12:09 от DarkHobbit » Записан

Мои проекты на Qt: DoubleContact, LInvert
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #20 : Апрель 02, 2020, 23:52 »

Но всё равно, poll() тоже не является серебряной пулей и дескрипторы надо перебирать - алгоритмическая сложность O(N).
Я уж молчу что сокеты нельзя на тредпул раскидать.
А вот asio использует epoll, легко раскидывает обработку на пул потов и мьютексы у него где надо, конечно если хотим на нескольких ядрах все крутить. А если не хотим, то флажочек указываем и он мьютексы все отключает. Улыбающийся


Но ведь основная прелесть еполла что к дескриптору можно привязывать контекст и тем самым обеспечивать разделение по данным, то есть никакие мьютексы там нафик не нужны.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #21 : Апрель 03, 2020, 09:53 »

Но ведь основная прелесть еполла что к дескриптору можно привязывать контекст и тем самым обеспечивать разделение по данным, то есть никакие мьютексы там нафик не нужны.
И asio использует эту возможность epoll.
Но, если мы говорим про пул потоков, то даже если мы сразу получили дескриптор сокета, событие и контекст, нам нужно впихнуть обработчик этого события в пул потоков, а это мьютекс + условная переменная.
  
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #22 : Апрель 03, 2020, 12:28 »

И asio использует эту возможность epoll.
Но, если мы говорим про пул потоков, то даже если мы сразу получили дескриптор сокета, событие и контекст, нам нужно впихнуть обработчик этого события в пул потоков, а это мьютекс + условная переменная.
  

Погодите, там что, еполл отдельно а пул отдельно?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #23 : Апрель 03, 2020, 12:53 »

Погодите, там что, еполл отдельно а пул отдельно?
Отдельно от чего? Улыбающийся
В asio есть io_context, это некотрый аналог QEventLoop, который можно запустить в 1 потоке, а можно и в 101.
Все сокеты/таймеры привязываются к этому контексту.
Вот как тут понять, отдельно или нет? Улыбающийся

Но я говорил про решение без привязки в чему либо. Если у нас есть пул потоков, то у нас мьютекс. Да epoll нас избавляет от еще одного мьютекса на коллекцию сокет -> контекст.
Записан
Inhibitor
Гость
« Ответ #24 : Апрель 04, 2020, 13:21 »

могу предложить такое решение - писать программу без демонизации "как обычно", затем :
...

Qate, спасибо за идею, попробую, наверное, Ваше предложение реализовать.

Оно у вас планируется к работе 24/7 или только в течение рабочего дня?

В течение рабочего дня. А иногда и того меньше.

Хм, тогда не очень понял, при чём тут демон. В комплексе несколько программ, одна работает как демон, остальные с GUI?

Основное приложение крутится как демон, настройка и управление этим приложением реализовано через GUI.
Записан
DarkHobbit
Самовар
**
Offline Offline

Сообщений: 197


Просмотр профиля
« Ответ #25 : Апрель 14, 2020, 16:13 »

Основное приложение крутится как демон, настройка и управление этим приложением реализовано через GUI.
Ну тогда можно применение Qt ограничить именно управляющей программой, а основное приложение написать на чистом C++, возможно, с бустом. Но это не догма, это один из вариантов. Главное понимать, что вы хотите получить от Qt в "серверном" варианте.

А вот идея писать программу без демонизации, а потом пускать её под screen мне совсем не нравится. Это же костыль для ситуации, когда других вариантов нет. Я, например, OpenSimulator на VDS так пускал, и это, считаю, одна из причин, затрудняющих его распространение. Тем более, для винды и линукса костыли разные потребуются. Грустный Я бы всё-таки, если делать демона на Qt, потыкал бы сначала QtService.
Записан

Мои проекты на Qt: DoubleContact, LInvert
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 22.