Vad är icke-blockerande uttag?
Vad är icke-blockerande uttag?

Video: Vad är icke-blockerande uttag?

Video: Vad är icke-blockerande uttag?
Video: A tale of two cities: blocking code vs. non-blocking code 2024, Maj
Anonim

icke - blockerande uttag . Lösningen på detta problem kallas " icke - blockerande uttag ". Som standard, TCP uttag är i " blockering "-läge. När du till exempel anropar recv() för att läsa från en ström, returneras inte kontrollen till ditt program förrän minst en byte med data har lästs från fjärrplatsen.

Följaktligen, vad är blockerande och icke-blockerande uttag?

I blockering läge, recv, send, connect (endast TCP) och acceptera (endast TCP) uttag API-anrop kommer blockera på obestämd tid tills den begärda åtgärden har utförts. I icke - blockering läge kommer dessa funktioner tillbaka omedelbart. välj vilja blockera tills uttag är redo.

Man kan också fråga sig, blockerar sockets som standard? Förbi standard , TCP uttag är placerade i en blockering läge. Detta innebär att kontrollen inte återförs till ditt program förrän någon specifik operation är klar.

Angående detta, hur gör man ett icke blockerande uttag?

För att markera a uttag som icke - blockering , använder vi fcntl-systemanropet. Här är ett exempel: int flaggor = guard(fcntl(socket_fd, F_GETFL), "kunde inte få filflaggor"); guard(fcntl(socket_fd, F_SETFL, flaggor | O_NONBLOCK), "kunde inte uppsättning filflaggor");

Vad är uttagsblockering?

A uttag kan vara i" blockeringsläge " eller "icke-blockerande läge ." Funktionerna för uttag i blockering (eller synkron) läge återvänd inte förrän de kan slutföra sin åtgärd. Det här kallas blockering eftersom den uttag vars funktion anropades kan inte göra någonting - blockeras - tills anropet återkommer.

Rekommenderad: