Блокирование ввод-вывод означает, что программа по существу спрашивает, "Получают меня эти данные, я буду ожидать до его готового". Это в отличие от неблокирования ввода-вывода. Существует две разновидности: "Получите меня эти данные, я собираюсь пойти, делают что-то еще. Прервите меня, когда данные будут готовы". и "Получают меня эти данные, я собираюсь пойти, делают что-то еще. Я спрошу Вас позже, если у Вас будет он уже".
Это важно, потому что, если программа блокируется при ожидании данных, она не может сделать, вещам нравится, отвечают на щелчки мышью или перекрашивают экран. Это - то, что происходит, когда Вы видите программу, маркированную как "Не отвечающий" в диспетчере задач.
Таким образом, это означает, что процесс зависает (ожидает), пока ввод-вывод не завершается. Эта статья Wikipedia касается его мимоходом, фокусируясь на неблокировании ввода-вывода:
(блокирующийся ввод-вывод был бы) блокировать прогресс программы, в то время как коммуникация происходит, оставляя системные ресурсы неактивными. Когда программа делает много операций ввода-вывода, это означает, что процессор может провести почти все свое время неактивное ожидание операций ввода-вывода для завершения
Конечно, неблокирование ввода-вывода не помогает многому, если следующий шаг должен сделать что-то с теми данными.
Блокирование является более простым, переместите очевидный путь:
bytes = socket.read(); // Thread "blocks" or waits if there's nothing to read
doSomethingWith(bytes);
Вы не можете сделать с двумя лайнерами с неблокированием, так как оно включает установку объектов для каждого соединения, которые затем питаются единственным "мультиплексором", который постоянно ищет следующую вещь, которая входит. Вообразите, как два подхода отличаются с тысячей или миллионом соединений. Вы выбираете один или другой из-за факторов как:
Например, у Вас могла бы быть проблема с блокированием ввода-вывода, содержащего несколько тысяч открытых соединений, один с каждым потоком, потому что Вашей системе не нравится иметь несколько тысяч потоков. Но это оказывается довольно сложным вопросом. Читайте о том, как восприятие перебросило зеркальным отражением с Java, включая связанный показ слайдов (PDF).
В дополнение к указанию на форму синхронной передачи сигналов, в контексте программирования 'блок' может также означать, что раздел кода группировался.