Russian Qt Forum
Ноябрь 23, 2024, 10:28
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
сколько потоков следует использовать
Страниц:
1
[
2
]
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: сколько потоков следует использовать (Прочитано 15094 раз)
qate
Супер
Offline
Сообщений: 1177
Re: сколько потоков следует использовать
«
Ответ #15 :
Январь 29, 2015, 14:13 »
еще одна особенность моего случая то, что устройства имеют небольшие отличия в обмене
т.о. в случаи с потоками решается созданием другого класса (наследованием от базового обмена) и запуск его в потоке, а в случаи с очередью придется учесть и это, что усложнит ее
Записан
TheAthlete
Гость
Re: сколько потоков следует использовать
«
Ответ #16 :
Январь 29, 2015, 14:16 »
Думаю можно еще посмотреть в сторону libev:
https://github.com/sjinks/qt_eventdispatcher_libev
Записан
Old
Джедай : наставник для всех
Online
Сообщений: 4350
Re: сколько потоков следует использовать
«
Ответ #17 :
Январь 29, 2015, 14:21 »
Цитата: qate от Январь 29, 2015, 13:31
линейный процесс на каждое устройство в функцию и в поток ? так это и будет 100 потоков )
Почему?
Вы запустили 10 рабочих потоков, которые по очереди берут выполняют нужные функции, которые описывают линейный процесс.
Рабочий поток освободился - пошел проверять очередное устройство.
Посмотрите на QRunnable + QThreadPool
Записан
qate
Супер
Offline
Сообщений: 1177
Re: сколько потоков следует использовать
«
Ответ #18 :
Январь 29, 2015, 15:25 »
Цитата: TheAthlete от Январь 29, 2015, 14:16
Думаю можно еще посмотреть в сторону libev:
https://github.com/sjinks/qt_eventdispatcher_libev
не знаком, что это и зачем ?
Записан
qate
Супер
Offline
Сообщений: 1177
Re: сколько потоков следует использовать
«
Ответ #19 :
Январь 29, 2015, 15:30 »
Цитата: Old от Январь 29, 2015, 14:21
Вы запустили 10 рабочих потоков, которые по очереди берут выполняют нужные функции, которые описывают линейный процесс.
Рабочий поток освободился - пошел проверять очередное устройство.
Посмотрите на QRunnable + QThreadPool
нужно запускать например 30 устройств сразу, не дожидаясь пока 10 первых отработают
QRunnable не имеет eventloop - нужны события ("наверх" о процессе запуска в gui) и внутрь (прерывание, сброс принудительно)
Записан
Old
Джедай : наставник для всех
Online
Сообщений: 4350
Re: сколько потоков следует использовать
«
Ответ #20 :
Январь 29, 2015, 16:09 »
Цитата: qate от Январь 29, 2015, 15:30
нужно запускать например 30 устройств сразу, не дожидаясь пока 10 первых отработают
Ну сделайте 30 рабочих потоков.
Вы же понимаете, что реально 100 потоков не выполняются одновременно. Пока свой квант времени отрабатывает один поток (на одном ядре), все остальные ждут.
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: сколько потоков следует использовать
«
Ответ #21 :
Январь 29, 2015, 16:24 »
А вы не думали, быть может ваша задача вообще на одном потоке решается? Попробовать сделать замер....
Мне, вообще, видится, что нужно иметь по потоку на ядро и очередь запросов.
Записан
qate
Супер
Offline
Сообщений: 1177
Re: сколько потоков следует использовать
«
Ответ #22 :
Январь 29, 2015, 16:26 »
Цитата: Old от Январь 29, 2015, 16:09
Ну сделайте 30 рабочих потоков.
Вы же понимаете, что реально 100 потоков не выполняются одновременно. Пока свой квант времени отрабатывает один поток (на одном ядре), все остальные ждут.
так и делаю 500 обычных (в том смысле что пул потоков мне тут не поможет)
Записан
Old
Джедай : наставник для всех
Online
Сообщений: 4350
Re: сколько потоков следует использовать
«
Ответ #23 :
Январь 29, 2015, 16:32 »
Цитата: qate от Январь 29, 2015, 16:26
так и делаю 500 обычных (в том смысле что пул потоков мне тут не поможет)
Хозяин-барин.
Чем больше рабочих потоков - тем больше процессорного времени улетает впустую на переключения контекста. Не говоря уже о бесполезном расходовании адресного пространства на стеки этих потоков.
А выгоды никакой они не приносят.
Записан
qate
Супер
Offline
Сообщений: 1177
Re: сколько потоков следует использовать
«
Ответ #24 :
Январь 29, 2015, 16:36 »
Цитата: __Heaven__ от Январь 29, 2015, 16:24
А вы не думали, быть может ваша задача вообще на одном потоке решается? Попробовать сделать замер....
Мне, вообще, видится, что нужно иметь по потоку на ядро и очередь запросов.
решается, конечно, но нужна очередь "умная", а писать ее сложнее чем с потоками
вопрос был именно в живучести данного очень моногопоточного решения
итого я решил пробовать многопоточку, посмотрим как будет жить
Записан
qate
Супер
Offline
Сообщений: 1177
Re: сколько потоков следует использовать
«
Ответ #25 :
Январь 29, 2015, 16:37 »
Цитата: Old от Январь 29, 2015, 16:32
А выгоды никакой они не приносят.
мне как разработчику - приносят )
Записан
Bepec
Гость
Re: сколько потоков следует использовать
«
Ответ #26 :
Январь 29, 2015, 18:43 »
Я работу 10 потоков разных могу понять только с ручкой и бумажкой, и то приблизительно.
А вы на 100 замахнулись.
PS ну пусть человек порадуется
Главное чтоб потом выложил результаты своих трудов - хотя б описание ощущений от отладки этой системы
Записан
qate
Супер
Offline
Сообщений: 1177
Re: сколько потоков следует использовать
«
Ответ #27 :
Январь 30, 2015, 08:28 »
Цитата: Bepec от Январь 29, 2015, 18:43
Я работу 10 потоков разных могу понять только с ручкой и бумажкой, и то приблизительно.
А вы на 100 замахнулись.
PS ну пусть человек порадуется
Главное чтоб потом выложил результаты своих трудов - хотя б описание ощущений от отладки этой системы
что 2 что 100 - нет разницы, ведь они одинаковы в поведении
отладка также одинакова - лог действий
Записан
Bepec
Гость
Re: сколько потоков следует использовать
«
Ответ #28 :
Январь 30, 2015, 09:22 »
А вы попробуйте, а потом уже скажите
Записан
Akon
Гость
Re: сколько потоков следует использовать
«
Ответ #29 :
Январь 30, 2015, 13:16 »
Один рабочий поток (на все ядра) и обмен асинхронный.
Записан
Страниц:
1
[
2
]
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...