【问题标题】:What is a blocking function?什么是阻塞函数?
【发布时间】:2011-11-16 10:55:49
【问题描述】:

什么是阻塞函数阻塞调用

这是我在提到 Node.js 或实时处理语言时反复看到的一个术语。

【问题讨论】:

    标签: node.js asynchronous real-time terminology blocking


    【解决方案1】:

    一个停止脚本执行直到结束的函数。

    例如,如果我有一个用我的语言编写的用于写入文件的函数,如下所示:

    fwrite(file, "Contents");
    print("Wrote to file!");
    

    print 语句只有在文件写入磁盘后才会执行。整个程序在这条指令上暂停。这对于足够小的写入并不明显,但想象一下我有一个巨大的 blob 要写入文件,这需要几秒钟:

    fwrite(file, blob);
    print("Wrote to file!");
    

    print 语句只会在写入几秒钟后执行,而整个程序将在这段时间内停止。在 Node.js 中,这些工作是异步完成的,使用事件回调。我们的例子会变成:

    fwrite(file, blob, function() {
        print("Wrote to file!");
    });
    print("Do other stuff");
    

    其中第三个参数是文件写入后要调用的函数。位于 write 函数之后的 print 语句将在之后立即调用,无论文件是否已被写入。因此,如果我们要编写一个足够大的 blob,输出可能如下所示:

    Do other stuff
    Wrote to file!
    

    这使得应用程序非常快速,因为您无需等待客户端消息、文件写入或其他。您可以继续以并行方式处理数据。这是 Node.js 的许多优势之一。

    【讨论】:

      【解决方案2】:

      阻塞调用是在返回到调用线程之前不允许处理继续进行的调用——这也称为同步调用。另一方面,异步意味着线程(和代码)可以同时(并发)执行。

      【讨论】:

        【解决方案3】:
        var block = function _block() {
          while(true) {
            readInputs();
            compute();
            drawToScreen();
          }
        }
        

        阻塞函数基本上是永远计算的。这就是阻塞的意思。

        其他阻塞函数会等待 IO 发生

        非阻塞 IO 系统意味着一个函数启动一个 IO 操作,然后进入空闲状态,然后在发生 IO 操作的结果时处理它。

        基本上就是线程空闲和休眠的区别。

        【讨论】:

          猜你喜欢
          • 2020-12-07
          • 1970-01-01
          • 2021-09-29
          • 1970-01-01
          • 1970-01-01
          • 2012-06-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多