Как понять что программа работает в двух потоках? |
Здравствуйте, гость ( Вход | Регистрация )
Как понять что программа работает в двух потоках? |
RazrFalcon |
4.10.2010, 14:31
Сообщение
#1
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Есть простой пример из хелпа
.срр
.h
.pro
а вот вывод такой: ... 406010 406011 406012 406013 406014 406015 ... а по идее должен быть типа ... 406010 406010 406011 406011 406012 406012 ... PS: как присвоить приоритет Так не хочет (из хелпа) вот так После применения приоритетов 713245 726544 713246 726545 713247 726546 выходит один спешит? не пойму совсем "к слову скрин загрузки" PSS: можно ли выбрать ядро для выполнения функции? Сообщение отредактировал RazrFalcon - 4.10.2010, 15:01 |
|
|
Алексей1153 |
4.10.2010, 18:31
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
а по идее должен быть типа ... 406010 406010 406011 406011 406012 406012 это слишком идеальный вывод, если ничего специально для этого не делать 713245 726544 713246 726545 713247 726546 а вот это больше похоже на правду он не спешит, он сдвинут по фазе |
|
|
RazrFalcon |
4.10.2010, 19:02
Сообщение
#3
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
это слишком идеальный вывод, если ничего специально для этого не делать Ну мне 100% синхронность не нужна, так что нормально.он не спешит, он сдвинут по фазе ?! Я так понимаю что они не одинаково идут из-за того что в системе еще куча остальных процессов запущенно. Но я так и не пойму почему не 100% оба ядра, оно(суммирование в цикле) что, мало хавает просто? Мне интересно что надо сделать чтоб полностью забить ядра, бесконечный цикл?! И последнее, тот пример выше, он правильный?! Это настоящая многопоточность, не семафор? Сообщение отредактировал RazrFalcon - 4.10.2010, 19:04 |
|
|
Алексей1153 |
4.10.2010, 19:32
Сообщение
#4
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
в среднем где-то на 75% загружен процессор у тебя получается
а притормаживает его, наверное, qDebug()<<x; Хотя, фиг знает Это настоящая многопоточность, не семафор? это точно многопоточность, так как у тебя больше одного потока. Их у тебя аж 3 )) при чём тут семафор ? Семафор вроде предназначен для ограничения одновременного доступа потоков-читателей ресурса И последнее, тот пример выше, он правильный?! а это зависит от поставленной задачи |
|
|
RazrFalcon |
4.10.2010, 20:06
Сообщение
#5
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
а притормаживает его, наверное, qDebug()<<x; так я загрузить по максимуму и пытаюсь это точно многопоточность, так как у тебя больше одного потока. Их у тебя аж 3 )) Почему 3-и? С семафорами я что то попутал, я имел ввиду что есть такие варианты, что просто поток кидается то на одно ядро, то на другое, и выглядит как загрузка обеих ядер, а на самом деле та же однопоточностьпри чём тут семафор ? Семафор вроде предназначен для ограничения одновременного доступа потоков-читателей ресурса а это зависит от поставленной задачи Задача пока разобраться просто с многопоточностью и все, работают 2-а потока, ну и хорошо, меня это устраивает. |
|
|
Алексей1153 |
4.10.2010, 20:11
Сообщение
#6
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Почему 3-и? ну как же - один основной и два дочерних. я имел ввиду что есть такие варианты, что просто поток кидается то на одно ядро, то на другое, и выглядит как загрузка обеих ядер, а на самом деле та же однопоточность хм, вроде бы нельзя так сделать, чтоб один поток выполнялся на двух ядрах. Хотя, может быть, я чего-то не знаю )) |
|
|
RazrFalcon |
4.10.2010, 20:14
Сообщение
#7
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
ну как же - один основной и два дочерних. Непонятно?! То есть сама прога, и еще 2-а моих?! То есть можно один цикл в main'е запустить а второй в потоке втором ?!хм, вроде бы нельзя так сделать, чтоб один поток выполнялся на двух ядрах. Хотя, может быть, я чего-то не знаю )) Я имел ввиду не одновременно, а поочередно, где то, когда то находил что то такое. Чуть-чуть на одном ядре, потом на втором, и снова на первом. Короче может это меня глючит.
Сообщение отредактировал RazrFalcon - 4.10.2010, 20:14 |
|
|
Алексей1153 |
4.10.2010, 20:43
Сообщение
#8
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Непонятно?! То есть сама прога, и еще 2-а моих?! То есть можно один цикл в main'е запустить а второй в потоке втором ?! процесс всегда состоит хотя бы из одного потока. Если явно не запускать дочерние потоки и не использовать компоненты/классы, которые это делают, то приложение будет работать в одном потоке Да, можешь сделать один цикл в main (основной поток), другой в дочернем потоке. Будет два цикла в разных потоках. Только учитывай, что основной поток, попав в бесконечный цикл, перестанет реагировать на события клавиатуры и мыши, а также на на события от ОС )) Сообщение отредактировал Алексей1153 - 4.10.2010, 20:44 |
|
|
RazrFalcon |
4.10.2010, 21:05
Сообщение
#9
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Ну в общем понятно. Ну я так понимаю желательно конечно 2-а потока создавать. Все равно в этот момент "главный" поток в простое.
Как вообще привязать потоки к ядрам. Чтоб они не перескакивали. То есть, это делать на первом ядре, а это на втором и не как по другому. |
|
|
ufna |
5.10.2010, 9:19
Сообщение
#10
|
Активный участник Группа: Участник Сообщений: 362 Регистрация: 24.5.2008 Из: Курган/СПб Пользователь №: 182 Спасибо сказали: 29 раз(а) Репутация: 5 |
думаю средствами Qt этого не сделать, нужно копать в сторону системных API и т.п.
Т.к. это пока извечная проблема, что большинство программ на работу с несколькими ядрами не рассчитаны, система сама решает что куда положить. Кстати, qDebug() в большей степени будет нагружать не оба потока, т.к. вывод идет в одну консоль - ее он грузить и будет. К примеру, если qDebug() отображать будет некуда, программа будет работать куда быстрее. Потому если хочешь создать нагрузку, лучше сделать что-нибудь другое. |
|
|
Текстовая версия | Сейчас: 27.12.2024, 4:22 |