摘要:磁盤高速緩存操作系統(tǒng)中使用磁盤高速緩存技術來提高磁盤的速度,對高速緩存復制的訪問要比原始數(shù)據(jù)訪問更為高效。因此,磁盤高速緩存在邏輯上屬于磁盤,物理上則是駐留在內(nèi)存中的盤塊。
1. 磁盤高速緩存(Disk Cache)
操作系統(tǒng)中使用磁盤高速緩存技術來提高磁盤的I/O速度,對高速緩存復制的訪問要比原始數(shù)據(jù)訪問更為高效。例如,正在運行的進程的指令既存儲在磁盤上,也存儲在物理內(nèi)存上,也被復制到CPU的二級和一級高速緩存中。
不過,磁盤高速緩存技術不同于通常意義下的介于CPU與內(nèi)存之間的小容量高速存儲器,而是 指利用內(nèi)存中的存儲空間來暫存從磁盤中讀出的一系列盤塊中的信息。因此,磁盤高速緩存在邏輯上屬于磁盤,物理上則是駐留在內(nèi)存中的盤塊。
高速緩存在內(nèi)存中分為兩種形式:一種是在內(nèi)存中開辟一個多帶帶的存儲空間作為磁速緩存,大小固定;另一種是把未利用的內(nèi)存空間作為一個緩沖池,供請求分頁系統(tǒng)和磁盤I/O時共享。
2. 緩沖區(qū)(Buffer)高速設備(如CPU)和低速設備(如磁盤)的通信都要經(jīng)過緩存區(qū),高速設備永遠不會直接去訪問低速設備。所以緩沖區(qū)是計算機中暫時存放輸出或輸入信息的內(nèi)存區(qū)域。緩和高速部件和低速部件之間通信速度不匹配的矛盾。
3. PHP輸出緩沖區(qū)輸出緩沖區(qū)顧名思義是輸出信息暫時存放的內(nèi)存區(qū)域,通過ob_*系列函數(shù)來控制輸出緩沖區(qū)。
當php腳本執(zhí)行結(jié)束(會自動調(diào)用ob_flush())或強制刷新(手動調(diào)用ob_fush())緩沖區(qū)后,才會把數(shù)據(jù)發(fā)送給Nginx fastcgi客戶端。當然PHP還有其他的緩沖區(qū),比如字符串緩沖區(qū)finfo::buffer。
PHP的輸出緩沖區(qū)默認是開啟,并且大小是4096字節(jié)。開啟后對所有php頁面都生效。
另外一種在頁面中多帶帶開啟緩沖區(qū)的辦法是ob_start()函數(shù)。
// ob_start()有三個參數(shù),$chunk_size是用來設置緩沖區(qū)大小,可以設置0-4096,默認是0表示大小不限。 bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )
注意:一個ob_start()就是一個新的緩沖區(qū),緩沖區(qū)是互相疊加的
4. Nginx緩沖區(qū)Nginx默認不會實時把php-fpm響應的數(shù)據(jù)返回給客戶端,而是暫存在Nginx緩沖區(qū)中。當php腳本執(zhí)行結(jié)束(自動調(diào)用flush())或強制刷新(手動flush())緩沖區(qū)后,才會把數(shù)據(jù)發(fā)送給客戶端。
5. 瀏覽器緩沖區(qū)瀏覽器默認不會實時顯示從Nginx返回的數(shù)據(jù),而是把接受到的數(shù)據(jù)暫存在瀏覽器緩沖區(qū)中,當緩沖區(qū)滿后,才會開始顯示。不同的瀏覽器緩沖區(qū)大小不同。實際測試發(fā)現(xiàn)Mac 下chrome和safari都需要輸出1024字節(jié)。沒有找到刷新緩沖區(qū)的辦法,可以通過發(fā)送額外的空格來解決。
或者通過curl來請求,通過–no-buffer來禁用curl buffer。
curl "niliu.me" --no_buffer實例篇 實時輸出
// ob_get_level() 返回多少個緩沖區(qū)(因為緩沖區(qū)是疊加的,也可以稱之為多級緩沖區(qū)) var_dump(ob_get_level()); // out: 1, 一級緩沖區(qū) if (ob_get_level() == 0) { // 如果沒緩沖區(qū),就開啟新的PHP緩沖區(qū) // 默認會有一塊緩沖區(qū),默認的緩沖區(qū)其實是很小的,所以不用什么str_pad撐滿 ob_start(); } for ($i = 0;$i < 10;$i ++) { echo "Line to show."; // nginx fastcgi緩沖區(qū)大小是4K,需要發(fā)送額外4K空格; // echo str_pad("",4096)." "; // php緩存刷入Apache/nginx ob_flush(); // 從Apache/nginx刷到瀏覽器 flush(); //此時,瀏覽器應該顯示了, 如果瀏覽器不是即時顯示,就輸空格撐滿瀏覽器buffer // echo str_repeat(" ",1024); sleep(2); } echo "Done."; ob_end_flush(); // 沖刷出(送出)輸出緩沖區(qū)內(nèi)容并關閉緩沖 var_dump(ob_get_level()); // out: 0, 無緩沖區(qū)模板渲染
class Template{ /** * 渲染方法 * * @access public * @param obj 信息類 * @param string 模板文件名 */ public function render($context, $tpl){ $closure = function($tpl){ ob_start(); include $tpl; return ob_end_flush(); }; // PHP7: $closure->call($context, $tpl); $closure = $closure->bindTo($context, $context); $closure($tpl); } }靜態(tài)頁生成
// 開啟緩沖區(qū) ob_start(); // 業(yè)務邏輯省略 // ..... $this->assign("模板中的變量分配"); $tpl->display("default_1.tpl"); // 獲取緩沖區(qū)中解析變量后的模板 $html = ob_get_contents(); // 清空并關閉緩沖區(qū) ob_end_clean(); // 把html寫入文件 // 業(yè)務邏輯省略 ...
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/31455.html
摘要:匿名函數(shù)輸出可以直接將匿名函數(shù)進行傳遞。報錯,找不到變量之所以稱為副本,是因為通過閉包傳值到匿名函數(shù)內(nèi)的變量值也是不能改變。該方法使用了一個作為回調(diào)函數(shù)。 匿名函數(shù) // Example1 $func = function( $param ) { echo $param; }; $func( some string );//輸出:some string // Example2...
摘要:概述字節(jié)碼緩存不是的新特性,有很多獨立的擴展可以實現(xiàn),比如和等,但是截至目前這些擴展都沒有集成到內(nèi)核,從開始,內(nèi)置了字節(jié)碼緩存功能,名為。開始之前,我們先來看看什么是字節(jié)碼緩存,以及字節(jié)碼緩存的作用是什么。該函數(shù)將重置整個字節(jié)碼緩存。 概述 字節(jié)碼緩存不是PHP的新特性,有很多獨立的擴展可以實現(xiàn),比如APC、eAccelerator和Xache等,但是截至目前這些擴展都沒有集成到PHP...
摘要:而依賴倒置原則的思想是,上層不應該依賴下層,應依賴接口。上面通過構(gòu)造函數(shù)注入對象的方式,就是最簡單的依賴注入當然注入不僅可以通過構(gòu)造函數(shù)注入,也可以通過屬性注入,上面你可以通過一個來動態(tài)為這個屬性賦值。 依賴倒置和控制反轉(zhuǎn)是一種編程思想,而依賴注入就是通過服務容器實現(xiàn)這種面向接口或者是面向抽象編程的思想 概念理解 依賴倒置原則 依賴倒置是一種軟件設計思想,在傳統(tǒng)軟件中,上層代碼依賴于下...
摘要:通過生成器來生成關聯(lián)數(shù)組下面每一行是用分號分割的字段組合,第一個字段將被用作鍵名。正常來說,產(chǎn)生的是一個,它的成員變量與函數(shù)不存在別名引用關系。關鍵字在的版本,生成器允許從其他生成器,可迭代對象或數(shù)組通過關鍵字來生成對應的值輸出 一般你在迭代一組數(shù)據(jù)的時候,需要創(chuàng)建一個數(shù)據(jù),假設數(shù)組很大,則會消耗很大性能,甚至造成內(nèi)存不足。 //Fatal error: Allowed memory ...
摘要:復制當前閉包對象,綁定指定的對象和類作用域。類作用域,可以是對象,也可以是實例名稱什么是匿名類先理解以下三個例子例閉包函數(shù)都是繼承類返回匿名函數(shù)返回匿名函數(shù),也就是閉包函數(shù),所有閉包函數(shù)都是繼承類輸出例將一個匿名函數(shù)綁定到一個類中。 類結(jié)構(gòu) Closure { /* 方法 */ // 用于禁止實例化的構(gòu)造函數(shù) __construct ( void ) ...
閱讀 942·2021-09-07 09:58
閱讀 1491·2021-09-07 09:58
閱讀 2884·2021-09-04 16:40
閱讀 2506·2019-08-30 15:55
閱讀 2414·2019-08-30 15:54
閱讀 1371·2019-08-30 15:52
閱讀 434·2019-08-30 10:49
閱讀 2606·2019-08-29 13:21