【问题标题】:Blocking and non-blocking modes in PHP StreamsPHP Streams 中的阻塞和非阻塞模式
【发布时间】:2011-07-14 18:03:02
【问题描述】:

我正在准备 PHP 5 认证考试。在练习考试中提到了这个功能。

函数stream_set_blocking():

设置阻塞或非阻塞模式 一个流。

此功能适用于任何流 支持非阻塞模式 (目前,常规文件和套接字 流)。

从高级和低级的角度来看,阻塞模式和非阻塞模式流在 PHP 中的表现如何?什么是套接字流和非套接字流?示例表示赞赏。

【问题讨论】:

    标签: php stream


    【解决方案1】:

    阻塞/非阻塞模式表示 fread/fwrite 函数是否会立即返回。在non-blocking mode 中时,它们将返回任何可用数据。如果在调用函数时无法读取数据,则不会返回任何数据。此类流通常在循环中进行轮询。

    然而,在blocking mode 中,该函数将始终等待(因此会阻止您的程序执行),直到它能够满足完整的读取请求。如果您要求从网络套接字读取 1MB,该函数将在收到 1MB 以传递之前不会返回。

    我认为维基百科很好地涵盖了它:
    http://en.wikipedia.org/wiki/Berkeley_sockets#Blocking_vs._non-blocking_mode

    它主要影响网络文件/流源。对于本地文件系统,操作系统将始终读取所需长度的数据。 PHP 也有stream wrappers,它可以自行决定处理该选项(没有可靠的一般规则)。

    有关更多底层细节,请访问 fnctl(2) 或 socket(2) 的手册页或
    http://www.scottklement.com/rpg/socktut/nonblocking.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-06
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      相关资源
      最近更新 更多