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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Слот/сигнал без явного источника  (Прочитано 7439 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #15 : Декабрь 09, 2014, 15:31 »

Чтобы "закрепить ядро" за ниткой - надо сильно постараться, и, насколько помню, такая возможность есть только в unix

Не надо ничего закреплять, вы же не в реал-тайме. Система сама даст нити ядро, если есть возможность. Я специально проверял - гонял несколько QThread на 4-х ядерном процессоре, смотрел загрузку ядер. В вениках если есть свободное ядро, то новая нить запускается на нём. Прямо видно в таск-менеджере. Если есть 2 ядра и запускаются 2 нити, то они занимают эти 2 ядра. Если одна нить останавливается, то вторая продолжает работать на своём ядре. Думаю, в *nix точно также будет.

А если свободного ядра нет, то закреплять бесполезно - по идее, ядро дадут только в QNX, да и то там какие-то тонкости были.

Зато если ядро есть, а с современными многоядерными процессорами это вполне вероятно, то вычислитель в отдельной QThread получит целиком ядро, будет работать быстрее.
Записан

2^7-1 == 127, задумайтесь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #16 : Декабрь 09, 2014, 16:01 »

Не надо ничего закреплять, вы же не в реал-тайме. Система сама даст нити ядро, если есть возможность. Я специально проверял - гонял несколько QThread на 4-х ядерном процессоре, смотрел загрузку ядер. В вениках если есть свободное ядро, то новая нить запускается на нём. Прямо видно в таск-менеджере. Если есть 2 ядра и запускаются 2 нити, то они занимают эти 2 ядра. Если одна нить останавливается, то вторая продолжает работать на своём ядре. Думаю, в *nix точно также будет.

А если свободного ядра нет, то закреплять бесполезно - по идее, ядро дадут только в QNX, да и то там какие-то тонкости были.

Зато если ядро есть, а с современными многоядерными процессорами это вполне вероятно, то вычислитель в отдельной QThread получит целиком ядро, будет работать быстрее.
С этим никто не спорит. "Закрепить" имелось ввиду что данная нитка исполняется ТОЛЬКО на данном ядре (и ни каком другом). Это сделать непросто (да и не видно зачем). А в общем случае ОС перебрасывает нитку с одного ядра на другое как хочет.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #17 : Декабрь 09, 2014, 16:48 »

]С этим никто не спорит. "Закрепить" имелось ввиду что данная нитка исполняется ТОЛЬКО на данном ядре (и ни каком другом). Это сделать непросто (да и не видно зачем). А в общем случае ОС перебрасывает нитку с одного ядра на другое как хочет.

Ну и пусть себе перебрасывает. Нужно же было окно вовремя обновлять - чем не вовремя, когда считающая нить завершится? А на каком ядре, другое дело - если повезет, то на отдельном. Если затык был в том, что считающий код ничего про Qt знать не должен - ну и пусть не знает. Я в таком случае сделаю такой код в отдельной DLL, если считающий, так вообще с расширением .c, без ++, а в конструкторе некоего QObject эта считающая DLL будет вручную загружаться. Дальше тривиально...
Записан

2^7-1 == 127, задумайтесь...
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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