原创 PHP內核分析之深入理解字符串(七)

一、字符串的結構 struct _zend_string { zend_refcounted_h gc; /* 字符串類別及引用計數 */ zend_ulong h; /* 字符串

原创 PHP內核分析之生命週期五個階段(四)

一、模塊初始化階段 我們先來看一下該階段的每個函數的作用。 1.1、sapi_initialize_request_empty函數 // main/SAPI.c SAPI_API void sapi_initialize_empty_r

原创 Nginx是以多進程的方式來工作的

nginx是以多進程的方式來工作的。 nginx在啓動後,會有一個master進程和多個worker進程。 master進程主要用來管理worker進程: 包含: 1、接收來自外界的信號,向各worker進程發送信號。 2、監控worke

原创 Golang中實現PHP的version_compare函數

PHP的version_compare是對比兩個「PHP 規範化」的版本數字字符串。 mixed version_compare ( string $version1 , string $version2 [, string $oper

原创 PHP內核分析之源碼目錄結構 (二)

一、目錄概覽 以php-7.4.1爲例,目錄多達十多個,下面介紹主要目錄。 ├── build   linux下編譯相關的目錄 ├── ext      PHP的擴展 ├── main   PHP的主要代碼 ├── pear   PHP

原创 億級規模的 Feed 流系統,如何輕鬆設計?

簡介   Feed流是Feed + 流,Feed的本意是飼料,Feed流的本意就是有人一直在往一個地方投遞新鮮的飼料,如果需要飼料,只需要盯着投遞點就可以了,這樣就能源源不斷獲取到新鮮的飼料。 在信息學裏面,Feed其實是一個信息單元,比

原创 爲什麼PHP7中數組初始化後,refcount=2

php版本 7.2 $empty = []; xdebug_debug_zval('empty'); 輸出: empty: (refcount=2, is_ref=0)=array ()     這牽扯到 PHP7 中的另一個概念,叫做

原创 Laravel神奇的服務容器

IoC 容器, laravel 的核心 Laravel 的核心就是一個 IoC 容器,根據文檔,稱其爲“服務容器” 通過舉例來讓讀者去理解什麼是 IoC(控制反轉) 和 DI(依賴注入) 超人和超能力,依賴的產生! 面向對象編程,有以下幾

原创 理解PHP中的Generator

PHP中Generator,似乎是在5.5版中引入了。 PHP中的協程必須依賴於Generator來實現,所以我覺得有必要先專門寫一篇文章介紹Generator。 Generator這個單詞在這裏對應的中文詞語應該是“生成器”,在編程這個

原创 Mysql中 面試必考

通用規則是: 多讀少寫加緩存,少讀多寫加隊列 帶事務的不要整體commit,分段commit 一、要保證數據庫的效率,要做好以下四個方面的工作: ① 數據庫設計 ② sql語句優化 ③ 數據庫參數配置 ④ 恰當的硬件資源和操作系統   二

原创 Golang中協程調度器底層實現( G、M、P)

三個必知的核心元素。(G、M、P) G:Goroutine的縮寫,一個G代表了對一段需要被執行的Go語言代碼的封裝 M:Machine的縮寫,一個M代表了一個內核線程,等同於系統線程 P:Processor的縮寫,一個P代表了M所需的上下

原创 Linux磁盤被佔用找不到佔用文件,磁盤空間沒釋放

1、用df 檢查發現磁盤佔用過高   [root@/]#df -h 2、用du檢查發現各目錄佔用的空間都很少,有約20G的空間莫名其妙地丟了.   [root@/]# du -ah --max-depth=1 ./ 3、用lsof檢查後才

原创 零拷貝的實現原理

全稱:non-blocking IO(實際上是 new io),NIO在Linux上使用了epoll這個系統調用,epoll能夠做到已註冊的連接在消息到來的時候主動通知調度器,將消息加入消息隊列。非阻塞io最重要的其實就是解決了read函

原创 PHP內核分析之變量zval在php5和php7中的區別(五)

一、PHP7中的zval使用棧內存 在 PHP7 中 zval 有了新的實現方式。最基礎的變化就是 zval 需要的內存不再是單獨從堆上分配,不再自己存儲引用計數。複雜數據類型(比如字符串、數組和對象)的引用計數由其自身來存儲。這種實現方

原创 PHP中 SPL(PHP 標準庫)

一、什麼是spl庫? SPL是用於解決典型問題(standard problems)的一組接口與類的集合。 此擴展只能在php 5.0以後使用,從PHP 5.3.0 不再被關閉,會一直有效.成爲php內核組件一部份。 SPL提供了一組標準