# 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行程

* 一個 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搬運 成本

---