5

Что означает термин «блок» по отношению к информатике? Я видел, как его использовали несколько раз, но никогда не понимал, что это значит. Как блокировка ввода / вывода? Поиск в Google, кажется, не очень мне помогает.

5 ответов5

9

Блокировка ввода / вывода означает, что программа по сути спрашивает: «Получите эти данные, я подожду, пока они не будут готовы». Это в отличие от неблокирующего ввода / вывода. Есть два вида: «Принеси мне эти данные, я пойду и сделаю что-нибудь еще». Прервите меня, когда данные будут готовы. »И« Получите эти данные, я пойду и сделаю что-нибудь еще. Позже я спрошу у вас, есть ли у вас это.

Это важно, потому что, если программа блокируется во время ожидания данных, она не может делать такие вещи, как реагирование на щелчки мышью или перекрашивание экрана. Это то, что происходит, когда вы видите программу, помеченную как "Не отвечает" в диспетчере задач.

0

В дополнение к указанию формы синхронной сигнализации, в контексте программирования «блок» также может означать раздел кода, сгруппированный вместе.

0

В итоге это означает, что процесс зависает (ждет), пока не завершится ввод-вывод. Эта статья в Википедии рассказывает об этом попутно, фокусируясь на неблокирующем вводе / выводе:

(блокировка ввода-вывода) заблокирует выполнение программы во время обмена данными, оставляя системные ресурсы бездействующими. Когда программа выполняет много операций ввода-вывода, это означает, что процессор может проводить почти все свое время бездействия в ожидании завершения операций ввода-вывода

Конечно, неблокирующая операция ввода-вывода мало поможет, если следующим шагом будет что-то сделать с этими данными.

0

Блокировка - это более простой, очевидный путь:

bytes = socket.read();  // Thread "blocks" or waits if there's nothing to read
doSomethingWith(bytes);

Вы не можете сделать двухслойный с неблокирующим, так как он включает в себя настройку объектов для каждого соединения, которые затем питаются одним "мультиплексором", который постоянно ищет следующее, что приходит. Представьте, как эти два подхода различаются с тысячей или миллионом соединений. Вы выбираете один или другой из-за таких факторов, как:

  • Количество одновременных подключений для поддержки
  • Среднее время отклика, замеченное отдельным клиентом
  • Общая пропускная способность сервера для всех клиентов

Например, у вас может быть проблема с блокировкой ввода-вывода, при которой открыто несколько тысяч соединений, по одному с каждым потоком, потому что вашей системе не нравится иметь несколько тысяч потоков. Но это оказывается довольно сложным вопросом. Прочитайте о том, как восприятие перевернулось с помощью Java, включая связанное слайд-шоу (PDF).

0

Первое значение блока легко понять в информатике: блок исходного кода на компьютерном языке. Для C/C++, Perl и т.д. Фигурная скобка {блок кода; } разграничивает блок кода. Python использует отступ для блоков.

Второе значение используется в контексте операционной системы (обычно называемой ядром), которая рассматривается как верховный менеджер, управляющий ресурсами. Когда разные процессы или потоки запрашивают (через системные вызовы) ресурсы (ЦП, диск, сеть, память, ...) и ресурс может быть недоступен из-за того, что несколько конкурирующих потоков или процессы запрашивают одно и то же. Ядро приостановит некоторый процесс или потоки (очередь ожидания) и разрешит работу только некоторым процессам или потокам, работающим с ресурсами (состояние выполнения). Приостановленные процессы находятся в состоянии блокировки или заблокированы.

Блокировка может быть достигнута через аппаратные или программные механизмы операционной системой. Запущенный процесс может также попросить операционную систему приостановить их выполнение командой sleep, как в Shell и perl.

Пожалуйста, измените, если моя интерпретация неверна.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .