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