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

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

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

Сообщений: 1177


Просмотр профиля
« Ответ #15 : Январь 29, 2015, 14:13 »

еще одна особенность моего случая то, что устройства имеют небольшие отличия в обмене
т.о. в случаи с потоками решается созданием другого класса (наследованием от базового обмена) и запуск его в потоке, а в случаи с очередью придется учесть и это, что усложнит ее
Записан
TheAthlete
Гость
« Ответ #16 : Январь 29, 2015, 14:16 »

Думаю можно еще посмотреть в сторону libev: https://github.com/sjinks/qt_eventdispatcher_libev
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #17 : Январь 29, 2015, 14:21 »

линейный процесс на каждое устройство в функцию и в поток ? так это и будет 100 потоков )
Почему? Улыбающийся
Вы запустили 10 рабочих потоков, которые по очереди берут выполняют нужные функции, которые описывают линейный процесс. Улыбающийся
Рабочий поток освободился - пошел проверять очередное устройство.
Посмотрите на QRunnable + QThreadPool
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #18 : Январь 29, 2015, 15:25 »

Думаю можно еще посмотреть в сторону libev: https://github.com/sjinks/qt_eventdispatcher_libev

не знаком, что это и зачем ?
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #19 : Январь 29, 2015, 15:30 »

Вы запустили 10 рабочих потоков, которые по очереди берут выполняют нужные функции, которые описывают линейный процесс. Улыбающийся
Рабочий поток освободился - пошел проверять очередное устройство.
Посмотрите на QRunnable + QThreadPool

нужно запускать например 30 устройств сразу, не дожидаясь пока 10 первых отработают

QRunnable не имеет eventloop - нужны события ("наверх" о процессе запуска в gui) и внутрь (прерывание, сброс принудительно)

Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #20 : Январь 29, 2015, 16:09 »

нужно запускать например 30 устройств сразу, не дожидаясь пока 10 первых отработают
Ну сделайте 30 рабочих потоков. Улыбающийся
Вы же понимаете, что реально 100 потоков не выполняются одновременно. Пока свой квант времени отрабатывает один поток (на одном ядре), все остальные ждут.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #21 : Январь 29, 2015, 16:24 »

А вы не думали, быть может ваша задача вообще на одном потоке решается? Попробовать сделать замер....
Мне, вообще, видится, что нужно иметь по потоку на ядро и очередь запросов.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #22 : Январь 29, 2015, 16:26 »

Ну сделайте 30 рабочих потоков. Улыбающийся
Вы же понимаете, что реально 100 потоков не выполняются одновременно. Пока свой квант времени отрабатывает один поток (на одном ядре), все остальные ждут.

так и делаю 500 обычных (в том смысле что пул потоков мне тут не поможет)

Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #23 : Январь 29, 2015, 16:32 »

так и делаю 500 обычных (в том смысле что пул потоков мне тут не поможет)
Хозяин-барин. Улыбающийся
Чем больше рабочих потоков - тем больше процессорного времени улетает впустую на переключения контекста. Не говоря уже о бесполезном расходовании адресного пространства на стеки этих потоков.
А выгоды никакой они не приносят. Улыбающийся
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #24 : Январь 29, 2015, 16:36 »

А вы не думали, быть может ваша задача вообще на одном потоке решается? Попробовать сделать замер....
Мне, вообще, видится, что нужно иметь по потоку на ядро и очередь запросов.

решается, конечно, но нужна очередь "умная", а писать ее сложнее чем с потоками
вопрос был именно в живучести данного очень моногопоточного решения

итого я решил пробовать многопоточку, посмотрим как будет жить


Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #25 : Январь 29, 2015, 16:37 »

А выгоды никакой они не приносят. Улыбающийся

мне как разработчику - приносят )
Записан
Bepec
Гость
« Ответ #26 : Январь 29, 2015, 18:43 »

Я работу 10 потоков разных могу понять только с ручкой и бумажкой, и то приблизительно.
А вы на 100 замахнулись.

PS ну пусть человек порадуется Улыбающийся Главное чтоб потом выложил результаты своих трудов - хотя б описание ощущений от отладки этой системы Улыбающийся
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #27 : Январь 30, 2015, 08:28 »

Я работу 10 потоков разных могу понять только с ручкой и бумажкой, и то приблизительно.
А вы на 100 замахнулись.

PS ну пусть человек порадуется Улыбающийся Главное чтоб потом выложил результаты своих трудов - хотя б описание ощущений от отладки этой системы Улыбающийся

что 2 что 100 - нет разницы, ведь они одинаковы в поведении
отладка также одинакова - лог действий
Записан
Bepec
Гость
« Ответ #28 : Январь 30, 2015, 09:22 »

А вы попробуйте, а потом уже скажите Улыбающийся
Записан
Akon
Гость
« Ответ #29 : Январь 30, 2015, 13:16 »

Один рабочий поток (на все ядра) и обмен асинхронный.
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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