Stavo guardando questo discorso sull'implementazione di Async IO in Rust e Carl menziona due potenziali modelli. Prontezza e completamento.
Modello di prontezza:
- dici al kernel che vuoi leggere da un socket
- fare altre cose per un po '...
- il kernel ti dice quando il socket è pronto
- hai letto (riempi un buffer)
- fai quello che ti serve
- libera il buffer (succede automaticamente con Rust)
Modello di completamento:
- allocare un buffer per il kernel da riempire
- fare altre cose per un po '...
- il kernel ti dice quando il buffer è stato riempito
- fai tutto il necessario con i dati
- libera il buffer
Nell'esempio di Carl sull'uso del modello di prontezza, è possibile scorrere i socket pronti riempiendo e liberando un buffer globale che fa sembrare che userebbe molta meno memoria.
Ora i miei presupposti:
Sotto il cofano (nello spazio del kernel) quando si dice che un socket è "pronto", i dati esistono già. È entrato nel socket sulla rete (o da qualsiasi luogo) e il sistema operativo sta trattenendo i dati.
Non è come se l'allocazione della memoria magicamente non avvenisse nel modello di prontezza. È solo che il sistema operativo lo sta sottraendo da te. Nel modello di completamento, il sistema operativo ti chiede di allocare memoria prima che i dati entrino effettivamente ed è ovvio che cosa sta accadendo.
Ecco la mia versione modificata del modello Readiness:
- dici al kernel che vuoi leggere da un socket
- fare altre cose per un po '...
- EMENDAMENTO: i dati arrivano al sistema operativo (un posto nella memoria del kernel)
- il kernel ti dice che il socket è pronto
- leggi (riempi un altro buffer separato dal buffer del kernel overver (o ottieni un puntatore ad esso?))
- fai quello che ti serve
- libera il buffer (succede automaticamente con Rust)
/ I miei presupposti
Mi piace mantenere piccolo il programma spazio utente, ma volevo solo qualche chiarimento su ciò che, in realtà, sta succedendo qui. Non vedo che un modello utilizzerebbe intrinsecamente meno memoria o supporterebbe un livello più elevato di IO simultaneo. Mi piacerebbe sentire pensieri e spiegazioni più profonde di questo.