程序和執行緒

2022-08-16 11:00:15 字數 2852 閱讀 1015

單道批處理系統:多個程式序列使用cpu

多道程式設計技術:多個程式同時進入計算機的主儲存器並啟動,巨集觀上是並行的,多道程式處在執行中;微觀上是序列的,各道程式輪流交替使用cpu.空間上的復用,乙個cpu可以讓多個使用者使用

當乙個程式占用cpu時間過長,會斷開當前cpu使用權

先進先出演算法

最先進入的程序最先執行,一直到該程序結束,或阻塞時,釋放

缺點:若長時間先進入,後面無法使用

短程序優先

誰用時短,誰優先執行

缺點:長時間程序需要被控很長時間

時間片輪轉法

cpu執行時間1s中,載入n個程式,將1s等分未n個時間片.

多級反饋佇列

將執行優先分為多層級別

1:優先順序最高

2:優先順序第二

3:以此類推

指的是提交任務的方式

同步:傳送方發出資料後,等接收方回響應以後才發下乙個資料報的通訊方式

非同步:傳送方發出資料後,不等待接收方發回響應,接著傳送下個資料報的通訊方式

同步時阻塞模式,非同步是非阻塞模式.

注意:阻塞和非阻塞,同步和非同步不是同乙個概念!

父程序先於子程序結束,則子程序成為孤兒程序,子程序的父程序成為init程序,稱為init程序領養孤兒程序

子程序終止,父程序尚未對其id進行**,變成殭屍程序.

序列:排成一隊乙個個處理

好的程式都是串並行結合的

併發和並行的區別

並行,parallel

同時做某些事,可以互不干擾的同乙個時刻做多件事

併發,同時乙個時刻或某一段時間內,需要有多件事需要做

並行可以解決併發問題

比如:十輛車要同時經過單車道,修建4車道,就是通過並行解決併發的問題

併發的解決

食堂打飯模型

12點開飯,都湧向食堂,這就是併發.如果人特別多,這就時高併發.

1.佇列.緩衝區

排成佇列,就是乙個緩衝地帶,就是緩衝區

如若有女士,那女士隊就是乙個優先佇列

2.爭搶

有人搶這打飯,搶到了就相當於鎖定視窗,只是一種鎖機制

是一種解決高併發的解決方案,但是不好,因為有人長時間搶不到

如果爭搶,一定要有鎖機制,不然爭到了也會很快被別人搶掉

3.預處理

提前做80%的菜預備著

一種提前載入使用者需要的資料的思路,預處理思想,快取常用

4.並行

相當於開多個視窗讓人打飯,成本上公升

日常可以通過購買更多伺服器,或多開程序,程序實現並行處理,來解決併發問題

這些都是水平擴充套件思想

注:如果執行緒在單cpu上處理,就不是並行了

但是多數伺服器都是多cpu的,服務的不是往往是多機的,分布的,這都是並行處理,

5.提速

提高單個視窗的打飯速度,也是解決併發的方式.

提高單個cpu效能,或單個伺服器安裝更多的cpu

這是一種垂直擴充套件的思想

缺點:容易觸到技術天花板,而且**到後面會飆公升

6.訊息中介軟體

相當於緩衝,但是在系統外面(第三方)緩衝

在實現了執行緒的作業系統中,執行緒是作業系統能夠進行運算排程的最小單位.它被包含在程序之中,是程序中的實際運作單位.乙個程式的執行例項就是乙個程序.

程序(process)是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎.

程序執行緒的理解

現代作業系統提出程序的概念,每乙個程序都認為自己獨佔所有的計算機硬體資源,

程序就是獨立的王國,程序間不可以隨便的共享資料

執行緒就是省份,同乙個程序內的執行緒可以共享程序的資源,每乙個執行緒擁有自己獨立的堆疊.

每個執行緒都有乙個獨立的執行緒id,用以區分不同的執行緒

執行態該時刻,該執行緒正在占用cpu

就緒態可隨時轉換為執行態,因為其他執行緒正在執行而暫停,該執行緒不占用cpu

阻塞態除非某些外部事情發生,否則執行緒不能執行.等條件滿足時,執行

狀態含義

就緒(ready)

執行緒能夠執行,但在等待被排程.可能執行緒剛剛建立啟動,或剛剛從阻塞中恢復,或被其他執行緒搶占

執行(running)

執行緒正在執行

阻塞(blocked)

執行緒等待外部事件發生而無法執行,如i/o操作

終止(terminated)

執行緒完成,或退出,或被取消

1.cpu密集型

cpython中使用了gil.多執行緒的時候鎖相互競爭,且多核優勢不能發揮,python多程序效率更高

2.io密集型

適合使用多執行緒,可以減少多程序間io的序列化開銷.且在io等待的時候,切換到其他執行緒繼續執行,效率大大的好.

也叫快取保定問題,是乙個經典的,多程序同步問題.

生產者往緩衝取寫入資料,消費者從緩衝區拿去資料,兩者同過緩衝區來進行通訊,這樣的話生產者不必擔心要等待消費者使用完資料,消費者也不用擔心不夠時間處理所有資料

協程是單執行緒下的併發,又稱微執行緒,纖程,英文名coroutine.

協程是一種使用者態的輕量執行緒,即協程是由使用者程式自己控制排程.

注意:python執行緒是核心級別,即由作業系統控制排程,所以單執行緒遇到io或者執行時間過長就會被迫交出cpu執行許可權,切換其他執行緒執行.

單執行緒內開啟協程,一旦遇到io,就會從應用程式級別(非作業系統)控制切換,以此來提公升效率.

優點:協程的切換開銷更小,屬於程式級別的切換,作業系統感覺不到,所以更加輕量級

單執行緒內就可以實現併發的效果,最大限度的利用cpu

缺點:協程的本質是單執行緒,無法利用多核.所以可以是乙個程式開啟開啟多個程序,每個程序內開啟多個執行緒,每個執行緒開啟協程.

協程是單個執行緒,所以一旦出現阻塞,就會阻塞整個執行緒.

使用gevent模組

執行緒和程序

標準的定義是 程序是執行緒的容器,乙個程序可於乙個或者多個執行緒,它是系統分配資源的基本單位 同乙個程序下,執行緒共享位址空降 已經開啟的檔案 訊號處理函式 報警訊號和其他,執行緒自己只保留程式計數器和棧。但是很遺憾的,這個只是教科書上的定義,實際情況是每個作業系統實現的作業系統特性不同,實現的方法...

程序和執行緒

乙個程序就是當前正在執行的乙個程式,包括程式的暫存器 程式計數器和變數的當前值。不同的程序擁有不同的位址空間。而執行緒可以理解為是程序中的控制流。同乙個程序內也就是說在同乙個位址空間內可以有多個控制流。也就是可以有多個線 程,他們共享位址空間。我們通常將程序視為是資源的集合,程序中有程式的正文 資料...

執行緒和程序

對於求職者,在面試的時候大多都會被問到 你對多執行緒了解麼?給我講講執行緒和程序的區別吧。在unix中,乙個程序可以理解為執行緒 位址空間 檔案描述符 資料,道破現實,其實就相當於老闆和員工,老闆就是程序,員工就是執行緒。老闆需要僱傭若干員工 執行緒 還要有辦公樓 位址空間 還要有若干的辦公裝置 檔...