Как посмотреть потоки приложения
это даст вам общее количество потоков в виртуальной машине :
теперь, если вы хотите, чтобы все потоки выполнялись в данный момент, Вы можете сделать это :
возможные состояния перечислены здесь:нить.Государство javadoc
Если вы хотите видеть запущенные потоки не программно, а с помощью инструмента Windows, вы можете использовать Процесс Explorer.
вы можете получить все потоки и их трассировки стека, запущенные в JVM uses нить.getAllStackTraces()
в ответ на ваш следующий комментарий
в следующем фрагменте кода: while(resultSet.следующий()) < name=resultSet.метода getString("hName"); работник MyRunnable = новый MyRunnable (hName); threadExecutor.execute (worker);>. Моя нить бассейн имеет размеры 10. Мне нужно убедиться, что моя программа работает правильно с несколькими потоками и хотите проверить, сколько потоков работает в определенный момент. Как я могу это сделать?
к другому ответу, я советуем профиль ваш код JVisualVM и проверьте, работает ли ваш пул потоков так, как он должен. Причина этого предложения заключается в том, что тогда вам не нужно беспокоиться обо всех других потоках домашнего хозяйства, которыми управляет JVM. Кроме того, вы хотите сделать, почему такие инструменты, как JVisualVM сделаны для.
Если вы новичок в профилировании Java-программ, JVisualVM позволяет вам видеть, что происходит под капотом во время выполнения кода. Вы можете увидеть кучу, GC активность, проверьте потоки, работающие / ожидающие любого образца / профиля вашего процессора или использования памяти. Есть довольно много плагинов, а также.
должно быть производительность счетчика для процесса, который может сказать вам, что.
возвращает оценку количества активных потоков в группе потоков текущего потока и его подгруппах. Рекурсивно перебирает все подгруппы в группе потоков текущего потока.
возвращает оценку количества активных потоков в этой группе потоков и ее подгруппах.
возвращает родительский элемент этой группы потоков.
во-первых, если родитель не равен null, метод checkAccess родительской группы потоков вызывается без аргументов; это может привести к исключению безопасности.
В окне Потоки можно проверять потоки и работать с ними в отлаживаемом приложении. Пошаговые инструкции по использованию окна потоков см. в разделе Пошаговое руководство. Отладка с помощью окна потоков.
Использование окна потоков
В окне Потоки имеется таблица, каждая строка которой описывает отдельный поток в приложении. По умолчанию в таблице перечисляются все потоки приложения, но можно фильтровать этот список, чтобы в нем показывались только нужные потоки. В каждом столбце содержится свой тип сведений. Можно также скрывать некоторые столбцы. Если отображаются все столбцы, то в них имеются следующие сведения (слева направо).
Флаг. В этом непомеченном столбце можно пометить поток, которому планируется уделить особое внимание. Сведения о способе пометки потока см. в разделе Практическое руководство. Установка и снятие отметки для потоков.
Текущий поток. В этом столбце без метки желтая стрелка указывает текущий поток. Контур стрелки указывает текущий контекст отладчика для потока, отличного от текущего.
Идентификатор. Отображает идентификационный номер для каждого потока.
Управляемый ИД. Отображает управляемый идентификационный номер для каждого управляемого потока.
Категория: Отображает категорию потоков: потоки пользовательского интерфейса, обработчики удаленного вызова процедур и рабочие потоки. Особая категория идентифицирует главный поток приложения.
Имя: Указывает каждый поток по имени, если оно имеется, или значение <No Name>.
Расположение. Показывает, где работает поток. Можно развернуть это расположение, чтобы отобразить полный стек вызова для потока.
Приоритет. Расширенный столбец (скрытый по умолчанию), отображающий приоритет, назначенный системой каждому потоку.
Маска сходства. Расширенный столбец (скрытый по умолчанию), который показывает маску сходства процессоров для каждого потока. В многопроцессорной системе маска сходства определяет, какой процессор в каком потоке может работать.
Счетчик приостановок. Расширенный столбец (скрытый по умолчанию), отображающий счетчик приостановок. Этот счетчик определяет, может ли поток выполняться. Дополнительные сведения о счетчиках приостановок см. в разделе Замораживание и размораживание потоков.
Имя процесса. Расширенный столбец (скрытый по умолчанию), отображающий процесс, к которому относится каждый поток. Данные в этом столбце могут быть полезны при отладке большого количества процессов.
Идентификатор процесса. Расширенный столбец (скрытый по умолчанию), отображающий идентификатор процесса, к которому относится каждый поток.
Квалификатор транспорта. Расширенный столбец (скрытый по умолчанию), однозначно определяющий компьютер, к которому подключен отладчик.
Открытие окна потоков в режиме приостановки или в режиме выполнения
- Пока Visual Studio находится в режиме отладки, выберите меню Отладка, наведите указатель мыши на пункт Windows, а затем выберите Потоки.
Отображение или скрытие столбца
- На панели инструментов, находящейся в верхней части окна Потоки, выберите Столбцы. Затем выберите или очистите имя столбца, который необходимо отобразить или скрыть.
Отобразить только помеченные потоки
Поток, которому планируется уделить особое внимание, можно пометить, поставив рядом с ним значок в окне Потоки. Дополнительные сведения см. в разделе Практическое руководство. устанавливать и снимать отметки для потока. В окне Потоки можно выбрать отображение всех потоков или только помеченных потоков.
Отображение только помеченных потоков
- Выберите Показывать только помеченные потоки на панели инструментов в верхней части окна Потоки. (Если вариант недоступен, сначала необходимо пометить некоторые потоки.)
Замораживание и размораживание потоков
Если поток заморожен, то система не начнет его выполнение, даже если будут доступны все ресурсы.
В машинном коде потоки могут быть приостановлены или возобновлены путем вызова функций Windows SuspendThread и ResumeThread . Или вызовите функции MFC CWinThread::SuspendThread и CWinThread::ResumeThread. Если вы вызываете SuspendThread или ResumeThread , будет изменен счетчик приостановок в окне Потоки. Счетчик приостановок не меняется при замораживании или размораживании собственного потока. В машинном коде поток не может выполняться, пока он не будет разморожен, а счетчик приостановок не будет равен нулю.
В управляемом коде счетчик приостановок изменяется при замораживании или размораживании потока. Если вы заморозите поток в управляемом коде, его счетчик приостановок будет равен 1. При замораживании потока в машинном коде его счетчик приостановок равен 0, если только не использовался вызов SuspendThread .
При отладке вызова управляемого кода из машинного кода управляемый код выполняется в том же физическом потоке, что и вызывающий его машинный код. Приостановка выполнения или замораживание присущего данному объекту кода приводит также к замораживанию управляемого кода.
Заморозка и разморозка выполнения потока
На панели инструментов, находящейся в верхней части окна Потоки, нажмите Заморозить потоки или Разморозить потоки.
Это действие влияет только на потоки, выбранные в окне Потоки.
Переключение на другой поток
Желтая стрелка указывает текущий поток (и размещение указателя выполнения). Зеленая стрелка с загнутым наконечником указывает, что поток, не являющийся текущим, имеет текущий контекст отладчика.
Переключение на другой поток
Выполните одно из следующих действий:
Дважды щелкните любой поток.
Щелкните правой кнопкой мыши поток и выберите пункт Переключиться на поток.
Группирование и сортировка потоков
При группировании потоков в таблице появляется заголовок для каждой группы. В заголовке содержится описание группы, например Рабочие потоки или Непомеченные потоки, и элемент управления "Дерево". Потоки-элементы каждой группы отображаются под заголовком группы. Если требуется скрыть потоки-элементы в какой-либо группе, можно свернуть эту группу с помощью элемента управления "Дерево".
Поскольку группирование имеет приоритет перед сортировкой, можно, например, группировать потоки по категориям, а затем по идентификаторам внутри каждой категории.
Сортировка потоков
На панели инструментов, находящейся в верхней части окна Потоки, нажмите кнопку в верхней части любого столбца.
Теперь потоки отсортированы по значениям в этом столбце.
Если требуется изменить порядок сортировки, нажмите кнопку еще раз.
Потоки, которые отображались вверху списка, теперь отображаются внизу.
Группирование потоков
- На панели инструментов окна Потоки нажмите список Группировать по, а затем выберите критерий, по которому требуется группировать потоки.
Сортировка потоков в группах
На панели инструментов в верхней части окна Потоки нажмите список Группировать по, а затем выберите критерий, по которому требуется группировать потоки.
В окне Потоки нажмите кнопку в верхней части любого столбца.
Теперь потоки отсортированы по значениям в этом столбце.
Сворачивание и разворачивание всех групп
- На панели инструментов в верхней части окна Потоки, нажмите Развернуть группы или Свернуть группы.
Поиск конкретных потоков
В окне Потоки можно искать потоки, соответствующие указанной строке. При поиске потоков в окне отображаются все потоки, в одном из столбцов которых найдено соответствие строке поиска. Эти сведения включают расположение потока, которое отображается вверху стека вызова в столбце Расположение. По умолчанию поиск в полном стеке вызовов не выполняется.
Поиск конкретных потоков
В панели инструментов, находящейся в верхней части окна Потоки, перейдите в поле Поиск и выполните одно из следующих действий:
- введите строку поиска и нажмите клавишу ВВОД
- нажмите раскрывающийся список рядом с полем Поиск и выберите строку поиска из предыдущего поиска.
Чтобы включить в поиск полный стек вызова, выберите Поиск в стеке вызова (необязательно).
Отображение стека вызовов потоков и переключение между фреймами
В многопотоковых программах каждый поток имеет свой собственный стек вызовов. Окно Потоки обеспечивает удобный способ просмотра этих стеков.
Для визуального представления стека вызовов для каждого потока используйте окно Параллельные стеки.
Просмотр стека вызовов потока
В столбце Расположение нажмите перевернутый треугольник рядом с расположением потока.
Работа операционной системы Windows основана на работе процессов. В этой статье разберём что такое Windows процессы, их свойства, состояния и другое.
Процессы
Процесс стоит воспринимать как контейнер с набором ресурсов для выполнения программы. То есть запускаем мы программу, для неё выделяется часть ресурсов компьютера и эта программа работает с этими ресурсами.
Процессы нужны операционной системе для многозадачности, так как программы работают в своих процессах и не мешают друг другу, при этом по очереди обрабатываются процессором.
Windows процессы состоят из следующего:
- Закрытое виртуальное адресное пространство, то есть выделенная для процесса часть оперативной памяти, которая называется виртуальной.
- Исполняемая программа выполняя свой код, помещает его в виртуальную память.
- Список открытых дескрипторов. Процесс может открывать или создавать объекты, например файлы или другие процессы. Эти объекты нумеруются, и их номера называют дескрипторами. Ссылаться на объект по дескриптору быстрее, чем по имени.
- Контекст безопасности. Сюда входит пользователь процесса, группа, привилегии, сеанс и другое.
- Идентификатор процесса, то есть его уникальный номер.
- Программный поток (как минимум один или несколько). Чтобы процесс хоть что-то делал, в нем должен существовать программный поток. Если потока нет, значит что-то пошло не так, возможно процесс не смог корректно завершиться, или стартовать.
У процессов есть еще очень много свойств которые вы можете посмотреть в “Диспетчере задач” или “Process Explorer“.
Процесс может быть в различных состояниях:
В Windows существуют процессы трёх типов:
- Приложения. Процессы запущенных приложений. У таких приложений есть окно на рабочем столе, которое вы можете свернуть, развернуть или закрыть.
- Фоновые процессы. Такие процессы работают в фоне и не имеют окна. Некоторые процессы приложений становятся фоновыми, когда вы сворачиваете их в трей.
- Процессы Windows. Процессы самой операционной системы, например “Диспетчер печати” или “Проводник”.
Дерево процессов
В Windows процессы знают только своих родителей, а более древних предков не знают.
Например у нас есть такое дерево процессов:
Если мы завершим дерево процессов “Процесс_1“, то завершатся все процессы. Потому что “Процесс_1” знает про “Процесс_2“, а “Процесс_2” знает про “Процесс_3“.
Если мы вначале завершим “Процесс_2“, а затем завершаем дерево процессов “Процесс_1“, то завершится только “Процесс_1“, так как между “Процесс_1” и “Процесс_3” не останется связи.
Например, запустите командную строку и выполните команду title parrent чтобы изменить заголовок окна и start cmd чтобы запустить второе окно командной строки:
Измените заголовок второго окна на child и из него запустите программу paint:
В окне командной строке child введите команду exit, окно закроется а paint продолжит работать:
После этого на рабочем столе останутся два приложения, командная строка parrent и paint. При этом parrent будет являться как бы дедом для paint.
Запустите “Диспетчер задач”, на вкладке “Процессы” найдите процесс “Обработчик команд Windows”, разверните список и найдите “parrent“. Затем нажмите на нём правой копкой мыши и выберите “Подробно”:
Вы переключитесь на вкладку “Подробно” с выделенным процессом “cmd.exe“. Нажмите правой кнопкой по этому процессу и выберите «Завершить дерево процессов»:
Окно командной строки Parrent завершится а Paint останется работать. Так мы убедились что связи между первым процессом и его внуком нет, если у внука нет непосредственного родителя.
Потоки
На центральном процессоре обрабатываются не сами процессы, а программные потоки. Каждый поток, это код загруженный программой. Программа может работать в одном потоке или создавать несколько. Если программа работает в несколько потоков, то она может выполняться на разных ядрах процессора. Посмотреть на потоки можно с помощью программы Process Explorer.
- два стека: для режима ядра и для пользовательского режима;
- локальную памятью потока (TLS, Thread-Local Storage);
- уникальный идентификатор потока (TID, Thread ID).
Приложение может создать дополнительный поток, например, когда у приложения есть графический интерфейс, который работает в одном потоке и ожидает от пользователя ввода каких-то данных, а второй поток в это время занимается обработкой других данных.
Изучение активности потока важно, если вам нужно разобраться, почему тот или иной процесс перестал реагировать, а в процессе выполняется большое число потоков. Потоков может быть много в следующих процессах:
Волокна и планирование пользовательского режима
Потоки выполняются на центральном процессоре, а за их переключение отвечает планировщик ядра. В связи с тем что такое переключение это затратная операция. В Windows придумали два механизма для сокращения таких затрат: волокна (fibers) и планирование пользовательского режима (UMS, User Mode Scheduling).
Во-первых, поток с помощью специальной функции может превратится в волокно, затем это волокно может породить другие волокна, таким образом образуется группа волокон. Волокна не видимы для ядра и не обращаются к планировщику. Вместо этого они сами договариваются в какой последовательности они будут обращаться к процессору. Но волокна плохо реализованы в Windows, большинство библиотек ничего не знает о существовании волокон. Поэтому волокна могут обрабатываться как потоки и начнутся различные сбои в программе если она использует такие библиотеки.
Потоки UMS (User Mode Scheduling), доступные только в 64-разрядных версиях Windows, предоставляют все основные преимущества волокон при минимуме их недостатков. Потоки UMS обладают собственным состоянием ядра, поэтому они «видимы» для ядра, что позволяет нескольким потокам UMS совместно использовать процессор и конкурировать за него. Работает это следующим образом:
- Когда двум и более потокам UMS требуется выполнить работу в пользовательском режиме, они сами могут периодически уступать управление другому потоку в пользовательском режиме, не обращаясь к планировщику. Ядро при этом думает что продолжает работать один поток.
- Когда потоку UMS все таки нужно обратиться к ядру, он переключается на специально выделенный поток режима ядра.
Задания
Задания Windows (Job) позволяют объединить несколько процессов в одну группу. Затем можно этой группой управлять:
- устанавливать лимиты (на память или процессорное время) для группы процессов входящих в задание;
- останавливать, приостанавливать, запускать такую группу процессов.
Посмотреть на задания можно с помощью Process Explorer.
Диспетчер задач
Чаще всего для получения информации о процессе мы используем «Диспетчер задач». Запустить его можно разными способами:
- комбинацией клавиш Ctrl+Shift+Esc;
- щелчком правой кнопкой мыши на панели задач и выборе «Диспетчер задач»;
- нажатием клавиш Ctrl+Alt+Del и выборе «Диспетчер задач»;
- запуском исполняемого файла C:\Windows\system32\Taskmgr.exe.
При первом запуске диспетчера задач он запускается в кратком режиме, при этом видны только процессы имеющие видимое окно. При нажатие на кнопку «Подробнее» откроется полный режим:
В полном режиме на вкладке «Процессы» виден список процессов и информация по ним. Чтобы получить больше информации можно нажать правой кнопкой мышки на заголовке и добавить столбцы:
Чтобы получить еще больше информации можно нажать правой кнопкой мышки на процессе и выбрать «Подробно». При этом вы переключитесь на вкладку «Подробности» и этот процесс выделится.
На вкладке «Подробности» можно получить ещё больше информации о процессе. А также здесь также можно добавить колонки с дополнительной информацией, для этого нужно щелкнуть правой кнопкой мыши по заголовку и нажать «Выбрать столбцы»:
Process Explorer
Установка и подготовка к работе
Более подробную информацию о процессах и потоках можно получить с помощью программы Process Explorer из пакета Sysinternals. Его нужно скачать и запустить.
Некоторые возможности Process Explorer:
- информация по правам процесса: кто владелец процесса, у кого есть доступ к нему;
- выделение разными цветами процессов и потоков, для удобного восприятия информации:
- процессы служб – розовый;
- ваши собственные процессы – синий;
- новые процессы – зелёный;
- завершенные процессы – красный;
- число дескрипторов у процесса;
- активность потоков в процессе;
- подробную информация о распределении памяти.
Запустите Process Explorer:
Для начала скачиваем установщик «Пакет SDK для Windows 10».
Устанавливать все не нужно, достаточно при установки выбрать “Debugging Tools for Windows“:
Для настройки символических имен перейдите в меню Options / Configure / Symbols. Введите путь к библиотеке Dbghelp.dll, которая находится внутри установленного «Пакета SDK для Windows 10» по умолчанию:
- C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\Dbghelp.dll.
И путь к серверу символической информации:
Некоторые основные настройки Process Explorer:
- Смена цветового выделения – Options / Configure Colors.
- Выбор колонок с информацией о процессах – View / Select Columns.
- Сортировка процессов – нужно щелкнуть на заголовке столбца Process, при первом щелчке сортировка будет в алфавитном порядке, при втором в обратном порядке, при третьем вернется в вид дерева.
- Просмотр только своих процессов – View / снять галочку Show Processes from All Users.
- Настройка времени выделения только что запущенных процессов и завершённых – Options / Difference Highlight Duration / введите количество секунд.
- Чтобы исследователь процесс подробнее можно дважды щелкнуть на нем и посмотреть информацию на различных вкладках.
- Открыть нижнюю панель для просмотра открытых дескрипторов или библиотек – Vies / Show Lower Panel.
Потоки в Process Explorer
Потоки отдельного процесса можно увидеть в программе Process Explorer. Для этого нужно дважды кликнуть по процессу и в открывшемся окне перейти на вкладку «Threads»:
В колонках видна информация по каждому потоку:
- TID — идентификатор потока.
- CPU — загрузка процессора.
- Cycles Delta — общее количество циклов процессора, которое этот процесс использовал с момента последнего обновления работы Process Explorer. Скорость обновления программы можно настроить, указав например 5 минут.
- Suspend Count — количество приостановок потока.
- Service — название службы.
- Start Address — начальный адрес процедуры, который начинает выполнение нового потока. Выводится в формате:«модуль!функция».
При выделении потока, снизу показана следующую информация:
- Идентификатор потока.
- Время начала работы потока.
- Состояние потока.
- Время выполнения в режиме ядра и в пользовательском режиме.
- Счетчик переключения контекста для центрального процессора.
- Количество циклов процессора.
- Базовый приоритет.
- Динамический приоритет (текущий).
- Приоритет ввода / вывода.
- Приоритет памяти.
- Идеальный процессор (предпочтительный процессор).
Есть также кнопки:
Задания в Process Explorer
Process Explorer может выделить процессы, управляемые заданиями. Чтобы включить такое выделение откройте меню «Options» и выберите команду «Configure Colors», далее поставьте галочку «Jobs»:
Более того, страницы свойств таких процессов содержат дополнительную вкладку Job с информацией о самом объекте задания. Например приложение Skype работает со своими процессами как за заданием:
Запустите командную строку и введите команду:
Таким образом вы запустите еще одну командную строку от имени этого пользователя. Служба Windows, которая выполняет команды runas, создает безымянное задание, чтобы во время выхода из системы завершить процессы из задания.
В новой командной строке запустите блокнот:
Далее запускаем Process Explorer и находим такое дерево процессов:
Как видим, процесс cmd и notepad это процессы связанные с каким-то заданием. Если дважды кликнуть по любому из этих процессов и перейти на вкладку Job, то мы увидим следующее:
Производительность компьютера зависит не только от количества ядер, но и от количества потоков, которые способны обрабатывать ядра. Технологии Hyper-threading от Intel и Zen от AMD сделали возможными существование многопоточных CPU. Узнать, сколько потоков в процессоре, можно как через сторонние программы, так и воспользовавшись стандартными инструментами операционной системы.
Узнаем, сколько потоков в процессоре
В текущих реалиях современные двухъядерные процессоры могут дать фору своим четырехъядерным предшественникам, потому что пара физических ядер могут быть эффективно разбиты на две пары виртуальных. Пусть не все приложения и, в особенности, игры умеют полноценно взаимодействовать с потоками, не перегружая какой-либо один из них, однако, компьютер находит, чем загрузить оставшиеся логические ядра, например, фоновыми приложениями, не дав системе тормозить. А узнать, сколько этих виртуальных или логических ядер, которые также именуются потоками, можно с помощью специального ПО и стандартных мониторов Windows.
Способ 1: CPU-Z
CPU-Z – бесплатная программа, предназначенная для просмотра основных параметров системы ПК. Не имеет официальной русской локализации.
Таким образом, можно очень легко посмотреть количество ядер через CPU-Z, что делает эту программу самой быстрой и удобной для такой операции.
Способ 2: Speccy
Speccy является несколько более информативной программой, чем CPU-Z, и потому слегка усложнённой, но и в ней с помощью двух кликов можно посмотреть количество потоков.
Способ 3: Process Explorer
-
Запустив программу, кликните по первому квадратику-графику, который отвечает за отображение данных процессора.
Способ 4: AIDA64
Несмотря на некоторую сложность в освоении, AIDA64 является прекрасным инструментом и для лёгких задач типа той, что мы и рассматриваем в сегодняшней статье.
Используя любой из вышеперечисленных способов, как сторонним ПО, так и встроенными функциями вы можете легко узнать количество потоков в процессоре вашего компьютера.
Мы рады, что смогли помочь Вам в решении проблемы.
Отблагодарите автора, поделитесь статьей в социальных сетях.
Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.
Читайте также: