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

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

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Потоки и модель данных, или немного эзотерики.  (Прочитано 18983 раз)
ctin
Гость
« Ответ #30 : Май 28, 2013, 21:34 »

thechicho,
Вы не писали крупных проектов, где в потоках происходят реально медленные функции? Из за них и замедляется lock -> unlock, а не из за скорости самого mutex.

Короче, да. Ошибка в большинстве случаев тихо гадит, но если писать с умом то этого можно избежать. Правда, тогда это будет говнокод Улыбающийся
« Последнее редактирование: Май 28, 2013, 21:36 от ctin » Записан
thechicho
Гость
« Ответ #31 : Май 29, 2013, 09:18 »

//Вы не писали крупных проектов, где в потоках происходят реально медленные функции? Из за них и замедляется lock -> unlock, а не из за скорости самого mutex.

 В замешательстве каким образом замедляется? примеры адекватные привидите. цифры насколько замедляется привидите. и обоснуйте почему такое "замедление" неприемлимо.
Записан
ctin
Гость
« Ответ #32 : Май 29, 2013, 13:24 »

Я встречал два проявления: функции, использующие блокировку долгих процессов выстраиваются в очередь, как в машины в пробке, из за чего последняя выполняется дико долго и второе: потоковое голодание, когда функции вызываются часто и какой-то поток просто не входит в функцию вообще.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #33 : Май 29, 2013, 13:30 »

который проработал час в трех потоках, загрузив на 75% мой проц
Такие тесты долгие и могут ничего не показать. Я Вам прозрачно намекал: проблемы возможны когда адрес double не кратен 8 (во всяком случае так в atomic реализвции Intel)

Товарищ mutex совсем не из Парижской Коммуны и может замедлить выполнение значительно, иногда катастрофично. Есть "честные" мутексы и нет (у меня только бесчестные Улыбающийся). В общем это длинный и не очень конкретный разговор, поэтому умолкаю
Записан
thechicho
Гость
« Ответ #34 : Май 29, 2013, 15:32 »

//функции, использующие блокировку долгих процессов выстраиваются в очередь, как в машины в пробке, из за чего последняя выполняется дико долго
может это не проблема мьютексов, а проблема того, кто таким образом решил задачу? водители же не виноваты, что архитектор не все предусмотрел.

//потоковое голодание, когда функции вызываются часто и какой-то поток просто не входит в функцию вообще.
как это возможно? у меня поток - объект-наследник QThread. у каждого объекта своя память. каждый поток делает свою работу. покажите конкретный адекватный пример такого случая?
Записан
thechicho
Гость
« Ответ #35 : Май 29, 2013, 15:37 »

//может замедлить выполнение значительно, иногда катастрофично
старые песни о главном Улыбающийся опять никакой конкретики.
Записан
mutineer
Гость
« Ответ #36 : Май 29, 2013, 15:46 »

у меня поток - объект-наследник QThread. у каждого объекта своя память.

Можешь пояснить в каком смысле у каждого объекта своя память?
Записан
thechicho
Гость
« Ответ #37 : Май 29, 2013, 15:51 »

в том смысле, что у каждого потока своя функция (свой адрес в памяти). это было сказано в контексте
//когда функции вызываются часто и какой-то поток просто не входит в функцию вообще
возможно я что-то не понимаю, но я не вижу как такое возможно в моей реализации
Записан
mutineer
Гость
« Ответ #38 : Май 29, 2013, 15:57 »

в том смысле, что у каждого потока своя функция (свой адрес в памяти)

Если потоки это инстансы одного и того же класса, то функция (какая-то конкретная) как объект в памяти у них одна на всех... Либо я опять не понял о чем речь
Записан
ctin
Гость
« Ответ #39 : Май 29, 2013, 16:17 »

Igors,
Аааа! Намек понял-с!

Igors,
Голодание - редкий случай. Там надо смотреть о приоритетах потоков и с мьютексами это почти не связано. Дело в том, что частый вызов ОС распределяет между потоками, и там нет строгой очереди.

Записан
thechicho
Гость
« Ответ #40 : Май 29, 2013, 16:53 »

//Если потоки это инстансы одного и того же класса, то функция (какая-то конкретная) как объект в памяти у них одна на всех...
хз, я думал под каждый объект класса выделяется своя область памяти. соответственно у полей и методов объекта, свои адреса.

ctin, встречал - редкий случай, связано - почти не связано. походу с Igors взяли пример лить воду (писать умные, вроде бы, умозаключения) без конкретных примеров.
Записан
mutineer
Гость
« Ответ #41 : Май 29, 2013, 16:55 »

//Если потоки это инстансы одного и того же класса, то функция (какая-то конкретная) как объект в памяти у них одна на всех...
хз, я думал под каждый объект класса выделяется своя область памяти. соответственно у полей и методов объекта, свои адреса.

Память выделяется для каждого объекта своя, но для полей. Методы копировать нет никакого смысла, они хранятся одни раз, независимо от количества объектов
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


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