Поздрави.
Иначе накратко: Blocking е когато примерно викнеш някоя функция, която
чете от буфер, обаче той е празен и програмата ти спира там, докато не
се намери нещо в буфера да ти го даде. Примерно getchar() като викаш и
програмата спира и чака да въведеш нещо понеже stdin е празно. Non-
blocking респективно е обратното. Програмата не спира, а просто ти
казва, че буфера е празен. Multi-threaded е като използваш няколко
нишки едновременно, така може едната да блокира и да чака, докато
останалите правят нещо друго. Колкото до това дали C се занимава с
това - да, занимава се, има стандартна библиотека socket.h. За цели -
това се използва за абсолютно всичко свързано с интернет - чат
програми, мултиплеър игри, браузъри, сървъри, бла бла... Поздрави.