【问题标题】:What does the term "blocking" mean in programming?编程中的“阻塞”一词是什么意思?
【发布时间】:2011-01-25 08:11:52
【问题描述】:

谁能提供一个外行的定义和用例?

【问题讨论】:

    标签: python api blocking


    【解决方案1】:

    “阻塞”意味着调用者等待直到被调用者完成其处理。例如,来自套接字的“阻塞读取”会等待直到有数据返回; “非阻塞”读取不会,它只是返回是否有读取内容的指示(通常是计数)。

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

    【讨论】:

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

    简单来说:如果您调用的函数会阻止程序继续运行,直到用户执行了某些操作(或您的程序未控制的某些其他操作),则此调用称为阻塞调用。

    【讨论】:

    • 这与同步/异步有何不同?
    猜你喜欢
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    相关资源
    最近更新 更多