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

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

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

Сообщений: 1175


Просмотр профиля
« : Январь 29, 2015, 12:33 »

продумываю архитектуру приложения (обмен с сетевыми устройствами, типа опрос)
удобным видится использование множества потоков (т.е. 1 поток на работу по устройству)
но если устройств много, то и количество потоков растет (обычно до 100 устройств, но ограничу в 500)
тест QThread показал что можно создать 490 потоков, а если сделать setStackSize(PTHREAD_STACK_MIN), то чуть более 1000 (но там уже на общее количество открытых файлов ограничение, наверно можно увеличить)

стоит ли отказаться от такой архитектуры и выдумывать очередь на все устройства, работающею из одного потока ?
Записан
Bepec
Гость
« Ответ #1 : Январь 29, 2015, 12:46 »

А я ещё больше вас разочарую - примерное количество потоков в одном процессе не более 100. Более точная цифра зависит от ОС/железа. К примеру i7 на Win 7 в полной комплектации позволяет только 63 потока.

не страдайте. Обмен с сетевыми устройствами-опрос можно делать в одном потоке, одним менеджером. Тот же опрос по очереди будет не менее эффективен.

PS а как вы QThread проверяли? Пустых насоздавали?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



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

А я ещё больше вас разочарую - примерное количество потоков в одном процессе не более 100. Более точная цифра зависит от ОС/железа. К примеру i7 на Win 7 в полной комплектации позволяет только 63 потока.
Что за глупости? Улыбающийся

Записан
Bepec
Гость
« Ответ #3 : Январь 29, 2015, 13:05 »

Небольшая неточность - это для x86 процесса.
А так вот статейка для ознакомления - http://blogs.technet.com/b/mark_russinovich/archive/2009/11/02/3290815.aspx
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



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

Небольшая неточность - это для x86 процесса.
А что именно вы этим уточнили? Улыбающийся

Это глупости и для x86:
А я ещё больше вас разочарую - примерное количество потоков в одном процессе не более 100. Более точная цифра зависит от ОС/железа. К примеру i7 на Win 7 в полной комплектации позволяет только 63 потока.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


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

PS а как вы QThread проверяли? Пустых насоздавали?

QThread и класс к нему который в нем живет
но проблема именно в создании - в коде QThread где вызов pthread_create, уменьшил стек - стало получше

очередь мутно городить, повторы всякие, вот потому и не хочу ее делать (не говорю что нельзя)

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

Сообщений: 4349



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

очередь мутно городить, повторы всякие, вот потому и не хочу ее делать (не говорю что нельзя)
Все равно, делать столько потоков не нужно.
Работы для них никакой нет, а ресурсы на переключение будут тратится много.
Сделайте несколько ниток, например, по одной нитке на 50 - 100 устройств.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



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

Верес, правильно, что вы убрали сообщение. Улыбающийся
Лучше сначала сами прочтите эту статью, а еще лучше попробуйте сами. Подмигивающий
А qate уже дважды вам открыто написал, как можно (и под вендой в том числе) запустить больше потоков.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


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

Сделайте несколько ниток, например, по одной нитке на 50 - 100 устройств.

а смысл так делать ? на процессоры потоки раскидать ?
если и решу одну очередь, то один поток ее и обработает

но вот не хочу городить очередь - логика становится путаная
в потоке как хорошо - линейный процесс опроса устройства, а в очереди нужно смотреть ответил, нет, повторить - запутаюсь
Записан
Bepec
Гость
« Ответ #9 : Январь 29, 2015, 13:20 »

Приведённая мною цифра была выдана как раз тестлимитом года полтора назад на приведённой мной конфигурации.
Сейчас перепроверил - теперь выдаёт около 2к. Что произошло - хз Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



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

но вот не хочу городить очередь - логика становится путаная
в потоке как хорошо - линейный процесс опроса устройства, а в очереди нужно смотреть ответил, нет, повторить - запутаюсь
Оформите этот линейный процесс опроса как функцию и запускайте ее в потоке. Нет никакой разницы.
Какие очереди вас пугают?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



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

Приведённая мною цифра была выдана как раз тестлимитом года полтора назад на приведённой мной конфигурации.
Сейчас перепроверил - теперь выдаёт около 2к. Что произошло - хз Улыбающийся
Вы забыли цифры из статьи и все наладилось. Улыбающийся
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


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

Оформите этот линейный процесс опроса как функцию и запускайте ее в потоке. Нет никакой разницы.
Какие очереди вас пугают?

линейный процесс на каждое устройство в функцию и в поток ? так это и будет 100 потоков )

пугает внесение логики в очередь
собственно для тестов я уже написал эту очередь ранее, но там много чего не хватает (повторов, событий, промежуточных состояний опроса)
поэтому я и подумал о потоках как иной вариант для рассмотрения
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


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

Может Верес имел ввиду ограничение в 63 (MAXIMUM_WAIT_OBJECTS) хендлов для функций типа WaitForMultipleObjects? Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
Bepec
Гость
« Ответ #14 : Январь 29, 2015, 13:41 »

Я имел в виду что при запуске testLimit -t на i7 он выдал число 63.
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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