PHP Streams中的阻塞和非阻塞模式

时间:2011-03-14 03:53:16

标签: php stream

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

function stream_set_blocking():

  

设置阻止或非阻止模式   一条小溪。

     

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

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

1 个答案:

答案 0 :(得分:27)

阻塞/非阻塞模式表示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