多程序和多執行緒的概念

2022-10-09 11:21:08 字數 2465 閱讀 7399

說起多執行緒,那麼就不得不說什麼是執行緒,而說起執行緒,又不得不說什麼是程序。

程序可以簡單的理解為乙個可以獨立執行的程式單位,它是執行緒的集合,程序就是有乙個或多個執行緒構成的。而執行緒是程序中的實際執行單位,是作業系統進行運算排程的最小單位。可理解為執行緒是程序中的乙個最小執行單元。

那麼多執行緒就很容易理解:多執行緒就是指乙個程序中同時有多個執行緒正在執行。

為什麼要使用多執行緒?

多執行緒的缺點:

總結:多執行緒是非同步的,但這不代表多線**的是幾個執行緒是在同時進行,實際上是系統不斷地在各個執行緒之間來回的切換(因為系統切換的速度非常的快,所以給我們在同時執行的錯覺)。

程序是程式在計算機上的一次執行活動。當你執行乙個程式,你就啟動了乙個程序。凡是用於完成作業系統的各種功能的程序就是系統程序,而所有由你啟動的程序都是使用者程序。
同理,多程序就是指計算機同時執行多個程序,一般是同時執行多個軟體。

下面是本人從知乎-pansz上**的乙個答案,非常通俗地回答了這個問題。

多執行緒的問題是多個人同時吃一道菜的時候容易發生爭搶,例如兩個人同時夾乙個菜,乙個人剛伸出筷子,結果伸到的時候已經被夾走菜了。。。此時就必須等乙個人夾一口之後,在還給另外乙個人夾菜,也就是說資源共享就會發生衝突爭搶。

1。對於 windows 系統來說,【開桌子】的開銷很大,因此 windows 鼓勵大家在乙個桌子上吃菜。因此 windows 多執行緒學習重點是要大量面對資源爭搶與同步方面的問題。

2。對於 linux 系統來說,【開桌子】的開銷很小,因此 linux 鼓勵大家盡量每個人都開自己的桌子吃菜。這帶來新的問題是:坐在兩張不同的桌子上,說話不方便。因此,linux 下的學習重點大家要學習程序間通訊的方法。

開桌子的意思是指**建立程序。**開銷這裡主要指的是**時間開銷。**

可以做個實驗:建立乙個程序,在程序中往記憶體寫若干資料,然後讀出該資料,然後退出。此過程重複 1000 次,相當於建立/銷毀程序 1000 次。在我機器上的測試結果是:

ubuntulinux:耗時 0.8 秒 windows7:耗時 79.8 秒 兩者開銷大約相差一百倍。

這意味著,在 windows 中,程序建立的開銷不容忽視。換句話說就是,windows 程式設計中不建議你建立程序,如果你的程式架構需要大量建立程序,那麼最好是切換到 linux 系統。

大量建立程序的典型例子有兩個,乙個是 gnu autotools 工具鏈,用於編譯很多開源**的,他們在 windows 下編譯速度會很慢,因此軟體開發人員最好是避免使用 windows。另乙個是伺服器,某些伺服器框架依靠大量建立程序來幹活,甚至是對每個使用者請求就建立乙個程序,這些伺服器在 windows 下執行的效率就會很差。這"可能"也是放眼全世界範圍,linux 伺服器遠遠多於 windows 伺服器的原因。

再次補充:如果你是寫伺服器端應用的,其實在現在的網路服務模型下,開桌子的開銷是可以忽略不計的,因為現在一般流行的是按照 cpu 核心數量開程序或者執行緒,開完之後在數量上一直保持,程序與執行緒內部使用協程或者非同步通訊來處理多個併發連線,因而開程序與開執行緒的開銷可以忽略了。

另外一種新的開銷被提上日程:核心切換開銷。 現代的體系,一般 cpu 會有多個核心,而多個核心可以同時執行多個不同的執行緒或者程序。當每個 cpu 核心執行乙個程序的時候,由於每個程序的資源都獨立,所以 cpu 核心之間切換的時候無需考慮上下文。 當每個 cpu 核心執行乙個執行緒的時候,由於每個執行緒需要共享資源,所以這些資源必須從 cpu 的乙個核心被複製到另外乙個核心,才能繼續運算,這占用了額外的開銷。換句話說,在 cpu 為多核的情況下,多執行緒在效能上不如多程序。

因而,當前面向多核的伺服器端程式設計中,需要習慣多程序而非多執行緒。

並行:多個cpu例項或多台機器同時執行一段處理邏輯,是真正的同時。

併發:通過cpu排程演算法,讓使用者看上去同時執行,實際上cpu操作層面不是真正的同時。

併發時如果操作了公用資源,可能產生執行緒安全問題。

執行緒安全:多個執行緒操作公用資源,有可能產生安全問題。

高併發:高併發指的是是一種系統執行過程中遇到的一種「短時間內遇到大量操作請求」的情況,主要發生在web系統集中大量訪問或者socket埠集中性收到大量請求(例如:12306的搶票情況;天貓雙十一活動)。該情況的發生會導致系統在這段時間內執行大量操作,例如對資源的請求,資料庫的操作等。如果高併發處理不好,不僅僅降低了使用者的體驗度(請求響應時間過長),同時可能導致系統宕機,嚴重的甚至導致oom異常,系統停止工作等。如果要想系統能夠適應高併發狀態,則需要從各個方面進行系統優化,包括,硬體、網路、系統架構、開發語言的選取、資料結構的運用、演算法優化、資料庫優化……。

多執行緒與高併發的聯絡

多執行緒只是在同/非同步角度上解決高併發問題的其中的乙個方法手段,是在同一時刻利用計算機閒置資源的一種方式。

多執行緒在高併發問題中的作用就是充分利用計算機資源,使計算機的資源在每一時刻都能達到最大的利用率,不至於浪費計算機資源使其閒置。

參考:汪同學

多程序和多執行緒

嵌入式linux中文站,關於多程序和多執行緒,教科書上最經典的一句話是 程序是資源分配的最小單位,執行緒是cpu排程的最小單位 這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有那麼簡單了,選的不好,會讓你深受其害。經常在網路上看到有xdjm問 多程序好還是多執行緒好?linux下...

多執行緒和多程序

首先說什麼是程序,載入記憶體中執行的程式,它就是乙個程序,而這個程式中執行的某個子任務就是乙個執行緒,程式包含了執行緒。程序對於執行緒是唯一的,而乙個程序可以有多個執行緒。程式執行的時候每隔一定時間在多執行緒之間執行,比如第乙個執行緒執行到0.01秒,馬上暫停跳到下乙個執行緒開始執行,又執行到0.0...

多程序和多執行緒

一 python 中多程序的使用 1 使用multiprocessing p process target function,args 引數,p.start 含義啟動程序 p.join 含義是等待子程序結束後在繼續執行 2 如果啟動大量的子程序,可以用程序池的方式批量建立子程序 from multi...