Начална » как да » Защо няма ненужни номера на Windows процеси?

    Защо няма ненужни номера на Windows процеси?

    Ако обичате да се занимавате с Windows и да учите, докато сте на път, може да сте забелязали, че Windows процесите и идентификаторите на нишки са четни и кратни на четири. Защо така? Днешната публикация за въпроси и отговори SuperUser има отговори на любопитни въпроси на читателя.

    Днешната сесия за въпроси и отговори идва при нас с любезното съдействие на SuperUser - подразделение на Stack Exchange, групирано от общността уеб сайтове за въпроси и отговори.

    Въпроса

    Читателят на суперпотребителя Питър Хандорф иска да знае защо няма нечетни идентификатори на процеси в Windows:

    Има много начини да погледнете идентификаторите на процесите в Windows. Използване на PowerShell:

    Получавам този резултат:

    Както можете да видите, всички идентификатори на процеси са четни, не само това, те са всички кратни на четири. Можете да изглеждате толкова твърдо, колкото искате, и никога няма да намерите нечетен идентификатор на процес, поне не на която и да е версия, базирана на Windows NT. Каква е причината за това?

    Защо няма нечетни идентификатори на процеси в Windows?

    Отговорът

    Сътрудникът на SuperUser DavidPostill има отговор за нас:

    Защо няма нечетни идентификатори на процеси в Windows?

    Същият код, който разпределя дръжките на ядрото, също се използва за разпределяне на идентификатори на процеси и нишки. Тъй като дръжките на ядрото са кратни на четири, това са идентификатори на процеси и нишки.

    Защо са идентификатори на процеси и нишки, кратни на четири?

    В операционните системи, базирани на Windows NT, идентификаторите на процеси и нишки винаги са многократни. Дали това е просто съвпадение?

    Да, това е просто съвпадение и не трябва да разчитате на него, тъй като не е част от договора за програмиране. Например, Windows 95 процесът и идентификаторите на нишки не винаги са кратни на четири. За сравнение, причината, поради която дръжките на ядрото винаги са кратни на четири, е част от спецификацията и ще бъде гарантирана в обозримо бъдеще..

    Идентификаторите на процеси и нишки са кратни на четири като страничен ефект от повторното използване на кода. Същият код, който разпределя дръжките на ядрото, също се използва за разпределяне на идентификатори на процеси и нишки. Тъй като дръжките на ядрото са кратни на четири, това са идентификатори на процеси и нишки. Това е детайл за изпълнение, така че не пишете код, който се основава на него. Просто ви казвам да задоволите любопитството си.

    Източник: Защо са идентификатори на процеси и нишки, кратни на четири?

    Защо ядрото се справя винаги многократно с четири?

    Нещо, което не е много добре известно е, че долните два бита на ядровите дръжки са винаги нула; с други думи, тяхната числова стойност винаги е кратна на четири. Имайте предвид, че това се отнася само за дръжките на ядрото; то не се прилага за псевдодесквални дръжки или за друг тип дръжка (Ръкохватки, GDI дръжки, мултимедийни дръжки и др.). Дръжките на ядрото са неща, които можете да преминете към функцията CloseHandle.

    Това, че най-малко дъното на дръжките на ядрото винаги е нула, се подразбира от функцията GetQueuedCompletionStatus, която показва, че можете да зададете най-долния бит на дръжката на събитието, за да потиснете нотификацията на портовете за завършване. За да работи това, долният бит обикновено трябва да е нула.

    Тази информация не е полезна за повечето писатели на приложения, които трябва да продължат да третират дръжките като непрозрачни стойности. Хората, които биха се интересували от битовете на етикетите, са тези, които прилагат библиотеки от ниско ниво на клас или опаковат обекти на ядрото в по-голяма рамка.

    Източник: Защо ядрото се справя винаги многократно с четири?

    Допълнителна информация

    Старото ново нещо: практическото развитие през еволюцията на Windows от Raymond Chen (Главен инженер по софтуерно проектиране в Microsoft)


    Имате ли какво да добавите към обяснението? Звучи в коментарите. Искате ли да прочетете повече отговори от други технологични потребители на Stack Exchange? Вижте пълната тема за дискусия тук.