Windows - - - - Марк Русинович на руски
Процесът включва една или повече нишки, които действително изпълняват код в даден процес (технически не се изпълняват процеси, а се изпълняват нишки) и са представени в системата като обекти на нишка на ядрото. Има няколко причини, поради които приложенията създават нишки в допълнение към първоначалната си първоначална нишка: 1) процеси, които имат потребителски интерфейс, обикновено създават нишки, за да си вършат работата, като същевременно поддържат основната нишка отзивчива към потребителски команди за въвеждане и управление на прозорци; 2) приложения, които искат да използват множество процесори за мащабиране на производителността или искат да продължат да работят, докато нишките се изключват в очакване на I/O да бъдат синхронизирани, създават нишки, за да се възползват от многопоточност.


Причината за това несъответствие се крие във факта, че когато стартирате 32-битово приложение на 64-битов Windows, всъщност това е 64-битов процес, който изпълнява 64-битов код от името на 32-битови потоци и следователно в паметта за всяка нишка са запазени области за 64-битови и 32-битови стекове. За 64-битов стек са запазени 256Kb (изключение са операционните системи, пуснати преди Vista, в които първоначалният размер на стека на 64-битовите потоци е 1MB). Тъй като всеки 32-битов поток започва своето съществуване в 64-битов режим и размерът на стека, разпределен към него при стартиране, надвишава размера на страницата, в повечето случаи ще видите, че за 64-битовия стеков конец са разпределени поне 16Kb. Ето пример за 64-битови и 32-битови стекове на 32-битов поток (32-битовият стек е маркиран "Wow64"):


Можем да намерим отговора в допълнителна информация за паметта в дебъгера на ядрото, която ще ни посочи необходимия лимит, свързан с наличната резидентна памет, целият обем на който е изчерпан:

Наличната резидентна памет е физическата памет, разпределена за данни или код, които трябва да са в RAM. Размерите на нестранирания пул и нестранираните драйвери се изчисляват независимо от това, както и например паметта, запазена в RAM за I/O операции. Всяка нишка има и двата стека в потребителски режим, както споменах по-рано, но те също имат стек с привилегирован режим (режим на ядрото), който се използва, когато нишките се изпълняват в режим на ядро, например при изпълнение на системни повиквания. Когато дадена нишка е активна, нейният стек на ядрото се закрепва в паметта, така че нишката може да изпълнява код в ядрото, за който страници не могат да липсват.
Базовият стек на ядрото е 12KB за 32-битов Windows и 24KB за 64-битов Windows. 14225 нишки изискват приблизително 170 MB резидентна памет за себе си, което точно съответства на количеството свободна памет в тази система с деактивиран Testlimit:

След като се достигне ограничението на наличната системна памет, много основни операции започват да се провалят. Например, ето грешката, която получих, когато щракнах двукратно пряк път към Internet Explorer, разположен на моя работен плот:

Както се очакваше, работещ на 64-битов Windows с 256MB RAM, Testlimit успя да създаде 6600 нишки - около половината от броя нишки, които тази програма може да създаде в 32-битов Windows с 256MB RAM - преди да изтече наличната памет:
Причината, поради която по-рано използвах термина "стек" на ядрото, е, че нишката на графики и прозорци получава "големия" стек, когато прави първото повикване с размер (или по-голям) 20KB. 32-битов Windows и 48Kb на 64- битова Windows. Темите Testlimit не извикват такъв API, така че те имат основни стекове на ядрото.