Как понять что программа работает в двух потоках? |
Здравствуйте, гость ( Вход | Регистрация )
Как понять что программа работает в двух потоках? |
RazrFalcon |
5.10.2010, 18:21
Сообщение
#11
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Еще парочку моментов.
1) Когда я создаю 2-а потока, то на самом деле их 3-и. 2) Я не выбираю ядра, то есть сама система выбирает. Она может их (потоки) поменять местами во время работы? 3) Когда прога работает основным потоком, а потом я создаю 2-й поток, то он помещается на свободное ядро (1-е, 2-е, 3-е и тд). 4) Как я понял с гуем и файлами лучше работать в один поток. Сообщение отредактировал RazrFalcon - 5.10.2010, 18:22 |
|
|
CodeHunter |
5.10.2010, 18:49
Сообщение
#12
|
Студент Группа: Участник Сообщений: 33 Регистрация: 26.8.2010 Пользователь №: 1982 Спасибо сказали: 1 раз(а) Репутация: 0 |
|
|
|
Sokoloff |
5.10.2010, 20:02
Сообщение
#13
|
Участник Группа: Участник Сообщений: 237 Регистрация: 1.4.2009 Из: Москва Пользователь №: 654 Спасибо сказали: 50 раз(а) Репутация: 11 |
Еще парочку моментов. 1) Когда я создаю 2-а потока, то на самом деле их 3-и. 2) Я не выбираю ядра, то есть сама система выбирает. Она может их (потоки) поменять местами во время работы? 3) Когда прога работает основным потоком, а потом я создаю 2-й поток, то он помещается на свободное ядро (1-е, 2-е, 3-е и тд). 4) Как я понял с гуем и файлами лучше работать в один поток. 1) Да ты создаешь не 2-а потока а 2-а дополнительных потока. Ведь main тоже должен выполняться в потоке, поэтому у любой программы сразу есть один поток, это "основной поток". В нем отрисовываются/обновляются контролы. Замечал наверное, иногда окна программ становятся белыми, и программы не отвечают на нажатия кнопок и мыши, это когда основной поток чем то сильно занят и не успевает обработать GUI. 2) Ядра ты не выбираешь, система сама лучше знает как разместить задачи. Ведь в системе кроме твоей программы еще куча всего крутиться, и другие программы то-же хотят поработать, так что это задача системы оптимально раскидать задачи по ядрам. 3) Скорее всего да. Хотя на 100% гарантировать нельзя, смотри п.2 про чужие программы. 4) С гуем лучше работать не просто в один поток а в основном потоке. А что значит с файлами? Простая ситуация если одновременно надо обрабатывать несколько файлов - можно каждый файл обрабатывать в отдельном потоке. Но надо помнить о синхронизации между потоками. Гораздо более сложная ситуация если надо обрабатывать один большой файл, если работу можно разбить на одновременные подзадачи, то можно обрабатывать части файла в несколько потоков. Но это гораздо сложнее с точки зрения синхронизации. В общем делать потоки, или нет, и сколько зависит от задачи. P.S. Какие у тебя разнообразные интересы и GUI/CLI, и библиотеки, и время выполнения, и потоки. Ты просто изучаешь разные вещи или что-то реальное пишешь, во втором случае IMHO что-то ты с дизайном программы мудришь, возможно твою задачу можно решить проще. Опиши задачу, тебе подскажут куда копать. |
|
|
RazrFalcon |
5.10.2010, 22:34
Сообщение
#14
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
А что значит с файлами? Да я про обычный текстовик думал. Ну а в принципе все как я и думал.P.S. Какие у тебя разнообразные интересы и GUI/CLI, и библиотеки, и время выполнения, и потоки. Ты просто изучаешь разные вещи или что-то реальное пишешь, во втором случае IMHO что-то ты с дизайном программы мудришь, возможно твою задачу можно решить проще. Опиши задачу, тебе подскажут куда копать. оффтоп В общем я мучать начал openCV. А потом пошло. Интерфейс не нужен в общем - значит надо с консолькой разобраться, ну или лубу написать а потом подключать к гую. Потом понял что виснет безбожно - распараллеливание. Потом надо понять на сколько мои усилия сделали ее более быстрой - вот и время понадобилось. А в общем я просто решил поучится разному. Дизайнер из меня никудышный, вот и мучаю всякое. Начал OGRE и bullet physics учить, понял что многого не знаю, а они без оптимизации вообще деревянные и на моем ноуте не первой свежести вообще еле идут. Вот и решил основам оптимизации поучится. Помочь мне нечем, просто сталкиваюсь с проблемой и пытаюсь решить походу. |
|
|
Sokoloff |
5.10.2010, 23:26
Сообщение
#15
|
Участник Группа: Участник Сообщений: 237 Регистрация: 1.4.2009 Из: Москва Пользователь №: 654 Спасибо сказали: 50 раз(а) Репутация: 11 |
А что значит с файлами? Да я про обычный текстовик думал. Ну а в принципе все как я и думал.Если обычный текстовик и размер не большой, то не парься читай в основном потоке, никто задержки не заметит. Про OpenCV подсказать не смогу, не сталкивался. Про GUI/CLI ответил в другом треде. |
|
|
Iron Bug |
6.10.2010, 10:53
Сообщение
#16
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
по первому посту:
если юзаешь вывод куда-то - это сильно тормозит исполнение. любой вывод - чудовищно медленный. забить проц наглухо можно любым бесконечным циклом. и добавить атомарное выполнение или риал-тайм приоритет - тогда точно кердык: вырубать комп отключением питания, ибо клавиатура и всё остальное станут бесполезны только нафига это, если не секрет? а из двух потоков писать в один файл лучше так: создать общее хранилище для сообщений и туда их оперативно сбрасывать из рабочих потоков (естественно, под мьютексами), а из основного потока (ну или из какого-то третьего) периодически сбрасывать накопленное в хранилище в файл. Сообщение отредактировал Iron Bug - 6.10.2010, 11:23 |
|
|
RazrFalcon |
11.10.2010, 21:01
Сообщение
#17
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
И снова непонятно что
cpp
Я так понимаю это по тому что основной процесс (one) у меня без приоритета запускается. Суть в том что я не пойму как запустить два Разных процесса, одинаковые работают, а вот с разными не получается. ----------------------------------------- Еще один не совсем логичный случай cpp
log 0 +one 1 +one 2 +one 3 +one 4 +one 5 +one 6 +one 7 +one 8 +one 9 +one 0 +two 1 +two 2 +two 3 +two 4 +two 5 +two 6 +two 7 +two 8 +two 9 +two QThread: Destroyed while thread is still running Сообщение отредактировал RazrFalcon - 11.10.2010, 21:59 |
|
|
Алексей1153 |
12.10.2010, 6:18
Сообщение
#18
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
RazrFalcon, ОС раздаёт всем потокам всех процессов кусочки времени (time slices), в винде, к примеру, это около 16 мс (если не вру). Так обеспечивается многозадачность ОС
Поток волен в это время вовсю работать (если только его ядро системы не прерывает для каких-то нужд). Они у тебя и работают - видимо, за этот слайс поток успевает вывести столько сообщений. Мне только осталось неясно, почему лог так быстро закончился А вот ежели отдавать часть слайса в систему методом msleep(0) , тогда всё будет вперемешку, по идее
Сообщение отредактировал Алексей1153 - 12.10.2010, 6:19 |
|
|
Iron Bug |
12.10.2010, 6:49
Сообщение
#19
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
|
|
|
Алексей1153 |
12.10.2010, 7:03
Сообщение
#20
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
гы, а я и не обратил внимания ))
|
|
|
Текстовая версия | Сейчас: 15.1.2025, 6:21 |