Blocking IO vs niet-blocking IO; op zoek naar goede artikelen

Er was eens een Inleiding tot Indyartikel en kan sindsdien niet stoppen met denken aan blokkeren versus niet-blokkerende IO.

Op zoek naar een aantal goede artikelen die beschrijven wat de voor- en nadelen zijn van het blokkeren van IO en niet-blokkerende IO en hoe u uw toepassing in elk geval kunt ontwerpenom natuurlijke, gemakkelijk te begrijpen en gemakkelijk te onderhouden code te krijgen .
Zou graag GROTE foto willen begrijpen…


Antwoord 1, autoriteit 100%

Goed blokkeren van IO betekent dat een bepaalde thread niets meer kan doen totdat de IO volledig is ontvangen (in het geval van sockets kan dit lang wachten).

Niet-blokkerende IO betekent dat een IO-verzoek meteen in de wachtrij wordt geplaatst en dat de functie terugkeert. De eigenlijke IO wordt dan op een later moment door de kernel verwerkt.

Voor het blokkeren van IO moet je ofwel accepteren dat je op elk IO-verzoek gaat wachten of je moet een thread per verzoek starten (wat heel snel erg ingewikkeld wordt).

Voor niet-blokkerende IO kunt u meerdere verzoeken verzenden, maar u moet er rekening mee houden dat de gegevens pas op een “later” punt beschikbaar zijn. Dit controleren of de gegevens daadwerkelijk zijn aangekomen, is waarschijnlijk het meest gecompliceerde deel.

In 99% van de applicaties hoeft u zich er geen zorgen over te maken dat uw IO blokkeert. Soms heb je echter de extra prestatie nodig om jezelf toe te staan ​​een IO-verzoek te initiëren en dan iets anders te doen voordat je terugkomt en, hopelijk, ontdekt dat het IO-verzoek is voltooid.

Hoe dan ook, alleen mijn tuppence.

Bewerken: coroutineszou een goede match kunnen zijn.


Antwoord 2, autoriteit 45%

De positieve en negatieve punten zijn vrij duidelijk:

Blokkeren – Lineair programmeren, gemakkelijker te coderen, minder controle.
Niet-blokkerend – Parallel programmeren, moeilijker te coderen, meer controle.

Other episodes