2010-03-09 11 views

Odpowiedz

21

"Blokowanie" oznacza, że ​​osoba dzwoniąca czeka, aż osoba kończąca przetwarzanie zakończy przetwarzanie. Na przykład "odczyt blokujący" z gniazda czeka, dopóki nie ma danych do zwrócenia; "Nie blokujący" odczyt nie powoduje, że po prostu zwraca wskazanie (zwykle liczbę), czy coś było przeczytane.

Słyszysz ten termin głównie wokół interfejsów API, które mają dostęp do zasobów, które niekoniecznie wymagają obsługi procesora - na przykład we/wy. Usłyszysz to również w wielowątkowości: Połączenie z wątku A do wątku B może być zaprojektowane tak, aby "blokować" (przytrzymać wątek A), aż wątek B osiągnie odpowiedni stan, aby przetworzyć lub przynajmniej zaakceptować żądanie. (Najbardziej oczywistym przykładem jest "dołączenie", co zazwyczaj oznacza "I, wątek A, chcę poczekać, aż wątek B zakończy się" - użyjesz go, kiedy wychodzisz z programu wielowątkowego.)

+3

jak to się różni od synchronicznego/asynchronicznego? – alfredo

+1

@Jackie: Nie * bardzo * dużo, ale jest różnica. Zwykle zobaczysz termin "blokowanie" wokół połączenia, które zwróci dane (lub co ty) w ramach tego połączenia (mój przykład odczytuje gniazdo, czeka [blokuje] lub nie blokuje, ale otrzymujesz dane - lub nie - jako bezpośredni efekt połączenia), podczas gdy usłyszysz "asynchroniczny" wokół modelu żądania, a następnie odprawy (lub oddzwaniania). Ale są to ściśle powiązane pojęcia. Domyślam się, że słyszałeś "blokowanie" rzeczy, które są * już * asynchroniczne w jakiś sposób (komunikatory sieciowe, mój powtarzający się przykład) bardziej niż nie. –

+3

Wygląda na to, że nie blokowanie jest dla komunikacji asynchronicznej, a blokowanie to komunikacja synchroniczna, ale to nie jest do końca prawdą. Kod synchroniczny może korzystać z połączeń bez blokowania (np. W pętli, choć nie jest to całkiem praktyczne), a kod asynchroniczny często korzysta z połączeń blokujących (najpierw uzyskuje informacje, jeśli i które połączenie wymaga uwagi, a następnie wywołuje funkcję "blokowania", już znając nie będzie blokować). –

3

W prostych słowach : Jeśli wywołasz funkcję, która zatrzymuje działanie programu, dopóki użytkownik nie wykona jakiejś akcji (lub innej czynności, której twój program nie kontroluje), to wywołanie nazywa się blokowaniem.

+2

jak to się różni od synchronicznego/asynchronicznego? – alfredo