编程中“阻塞”一词是什么意思?
有人能给个通俗易懂的定义和使用场景吗?
2 个回答
5
简单来说:如果你调用了一个函数,这个函数会让程序停下来,直到用户完成某个操作(或者其他一些你的程序无法控制的操作),那么这个调用就叫做“阻塞调用”。
35
“阻塞”意味着调用者会等待被调用者完成它的处理。举个例子,从一个套接字进行“阻塞读取”时,会一直等到有数据可以返回;而“非阻塞读取”则不会,它只是返回一个指示(通常是一个计数),告诉你是否有数据被读取。
你会在一些访问资源的API中听到这个词,这些资源不一定需要CPU的关注,比如输入输出(I/O)。在多线程中你也会听到这个词:线程A对线程B的调用可能会设计成“阻塞”,也就是说线程A会被暂停,直到线程B达到可以处理请求的状态(或者至少能接受请求)。最明显的例子就是“join”,这通常意味着“我,线程A,想等到线程B结束”——你在退出一个多线程程序时会用到这个。