"阻塞"一词在编程中意味着什么?

alf*_*edo 19 python api blocking

有人可以提供外行定义和用例吗?

T.J*_*der 23

"阻塞"意味着呼叫者等待被叫者完成其处理.例如,套接字的"阻塞读取"等待直到有数据要返回; "非阻塞"读取不会,它只返回是否有读取的指示(通常是计数).

您会听到这个术语主要围绕访问不一定需要CPU注意的资源的API - 例如I/O. 您还可以在多线程中听到它:从线程A到线程B的调用可能被设计为"阻塞"(保持线程A),直到线程B达到处理或至少接受请求的相关状态.(最明显的例子是"join",通常意味着"我,线程A,想要等到线程B终止" - 你在退出多线程程序时使用它.)

  • 这与同步/异步有什么不同? (3认同)
  • 看起来非阻塞用于异步通信,阻塞是同步通信,但这不是真的.同步代码可以使用非阻塞调用(例如在循环中,虽然它不太实用),异步代码经常使用阻塞调用(首先获取信息,如果需要注意哪个连接,然后调用'阻塞'函数,已经知道它不会阻止). (3认同)
  • @Jackie:不是*非常*多,但是有区别。通常,您会在调用周围看到术语“阻塞”,该调用将返回数据(或您拥有的内容)作为该调用的一部分(我的套接字读取示例;它等待[阻塞]或不[非阻塞],但是你会得到数据——或者没有——作为调用的立即效果),而你会听到请求然后检查返回(或接收回调)模型的“异步”。但它们是密切相关的概念。我猜你经常听到“阻塞”围绕着以某种方式“已经”异步的事物(网络通信,我反复出现的例子)。 (2认同)

fri*_*mle 5

简而言之:如果您调用一个函数,该函数会阻止程序继续运行,直到用户执行某些操作(或您的程序无法控制的其他操作),则此调用称为阻塞调用。

  • 这与同步/异步有何不同? (2认同)