Cilat janë prizat jo bllokuese?
Cilat janë prizat jo bllokuese?

Video: Cilat janë prizat jo bllokuese?

Video: Cilat janë prizat jo bllokuese?
Video: Жаңадан бастаушыларға арналған ЭКГ интерпретациясы: 1 бөлім 🔥🤯 2024, Nëntor
Anonim

jo - bllokimi i prizave . Zgjidhja e këtij problemi quhet " jo - bllokimi i prizave Si parazgjedhje, TCP bazat janë në " duke bllokuar " mode. Për shembull, kur telefononi recv() për të lexuar nga një transmetim, kontrolli nuk kthehet në programin tuaj derisa të lexohet të paktën një bajt i të dhënave nga faqja e largët.

Prandaj, çfarë është priza bllokuese dhe jo bllokuese?

Në duke bllokuar modaliteti, recv, dërgo, lidh (vetëm TCP) dhe prano (vetëm TCP) prizë Thirrjet API do bllokoj për një kohë të pacaktuar derisa të kryhet veprimi i kërkuar. Në jo - duke bllokuar mode, këto funksione kthehen menjëherë. zgjidhni do bllokoj deri në prizë eshte gati.

Dikush mund të pyesë gjithashtu, a po bllokohen prizat si parazgjedhje? Nga default , TCP bazat vendosen në a duke bllokuar modaliteti. Kjo do të thotë që kontrolli nuk kthehet në programin tuaj derisa të përfundojë një operacion specifik.

Lidhur me këtë, si të bëni një prizë jo bllokuese?

Për të shënuar një prizë si jo - duke bllokuar , ne përdorim thirrjen e sistemit fcntl. Ja një shembull: int flags = guard(fcntl(socket_fd, F_GETFL), "nuk mund të merrte flamujt e skedarëve"); roje(fcntl(socket_fd, F_SETFL, flamuj | O_NONBLOCK), "nuk mundi vendosur flamujt e skedarëve");

Çfarë është bllokimi i prizës?

A prizë mund të jetë në " mënyra e bllokimit " ose "mosbllokim modaliteti ." Funksionet e bazat në duke bllokuar (ose sinkron) modaliteti mos u ktheni derisa të mund të kryejnë veprimin e tyre. Kjo quhet duke bllokuar sepse prizë funksioni i të cilit u thirr nuk mund të bëjë asgjë - është i bllokuar - derisa thirrja të kthehet.

Recommended: