【每日一題】進程與線程

人生苦短,總需要一點儀式感。比如學前端~
用戶下達運行程序的命令時,就會產生進程。同一程序可產生多個進程(一對多的關系),來允許同時有很多位用戶運行同一程序,卻不會相沖突。
進程需要一些資源才能完成的工作,如 cpu 使用時間、存儲器、文件以及 I/O 設備,并且依照順序逐一進行,也就是每個 CPU 核心任何時間內僅能運行一項進程。
進程和線程的區(qū)別:
進程是計算機管理運行程序的一種方式,一個進程下可包含一個或多個線程。
也就是說,進程是我們運行的程序代碼和占用的資源總和,線程是進程的最小執(zhí)行單位,當然也支持并發(fā)。可以說是把問題細化,分成一個個更小的問題,進而得以解決。
并且進程內的線程是共享進程資源的,處于同一地址空間,所以切換和通信相對成本小,而進程可以理解為沒有公共的包裹容器。
但是如果進程間需要通信的話,也需要一個公共環(huán)境或者一個媒介,這個就是操作系統(tǒng)。
進程的理解
計算機是由單核、多核的,也有多種的組合方式:
-
單進程:因為是一個進程,所以某一時刻只能處理一個事務,后續(xù)需要等待,體驗不佳。 -
多進程:為了解決上面的問題,但是如果有很多請求的話,會產生很多進程,開銷本身就是一個不小的問題,而進程占據獨立的內存,這么多響應式的進程難免會有重復的狀態(tài)和數據,會造成資源浪費。 -
多進程多線程:由于之前的進程處理事務,改成使用線程處理事務,解決了開銷大,資源浪費的問題,還可以使用線程池,預先創(chuàng)建諸多線程,減少創(chuàng)建和銷毀線程的開銷。但是一個 cpu 某一時刻只能處理一個事務。就像時間分片來調度線程的話,會導致線程切換頻繁,是非常耗時的。 -
單線程單進程:類似 V8,基于事件驅動,有效避免內存開銷和上下文切換,只需要線程間通信,即可在適當的時刻進行事務結果的反饋。但是遇到計算量很大的事務,會阻塞后續(xù)任務的執(zhí)行 -
單進程單線程(多進程架構):node 提供了 cluster 和 child_process 兩個模塊進行進程的創(chuàng)建,也就是我們常說的主(Master)從(worker)模式。Master 負責任務調用和管理 Worker 進程,Worker 進行事務處理。
所有《每日一題》的 知識大綱索引腦圖 整理在此:https://www.yuque.com/dfe_evernote/interview/everyday
你也可以點擊文末的 “閱讀原文” 快速跳轉
讓我們一起攜手同走前端路!
關注公眾號回復【加群】即可
