整理這番外篇的緣由是但願可以讓爬蟲的朋友更加理解這塊內容,由於爬蟲爬取數據可能很簡單,可是如何高效持久的爬,利用進程,線程,以及異步IO,其實不少人和我同樣,故整理此係列番外篇linux
程序並不能單獨和運行只有將程序裝載到內存中,系統爲他分配資源才能運行,而這種執行的程序就稱之爲進程。程序和進程的區別在於:程序是指令的集合,它是進程的靜態描述文本;進程是程序的一次執行活動,屬於動態概念。shell
例如咱們寫一個hello程序,當這個程序再操做系統上運行的時候,操做系統會給咱們一種假象,好像系統上就這一個程序在運行。程序看上去是獨佔的使用處理器,主存,和IO設備,處理器看上去就像在不間斷的執行程序中的指令,即該程序的代碼和數據是操做系統內存中惟一的對象。這其實就是經過進程實現的。編程
進程的概念服務器
進程是操做系統對一個正在運行的程序的一種抽象。即進程是處理器,主存,IO設備的抽象
操做系統能夠同時運行多個進程,而每一個進程都好像在獨佔的使用硬件網絡
併發運行多線程
併發運行:一個進程的指令和另一個進程的指令是交錯執行的。併發
上下文切換
CPU看上去像是在併發的執行多個進程,這是經過處理器在進程之間切換來實現的,操做系統實現這種交錯執行的機制稱爲上下文切換異步
操做系統保持跟蹤進程運行所需的全部狀態信息。這種狀態,就是上下文。
在任何一個時刻,操做系統都只能執行一個進程代碼,當操做系統決定把控制權從當前進程轉移到某個新進程時,就會進行上下文切換,即保存當前進程的上下文,恢復新進程的上下文,而後將控制權傳遞到新進程,新進程就會從它上次中止的地方開始。操作系統
咱們還經過hello這個程序進行理解這個過程(環境爲linux):命令行
shell進程和hello進程。
線程的概念
線程是操做系統可以進行運算調度的最小單位,它被包含在進程中,是進程中的實際運做單位
一個進程實際上能夠由多個線程的執行單元組成。每一個線程都運行在進程的上下文中,並共享一樣的代碼和全局數據。
因爲在實際的網絡服務器中對並行的需求,線程成爲愈來愈重要的編程模型,由於多線程之間比多進程之間更容易共享數據,同時線程通常比進程更高效
併發指的是同時具備多個活動的系統
並行值得是用併發來使一個系統運行的更快。並行能夠在操做系統的多個抽象層次進行運用