Ответ 1
"Блокировка" означает, что вызывающий абонент ждет, пока вызывающая сторона не завершит свою обработку. Например, "блокировка чтения" из сокета ждет, пока не будут возвращены данные; "неблокирующее" чтение не делает, оно просто возвращает указание (обычно количество) о том, что-то было прочитано.
Вы слышите термин в основном вокруг API, которые получают доступ к ресурсам, которые не обязательно требуют внимания ЦП - например, ввода-вывода. Вы также слышите это в многопоточном режиме: вызов от потока А к потоку В может быть сконструирован так, чтобы "блокировать" (удерживать поток А), пока нить В не достигнет соответствующего состояния для обработки или, по крайней мере, не примет запрос. (Самый очевидный пример: "join", который обычно означает "I, Thread A, хотите дождаться окончания Thread B" - вы используете это при выходе из многопоточной программы.)