Находится ли QThread на уровне пользователя, на уровне ядра или на обоих? - PullRequest
2 голосов
/ 27 марта 2011

Я пишу переносимый код для многоядерных машин и хочу потоки уровня ядра, чтобы потоки могли использовать более одного процессора.После прочтения документации QThread в Qt Assistant я до сих пор не нашел никаких подсказок.

В Windows XP в примере многопоточности (mandelbrot) из QtSDK использовалось только одно ядро.Так что я думаю, что на XP возможны только темы пользовательского уровня.Я не проверял это на Linux или OSX до сих пор, так как не установлен полный SDK.РЕДАКТИРОВАТЬ: пример, приведенный в SDK, является глупым - он использует только один поток для этих расчетов, поэтому привязка только к одному ядру вводит в заблуждение.Собрать пример самостоятельно Я мог бы использовать все ядра, поэтому в XP с mingw / GCC Qt использует потоки уровня ядра.

Итак, какие потоки используются в QThread?Можно ли указать, какой тип потока использовать?

Можно также использовать несколько процессов в сочетании с общей памятью.

Редактировать

http://doc.qt.io/qt-4.8/thread-basics.html дает хорошее представление.

Ответы [ 2 ]

3 голосов
/ 27 марта 2011

С Ссылка на класс QThread :

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

По вашему мнению, это "ядро" поток.

Кроме того, вывод о том, что «в Windows XP возможны только потоки пользовательского уровня», безусловно, неверен.

3 голосов
/ 27 марта 2011

Я не знаю о Windows, но в Unix он использует pthreads.QT не предоставляет API для соответствия процессору, потому что он должен быть независимым от платформы и оборудования.Распределение QThread по центральным процессорам оставлено для планировщика ОС, вы не можете намекнуть на это через некоторый API QT.

...