2011-03-14 79 views
9

我正在学习PHP 5认证考试。这个功能在练习考试中被提及。PHP流中的阻塞和非阻塞模式

功能stream_set_blocking():

集阻断或上 流非阻塞模式。

此功能适用于支持非阻塞模式 (当前是普通文件和套接字 流)的任何流 。

从高层次和低层次的角度来看,阻塞模式和非阻塞模式流在PHP中的表现如何?我是一个套接字流和一个非套接字流?例子表示赞赏。

回答

25

阻塞/非阻塞模式表示如果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)或插座(2)或
http://www.scottklement.com/rpg/socktut/nonblocking.html

+1

非常有用的,谢谢! – 2011-03-14 04:51:48

+0

真棒,你的岩石 – Muhammad 2015-11-11 14:03:20