Глосарій/Процесор, графічний процесор і енергія

Потоки

Також: кількість потоків

Коротка відповідь

Потік — це окрема лінія виконання всередині процесу, і процес може виконувати кілька потоків одночасно на різних ядрах процесора. Стовпець «Потоки» в Моніторі активності показує, скільки потоків зараз має кожен процес.

Більшість програм використовують багато потоків: один — щоб малювати інтерфейс і обробляти клацання, інші — для мережевих запитів, доступу до файлів і фонової роботи. Кількість потоків у кілька десятків для великої програми — це нормально.

Кількість потоків мало що каже про те, наскільки програма зайнята. Більшість потоків проводять час в очікуванні. «% процесора» краще показує справжню роботу.

Де побачити кількість потоків

У Моніторі активності натисніть вкладку «Центральний процесор». Стовпець «Потоки» показує кількість для кожного процесу, а внизу вікна показано загальну кількість потоків і процесів на Mac.

У Терміналі ps -M -p <PID> перелічує потоки одного процесу.

Коли зростання кількості потоків має значення

Кількість потоків, яка годинами зростає й не вирівнюється, може вказувати на помилку, через яку програма запускає потоки й ніколи їх не завершує. Якщо ця програма ще й розростається в памʼяті чи сповільнюється, розумно спершу її перезапустити, а повідомлення розробникові про проблему допоможе.

Чому в деяких програмах сотні потоків

macOS надає програмам спільний пул робочих потоків через Grand Central Dispatch. Коли програма передає багато дрібних завдань, як-от декодування зображень чи читання файлів, пул може зростати, щоб із ними впоратися, а згодом знову зменшуватися. Лише це може додати зайнятій програмі десятки потоків.

Браузери, месенджери та редактори коду часто запускають кілька процесів, кожен із власними потоками для малювання, мережі, звуку й скриптів. Аудіо- та відеопрограми тримають потоки напоготові, щоб відтворення ніколи не чекало. Якщо все це скласти, кілька сотень потоків в одній великій програмі — звичайна річ.

У kernel_task часто найбільша кількість потоків. Він містить потоки, якими користуються ядро macOS і його драйвери, і це не ознака проблеми.

Як перевірити кількість потоків однієї програми

  1. У Моніторі активності виберіть процес і двічі клацніть його або натисніть кнопку інформації на панелі інструментів.
  2. У вікні інспектора для цього процесу вказано потоки, а також порти й перемикання контексту.
  3. У Терміналі виконайте top -l 1 -pid <PID> -stats pid,command,th, замінивши <PID> на ідентифікатор процесу зі стовпця PID. Значення #TH показує загальну кількість потоків, а після скісної риски — потоки, що виконуються.
  4. Щоб відсортувати всі процеси за кількістю потоків, виконайте top -o th -stats pid,command,th, а для виходу натисніть q.

Нормальна й тривожна кількість потоків

Загальне число важить менше, ніж те, як воно змінюється з часом.

  • Нормально: кількість стрибає, коли ви відкриваєте вікна, починаєте завантаження чи експорт, а після завершення роботи знову спадає.
  • Нормально: стабільно висока кількість, яка годинами лишається приблизно однаковою.
  • Тривожно: кількість зростає весь день і ніколи не спадає, навіть коли програма неактивна.
  • Тривожно: кількість потоків зростає разом зі споживанням памʼяті або кількістю портів. Таке поєднання зазвичай вказує на витік у програмі.
  • Тривожно: багато потоків, що виконуються (показано після скісної риски в top), у програмі, якою ви не користуєтеся. Вона виконує роботу, про яку ви не просили.

Потоки та ядра процесора

Потоків більше, ніж ядер, — це нормально. macOS перемикає ядра між потоками багато разів на секунду, а більшість потоків однаково чекають. За ядро змагаються лише потоки, що виконуються.

Кількість потоків, які можуть виконуватися одночасно, дорівнює кількості логічних ядер з sysctl -n hw.logicalcpu. Якщо готових потоків більше, зайві чекають, і саме це очікування підвищує середнє навантаження.

Що питають люди

Що означає «Потоки» в Моніторі активності?

Це кількість потоків, які виконує процес. Потоки дають змогу одній програмі робити кілька речей одночасно, наприклад малювати своє вікно, поки завантажується файл.

Чи погано, коли потоків багато?

Зазвичай ні. Великі програми часто мають десятки чи сотні потоків, і більшість із них неактивні. Стежити варто за кількістю, яка зростає без зупинки.

Як потоки повʼязані з «% процесора» понад 100?

Процес може використовувати більше одного ядра, лише коли в нього кілька потоків одночасно виконують роботу. Саме так «% процесора» перевищує 100%.

Скільки потоків Mac може виконувати одночасно?

По одному на кожне логічне ядро в той самий момент. Виконайте sysctl -n hw.logicalcpu, щоб побачити це число. Потоків може існувати ще тисячі, але вони виконуються по черзі.

Чи звільняє завершення програми її потоки?

Так. Коли процес завершується, разом із ним завершуються всі його потоки. Перезапуск програми — найшвидший спосіб скинути кількість потоків, яка надто зросла.

Чому в kernel_task так багато потоків?

kernel_task — це ядро macOS, і серед його потоків є ті, якими користуються ядро та його драйвери. Велика кількість тут — нормальна.

Повʼязане

Шукаєте щось краще за Монітор активності? Дивіться найкращі альтернативи Монітору активності для Mac або перегляньте усі терміни глосарію.