Se usi il multitasking cooperativo e hai un cattivo programma: allora sì, hai ragione.
Tuttavia, nel mondo reale dovrebbe succedere quanto segue:
Multitasking cooperativo: non continuo a usare la CPU per sempre. Invece, darà un altro programma una possibilità dopo qualche tempo o quando è bloccato.
La risposta di Paolo descrive quest'ultima.
Multitasking preventivo (utilizzato quasi ovunque): il sistema operativo (non il programma) fornirà la CPU per un breve periodo di tempo a un programma, quindi lo porterà via. Questo può essere semplicistico come l'esecuzione di un timer e una volta scaduto arrestare il processo e consegnarlo al passo / programma successivo che è in attesa.
Nel tuo caso pensalo come un ufficio con due lavoratori e tre (o più) compiti. (Chiamiamoli task-A, task-B e task-C).
Il primo lavoro controlla gli ordini dei supervisori che dichiarano:
- Imposta un timer di 10 minuti. Quando si interrompe smettere di lavorare sull'attività corrente, inserirla in fondo all'elenco TODO e continuare a leggere questo documento.
- Quindi rimuovere il primo elemento dalla cima dell'elenco TODO e iniziare a lavorarci su.
- Ripetere.
Il lavoratore 1 imposta il timer e ottiene il primo compito dell'elenco TODO (in questo caso è l'attività A).
Il lavoratore 2 fa la stessa cosa: imposta un timer e ottiene ciò che è ora dalla cima dell'elenco TODO. Da quando il lavoratore 1 ha rimosso l'attività A, il lavoratore 2 ora inizia l'attività B.
Dieci minuti dopo il timer si spegne. Il lavoratore 1 smette di lavorare sull'attività A e ottiene le istruzioni dei supervisori. Questi affermano di mettere l'attività corrente in fondo all'elenco TODO. Continuando le istruzioni del supervisore ora riavvia il timer e inizia a lavorare su ciò che è ora in cima all'elenco TODO (che è task-C).
Il lavoratore 2 fa lo stesso e interrompe l'attività B e inizia con la parte superiore dell'elenco TODO (che nell'esempio è l'attività A)
Ecc. Ecc.
Questo è in qualche modo semplificato. Ma dovrebbe darti un'idea di come due gradini (lavoratori) possano lavorare il 100% delle volte su tre o più attività.
Nei programmatori reali ci sono molte altre cose. Ad esempio, interrompe (confrontalo con un telefono che squilla nel mezzo di un'attività e come gestirlo), pianificazione intelligente (assegnando la stessa attività allo stesso lavoratore probabilmente ne risulterà più veloce poiché il lavoratore lo conosce già) , I / O (se un lavoratore ha bisogno di un libro da una o più biblioteche, non attenderà la scadenza del timer, ma continuerà immediatamente con l'attività successiva, ecc. Ecc.