Почему главный цикл выполнения переводит поток выполнения в спящий режим, если событие не происходит? - PullRequest
0 голосов
/ 09 апреля 2009

Я не понимаю, почему потоки должны "спать", если в цикле выполнения приложения нет событий. Сохраняет ли это энергию, память или что-то еще?

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

У кого-нибудь есть хорошее объяснение этой спящей проблемы?

Ответы [ 3 ]

2 голосов
/ 09 апреля 2009

Это не проблема. Это хорошо. Что еще будет делать основной поток? Он не должен обрабатывать долгосрочные задачи - это уменьшило бы «раздражительность» пользовательского интерфейса при появлении события пользовательского интерфейса.

Не должно быть замкнутых циклов до тех пор, пока не наступит событие - это потребует времени процессора, которое в противном случае могло бы быть разумно использовано другими приложениями.

Сон (или, скорее, ожидание) - это именно то, что вы хотите, чтобы он делал, поэтому он может проснуться, как только у него будет полезная работа, но в остальном не влияет на систему.

2 голосов
/ 09 апреля 2009

Как уже говорили другие, перевод потока в спящий режим позволяет выполнять другие потоки.

Я добавлю, что, поскольку вы, вероятно, имеете в виду iPhone (основываясь на большинстве других ваших вопросов), это также будет полезно, даже если не нужно запускать другие потоки, так как энергопотребление ЦП будет падать, когда он не используется.

2 голосов
/ 09 апреля 2009

Спящий поток позволяет планировщику ОС (подсистеме, которая выделяет процессорное время потокам) для запуска других потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...