Come è possibile avere una disponibilità illimitata di thread pur avendo un numero finito di unità di elaborazione fisica?

2

Quindi ho difficoltà a capire la relazione tra thread (software) e core del processore (hardware).

Fondamentalmente la mia comprensione di un core del processore è un'unità che si occupa di comandi ed è essenzialmente ciò che li esegue. Un processore con 2 core funzionanti a 1 kHz può eseguire 2000 comandi al secondo, giusto? Ciò deve significare che i 2 core eseguono simultaneamente un migliaio di comandi al secondo.

Poi ci sono i thread software, che permettono a un programmatore di eseguire codice simultaneamente, ma non sono limitati (in teoria).

Non riesco a capire come sia possibile avere una disponibilità illimitata di thread che eseguono comandi simultaneamente mentre si ha solo un numero finito di unità fisiche che lo fanno?

    
posta php_nub_qq 16.08.2017 - 17:13
fonte

2 risposte

7

A processor with 2 cores operating at 1 kHz can execute 2000 commands per second, right?

Non proprio. Per i processori più semplici, potrebbe essere vero. Ma molti processori possono eseguire più istruzioni contemporaneamente (in un singolo core, senza hyperthreading) e molti processori hanno istruzioni che richiedono più di un ciclo di clock per essere completati.

how is it possible to have limitless availability of threads that execute commands simultaneously while only having a finite number of physical units that do so?

Affinamento temporale . Fondamentalmente, dividendo il tempo della CPU in brevi periodi. Mantieni una coda di tutti i thread, esegui un thread per un po '(ad esempio qualche centinaio di microsecondi), quindi fermalo, rimani sul retro della coda ed esegui il thread successivo.

Significa che solo un thread per core è in esecuzione in un dato momento. Ma, anche su un singolo computer centrale, possiamo mantenere l'illusione di più thread in esecuzione simultaneamente perché gli umani elaborano consapevolmente le cose nell'intervallo da decine a centinaia di millisecondi, una durata durante la quale sarà sono stati molti diversi thread in esecuzione.

La maggior parte dei sistemi operativi oggi utilizza il multitasking preventivo , in cui il sistema operativo interrompe forzatamente un thread dopo il tempo assegnato fetta scade. Alcuni usano multitasking cooperativo , in cui un thread continuerà ad essere eseguito fino a quando il thread stesso non deciderà di cedere e lasciare eseguire qualcun altro.

Potresti chiederti come può essere eseguito il sistema operativo per gestire tutti questi thread.

Nel multitasking cooperativo, dovrebbe essere abbastanza ovvio che il thread in esecuzione può eseguire un'istruzione che controlla le mani sul sistema operativo (commentare se non è chiaro). Sì, questo vuol dire che è facile per un'applicazione mal funzionante portare giù l'intero sistema, motivo per cui attualmente la maggior parte dei sistemi operativi tradizionali non sono cooperativi.

Nel multitasking preventivo, l'hardware genera un interrupt dopo un determinato periodo di tempo (che il sistema operativo solitamente può configurare) . Gli interrupt fanno sì che la CPU passi a una routine di servizio di interruzione , per gestire quel particolare interrupt. Le ISR sono impostate dal kernel durante l'avvio, quindi quando l'interruzione del timer si attiva, il sistema operativo ottiene il controllo e può scambiare quale thread eseguire successivamente.

    
risposta data 16.08.2017 - 17:23
fonte
3

Puoi avere molti thread perché un core del processore può eseguire istruzioni su un thread per un po ', e poi passare a un altro thread, eseguendo alcune istruzioni lì. Questo processo si verifica rapidamente e continuamente, facendo apparire che tutti i thread sono in esecuzione simultaneamente. Ma l'unica volta che i thread in realtà vengono eseguiti simultaneamente è quando si dedica un thread singolo a ciascun core del processore.

I thread richiedono un sovraccarico per funzionare. Se si allocano troppi thread, è possibile effettivamente diminuire il rendimento, perché si impiegano più tempo nel sovraccarico che non nel lavoro effettivo. Quindi il numero di thread che puoi praticamente non è illimitato.

    
risposta data 16.08.2017 - 17:21
fonte

Leggi altre domande sui tag