# PHP、NodeJS比較 ###### tags:`NodeJS` PHP特色: - 單執行緒single thread (一個人在工作)php 可以同時開很多執行緒(兄弟)來處理 - [每個PHP檔案的執行是單執行緒的,但是在伺服器(apache/nigix/php-fpm)是多執行緒的。]([php是單執行緒還是多執行緒](https://www.itread01.com/content/1545328638.html)) - ==阻塞==(一行一行執行)。 - 同步IO(讀寫) > PHP用於伺服器端。 > 開發:由於PHP中的==程式設計風格更簡單==,不需要任何編譯器或轉換器。也沒有託管限制,並且在PHP中使用SQL進行整個設定非常簡單。 > 託管:php==擁有許多託管服務== > 效能:PHP提供==穩定==且一致的效能 > PHP框架中存在的MVC架構將有助於程式碼的使用和維護。 > 他們可以將HTML與框架語法結合在一起,這確實使他們更難擴充套件具有更多功能的PHP應用程式。 > 如果他們需要穩定的後端程式,則只會選擇PHP。 > 1、需要簡化部署和整合時可以使用PHP。 > 2、它與具有Linux Apache,MySQL和PHP的LAMP堆疊完美配合。 > 3、具有內容管理系統(CMS)的任何部落格和電子商務網站。 --- nodejs的誕生是為了==解決php的效能==而誕生的 NodeJS特色: - 單執行緒single thread (一個人在工作)有暗樁其實底層是Multi-thread - 非阻塞(不会等) - 非同步IO(讀寫) - ==event loop事件循環== - NodeJS 可以讓我們脫離瀏覽器、==在伺服器端執行 JS 程式語言的一個環境== - NodeJS是==以Chrome的v8引擎為核心==--> ==效能很好的 JS 執行引擎== > nodejs用於前端、伺服器端。 > 開發:Node.js==非常複雜==,在Node.js中部署框架和應用程式並不容易,並且需要精心準備好伺服器基礎架構。 > 託管:==只有一些託管服務==支援Node.js就是為什麼署框架和應用程式並不容易 > 效能:Node.js比PHP快。發生這種情況的原因有三個: > 1、速度友好的V8發動機。 > 2、Node.js中的回撥函式能夠同時處理許多請求。 > 3、繼續的伺服器連線。 > 如果你打算建立一個實時Messenger平臺,一個動態單頁應用程式,或者你集成了任何前端技術,那麼Node.js就是完美的選擇。 > Node.js > 1、動態單頁應用程式(SPA)。 > 2、軟體堆疊,例如MEAN堆疊(Angular,MongoDB等) > 3、前端技術,例如jQuery,Angular,React等。 > 缺點: > Node.js無法處理大量的CPU活動,例如影片,音訊的生成。它主要專注於開發響應式Web應用程式,這使得建立以圖形為中心的應用程式具有很大的挑戰性。 > https://www.gushiciku.cn/pl/pILL/zh-tw --- ### Program (程式) ==尚未 load 進記憶體的程式碼== ### Process(行程)工廠 從==硬碟==裡載入Program到==記憶體memory==活化成Process,開始搶奪 ==cpu== ,搶到cpu後需要io(讀寫硬碟.網路傳輸)才能讓cpu執行工作,等待資源時會造成(block) indefinite blocking現象:starvation飢餓 解決方法aging tech * 點開應用程式(工作管理員)就是將 程式Program 活化成 Process行程 ![](https://i.imgur.com/r11N6Pr.png =x300) * 一個 Process 底下的 Thread執行緒 是共享資源的,如記憶體、全域變數 (Global Variable) 等 Thread 使用相同的 Memory Space記憶體,但這些 Thread 各自擁有其 Stack(置物櫃) ### thread 執行緒 員工 一個 Process(行程工廠) 會有一個以上的 Thread(執行緒員工),每一個 Thread(員工) 負責某一項功能。 * thread(員工)被包含在 process(行程工廠)(容器) 之中。 ### cpu * 並發性 (Concurrency) 是指多個任務可以在重疊的時間段內開始、執行及完成。並發事件不一定要在同一時刻執行。例如,在==單核機器==上進行多任務處理。每一分鐘換一個任務 * 平行性 (Parallelism) 是指多個任務同時執行 (executed simultaneously),具有並發的意義,但是並發未必平行。雙核心4核心8核心 ### [content switch](https://mropengate.blogspot.com/2015/01/operating-system-ch3-processes.html)搬資料同時做很多事情 搬家也是需要成本的,太多process工廠效能反而不如預期 解法1提供多套registers 解法2改用thread員工共享資源就不用搬來搬去,也是有成本的就是請太多員工,記憶體占空間 JS 設計哲學: 我不想要處理 race condition、我不想要有很多 content switch搬運 成本 ![](https://i.imgur.com/cHcnaZl.png) ---