深入解析PHP底層之Running process
本篇文章帶大家深入解析一下PHP Running process。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。
PHP的底層語言是C語言 C語言是編譯型 語言。
我用processon做了張圖 以後慢慢再持續填坑編譯型語言:程式執行前需要一個專門的編譯過程,把程式編譯成機器語言的文件,執行時間不需要重新翻譯,直接使用編譯的結果就行了。程式執行效率高,依賴編譯器,跨平台性差一點
----------.怎麼變成解釋型語言的呢?
#圖片如果不清晰可以看原圖
網址:http://assets.processon.com/chart_image/603b293b1e08530bb1adcb1c.png##簡單說明下圖片的流程#一 先不考慮CLI和FPM等流程 C語言透過open_file_sanning函數解析到php後綴的檔案
二 呼叫編譯函數zend_compile_file()來進行編譯。這個函數的具體實現其實是包含兩個主要過程的:詞法分析(Lex實現),語法分析(Yacc實現)。執行完這個函數之後:php腳本的編譯就算結束了。這個函數的輸入是:php腳本文件,而輸出則是op_array.簡單一點說:編譯過程就是把腳本給解析成一條條php虛擬機可以處理的指令,而op_array就是這些指令做成的一個array而已(這很類似一些編譯型語言編譯產生的組譯程式碼了,也是一則的指令
三 VM虛擬機呼叫zend_execute()函數來執行。該函數的輸入就是上邊編譯階段產生的op_array,在這裡他會解析每條指令並進行處理。在PHP7.4.5中op指令一共有將近200條所以它需要處理這些指令。每個指令都是有對應的處理器來進行處理的。zend虛擬擬機會依據op_array中各條指令的類型來分發給回應的處理器來處理。
這裡的處理器是zend虛擬機的處理器。不是CPUZend虛擬機處理器其實是處理op指令的邏輯。其可以函數的形式存在,也可能是以邏輯段的方式存在,這取決於指令的分發方式Zend 虛擬機器中分發指令的機制有三種:CALL , SWITCH, 和GOTO這三種類型. switch和goto都是在zend_execute()這個函數中有對應的邏輯段,直接執行就可以了。而call是在zend_execute()這個函數中執行函數呼叫。
你可以發現PHP程式碼其實跑在了zend vm虛擬機裡沒有直接運行在CPU中而 PHP8 中JIT的出現可以讓部分程式碼彙編成機器碼跑在CPU中 關於這部分可以參考 @rhett文章《PHP JIT 技術詳解》做的分析。文章地址:https://zhuanlan.zhihu.com/p/331777202#感謝陳雷前輩的《PHP7原始碼底層設計與實作》
本文經原作者PHP崔雪峰同意,發佈於php中文網,原文網址:https://zhuanlan.zhihu.com/p/353501903
推薦學習:《PHP影片教學
》
以上是深入解析PHP底層之Running process的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

CakePHP 是 PHP 的開源框架。它旨在使應用程式的開發、部署和維護變得更加容易。 CakePHP 基於類似 MVC 的架構,功能強大且易於掌握。模型、視圖和控制器 gu

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

CakePHP 是一個開源MVC 框架。它使應用程式的開發、部署和維護變得更加容易。 CakePHP 有許多函式庫可以減少大多數常見任務的過載。

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲
