2011-03-14 184 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