我正在攻读PHP 5认证考试。练习考试中提到了这个功能。
function stream_set_blocking():
设置阻止或非阻止模式 一条小溪。
此功能适用于任何流 支持非阻塞模式 (目前,常规文件和套接字 流)。
从高级别和低级别的角度来看,阻塞模式和非阻塞模式流如何在PHP中运行?什么是套接字流和非套接字流?赞赏的例子。
答案 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