Pot un nucli de la CPU tenir 4 fils?

Diguem que tinc un processador amb 4 nuclis i 4 fils i una aplicació amb 20 fils que necessito que facin comprovacions constants (s'ha de dir que són esdeveniments), com s'executen tots els fils al mateix temps amb la seva quantitat limitada de fils? Sé que el processador canvia entre un fil d'un altre i, ja que els canvis són tan ràpids, no els adonem, però això és tot el que passa o l'ordinador fa una altra cosa. A més a més, com desa l'ordinador la informació de cada fil en un moment, només a la memòria RAM?

2 respostes 2

20 fils no poden executar exactament el mateix temps excepte en un sistema amb 20 o més nuclis. El que el sistema pot fer és fer-ho look Com que estan corrent molt a prop de ser al mateix temps.

Aquest és el planificador del sistema operatiu.

Abans de l'hora dels processadors multicore el sistema operatiu ha de compartir temps de CPU a través de diversos processos, cadascun dels quals tenia el potencial de tenir múltiples fils diferents.

El sistema operatiu s'ha de gestionar cada fil, tot localitzant-lo una quantitat de temps a la CPU, restaurant l'estat, executant el fil, suspendre i desar l'estat. Res d'això és molt diferent entre multi-core, multi-CPU o únic-core.

El que ha canviat és el nivell de complexitat i el nombre de coses que es poden planificar per executar-se alhora. On només podíem fer funcionar un fil cada vegada que podem córrer quatre. El mateix procés de mantenir la pista de l' estat de fil succeeix (programa del programa, etc) i no importa quants fils té un programa.

El sistema operatiu provarà de planificar tots els fils en algun moment de la CPU basant- se en si tenen feina per fer (pot estar esperant en un maquinari i algunes dades des del disc), quina és la prioritat del procés/tread i un munt d' altres coses. Els fils poden notificar al sistema operatiu que no tenen feina a fer fins que succeeixin diversos esdeveniments i que poden arribar a temps, maquinari o esdeveniments de programari i així successivament. En aquest cas, el planificador del sistema operatiu simplement pot saltar sobre aquest fil fins que trobi un fil llest per a fer alguna feina.

En el moment en què el sistema que estic utilitzant és informar que hi ha 2500 fils a través de tots els processos que s'estan executant, òbviament seria impossible que tots s'executen simultàniament en un processador de base 4.

Primer: una CPU no té fils, malgrat el que el màrqueting intenta reclamar. Una CPU pot executar fins al número indicat de fils a la vegada. Específicament, una CPU amb n Els nuclis i l' hiperfilament no estan habilitats poden executar n fils. Una CPU amb n Els nuclis i l' hiperfilisme habilitat poden executar 2_ n_ fils. En els contexts tècnics ens referim a "la cosa que pot iniciar un fil" com a Processador lògic , o LP. Una màquina sense HH habilitat té un LP per nucli; HT li dóna dos.

Un sistema Windows típic té centenars o fins i tot milers de fils grans, total, alhora. Això depèn del codi de cada programa individual per a decidir. Quan creeu un procés, aquest procés sempre comença amb un fil. Alguns programes senzills, particularment els programes de línia d' ordres (mode de caràcters), poden usar només un fil. Però el codi en execució en aquest primer fil pot crear altres fils, i aquells Els fils poden crear altres fils, i així successivament, gairebé sense un límit pràctic. Hi ha bones raons per no simplement crear un gran nombre de fils, però no hi ha res que pugui fer impossible crear més fils que un d'ells tindria un ús.

(A x86, amb els valors per omissió per a la mida de la pila de fils, hi ha un límit al voltant de 2000 fils per procés - imposat pel límit d' espai d' adreces.)

A la pestanya Detalls del gestor de tasques, podeu habilitar la columna de fils, que us dirà quants fils hi ha en cada procés. Aquesta és una ordre PowerShell que comptarà tots els fils en el vostre sistema:

($reads = get- im Exemple win32_ read). Nombre
3437

Això és en una màquina amb quatre nuclis hiperfils, total de 8 LPs.

Això no és cap problema perquè només uns quants d'aquests fils realment volen executar-se en qualsevol moment. La majoria de fils en la majoria dels processos passen la major part del seu temps en el que Windows anomena un estat d' espera, de manera que no volen, o no poden, usar el temps de la CPU en tot moment. Estan esperant E/O (potser xarxa, potser disc, etc.) per completar, estan esperant que l' entrada de l' usuari, estan esperant que algun altre fil deixi anar un recurs que necessiti accedir, etc. ( sistemes amb "mobiliaris" en diuen "bloquejat."

Així que sembla que només hi ha 10 fils que intenten utilitzar els LP en aquest moment. Però és encara millor que això. Amb 8 LPs, 8 d' aquests fils són els fils inactius del sistema. Hi ha un fil inactiu dedicat a cada LP. Sempre estan a punt per córrer, però només funcionen si res més vol la LP. Així que en el moment en què vaig fer les ordres per sobre només hi havia dos fils "real" que volien treballar. Les activitats dels fils inactius són no Incloure en la gràfica de tasques de la utilització de la CPU.

n.b.Aquests números no són gaire precisos perquè aquestes operacions de Powershell i WMI no estan internament sincronitzats amb les funcions de l'OSM. Però estan prou a prop com per il·lustrar el punt.

Si hi ha més fils (que els fils inactius) "LPy" que aquí, el planificador, en general, tria la prioritat més alta nLPs fils - subjectes a alguns ajustaments d'acord amb qui va córrer amb el que les CPU fa poc. Si hi ha múltiples fils en la mateixa prioritat que poden ser "time-sliced", executant- se d' una manera "al voltant de l'entretrobin," cada un s' obté a executar per 20 o 60 ms abans que el planificador faci que el LP canviï a una altra.

Aquí és una resposta que vaig donar això en molt més detall sobre com funcionen les prioritats dels fils en Windows.

Artículos Relacionados:

- Processador -

Esta web usa cookies, puedes ver la política de cookies, aquí -
Política de cookies +