整理這番外篇的原因是希望能夠讓爬蟲的朋友更加理解這塊內容,因為爬蟲爬取資料可能很簡單,但是如何高效持久的爬,利用程序,執行緒,以及非同步io,其實很多人和我一樣,故整理此系列番外篇
程式並不能單獨和執行只有將程式裝載到記憶體中,系統為他分配資源才能執行,而這種執行的程式就稱之為程序。程式和程序的區別在於:程式是指令的集合,它是程序的靜態描述文字;程序是程式的一次執行活動,屬於動態概念。
例如我們寫乙個hello程式,當這個程式再作業系統上執行的時候,作業系統會給我們一種假象,好像系統上就這乙個程式在執行。程式看上去是獨佔的使用處理器,主存,和io裝置,處理器看上去就像在不間斷的執行程式中的指令,即該程式的**和資料是作業系統記憶體中唯一的物件。這其實就是通過程序實現的。
程序的概念
程序是作業系統對乙個正在執行的程式的一種抽象。即程序是處理器,主存,io裝置的抽象
作業系統可以同時執行多個程序,而每個程序都好像在獨佔的使用硬體
併發執行
併發執行:乙個程序的指令和另外乙個程序的指令是交錯執行的。
上下文切換
cpu看上去像是在併發的執行多個程序,這是通過處理器在程序之間切換來實現的,作業系統實現這種交錯執行的機制稱為上下文切換
作業系統保持跟蹤程序執行所需的所有狀態資訊。這種狀態,就是上下文。
在任何乙個時刻,作業系統都只能執行乙個程序**,當作業系統決定把控制權從當前程序轉移到某個新程序時,就會進行上下文切換,即儲存當前程序的上下文,恢復新程序的上下文,然後將控制權傳遞到新程序,新程序就會從它上次停止的地方開始。
我們還通過hello這個程式進行理解這個過程(環境為linux):
shell程序和hello程序。
開始,shell程序在執行,等待命令列的輸入
執行hello程式,shell通過系統呼叫來執行我們的請求,這個時候系統呼叫會講控制權傳遞給作業系統。作業系統儲存shell程序的上下文,建立乙個hello程序以及其上下文並將控制權給新的hello程序。
hello程序終止後,作業系統恢復shell程序的上下文,並將控制權傳回給shell程序
shell程序繼續等待下個命令的輸入
執行緒的概念
執行緒是作業系統能夠進行運算排程的最小單位,它被包含在程序中,是程序中的實際運作單位
乙個程序實際上可以由多個執行緒的執行單元組成。每個執行緒都執行在程序的上下文中,並共享同樣的**和全域性資料。
由於在實際的網路伺服器中對並行的需求,執行緒成為越來越重要的程式設計模型,因為多執行緒之間比多程序之間更容易共享資料,同時執行緒一般比程序更高效
併發指的是同時具有多個活動的系統
並行值得是用併發來使乙個系統執行的更快。並行可以在作業系統的多個抽象層次進行運用
一 程序執行緒
1.程序的3種狀態 執行 阻塞 就緒 其中不存在的狀態轉換 阻塞 執行 就緒 阻塞 2.作業系統用於維護程序記錄的結構 程序表或程序控制權 pcb 3.程式使用cpu的3種方式 cpu導向 io導向 平衡型程式 4.程序排程目標 極小化平均時間 級大化系統吞吐量 保持系統各個功能部分均處於繁忙狀態和...
關於多執行緒的那點事之番外篇 Python
哈嘍各位小夥伴,很快啊,小澤馬上就又更新了,速度簡直不要太快!上回咱們不是說了怎麼開多執行緒嘛,那同樣的,還有乙個問題 公司已經下班了,但是員工還在努力工作。我們先來建立兩個員工 匯入執行緒模組 import threading 匯入休眠模組 from time import sleep 員工a d...
程序 執行緒 協程(一 程序環境)
本來這個程序 執行緒 協程是在9月份看完了,可惜9月份墮落了很就,就推到了11月份,為什麼不10月份呢?因為國慶要回家,總不能拿這麼厚的書回家把,所以就選了一本nginx,比較薄的書,接下來一段時間內,我們專供程序 執行緒 協程 我們從開始學c語言開始就一直寫main函式,我們也知道c程式總是從ma...