2009-09-26 8 views

Odpowiedz

9

Blokowanie operacji we/wy oznacza, że ​​wykonywanie programu jest wstrzymywane w trakcie operacji we/wy. Program czeka więc na zakończenie operacji I/O, a następnie kontynuuje jej wykonywanie. W nieblokujących I/O program może być kontynuowany podczas operacji we/wy.

+7

... i jest zgłoszony za pośrednictwem oddzwanianie po zakończeniu operacji we/wy. Zmusza to do projektowania programów w różny sposób, ale sprawi, że będą one działać o wiele lepiej. –

+0

@ Lex, każdy przykład blokowania i odblokowywania operacji? Dzięki. – Kalanidhi

+1

@etc_passwd W JS jest to łatwe do zrozumienia; wywołanie funkcji 'alert(); 'jest blokowane, ponieważ wykonywanie jest wstrzymywane, dopóki użytkownik nie kliknie przycisku OK. Wywołanie AJAX nie jest blokujące, wykonanie jest kontynuowane podczas wysyłania żądania HTTP. –

0

prostu powiedział .. non blokowanie wejścia/wyjścia (Asynchronous) umożliwia inne operacje mają być przeprowadzone, gdy to robi jego rzecz i blokowanie I/O będzie blokować inne operacje

4

Jest to problem współbieżności. W normalnym przypadku po tym, jak jądro systemu operacyjnego otrzyma operację We/Wy z programu użytkownika, program ten nie zostanie uruchomiony ponownie, dopóki nie zakończy się operacja We/Wy. W międzyczasie inne programy są zazwyczaj planowane.

Rozwiązuje to wiele małych problemów. Na przykład, w jaki sposób program wie, ile bajtów zostało przeczytanych, chyba że operacje we/wy zostały zakończone po powrocie do trybu read(2)? Skąd wiadomo, czy może ponownie użyć bufora write(2), jeśli operacja jest nadal w toku, gdy zwraca się write(2)? Oczywiście, dla prawdziwie asynchronicznego I/O potrzebny jest bardziej złożony interfejs.

Ostatecznie wszystko sprowadza się do:

  1. I/O dzieje się synchronicznie w stosunku do programu, poprzez blokowanie programu aż do I/O zakończeniu
  2. I/O jest jedynie zaplanowane przez wywołanie systemowe i istnieje mechanizm powiadamiania o prawdziwym wyniku.
  3. Istnieje kompromis, w którym operatory we/wy po prostu nie działają, jeśli nie można ich natychmiast zakończyć. Jest to bardziej powszechne użycie "nieblokujących" we/wy w praktyce.

Cała sprawa komplikuje ponadto przez wysiłku, aby zaplanować programów wielowątkowych podczas I/O mogłaby blokować tylko jeden wątek, ale to już zupełnie inna kwestia ...