python之爬蟲--番外篇(一)進程,線程的初步瞭解

整理這番外篇的緣由是但願可以讓爬蟲的朋友更加理解這塊內容,由於爬蟲爬取數據可能很簡單,可是如何高效持久的爬,利用進程,線程,以及異步IO,其實不少人和我同樣,故整理此係列番外篇linux

1、進程

程序並不能單獨和運行只有將程序裝載到內存中,系統爲他分配資源才能運行,而這種執行的程序就稱之爲進程。程序和進程的區別在於:程序是指令的集合,它是進程的靜態描述文本;進程是程序的一次執行活動,屬於動態概念。shell

例如咱們寫一個hello程序,當這個程序再操做系統上運行的時候,操做系統會給咱們一種假象,好像系統上就這一個程序在運行。程序看上去是獨佔的使用處理器,主存,和IO設備,處理器看上去就像在不間斷的執行程序中的指令,即該程序的代碼和數據是操做系統內存中惟一的對象。這其實就是經過進程實現的。編程

進程的概念服務器

進程是操做系統對一個正在運行的程序的一種抽象。即進程是處理器,主存,IO設備的抽象
操做系統能夠同時運行多個進程,而每一個進程都好像在獨佔的使用硬件網絡

併發運行多線程

併發運行:一個進程的指令和另一個進程的指令是交錯執行的。併發

上下文切換
CPU看上去像是在併發的執行多個進程,這是經過處理器在進程之間切換來實現的,操做系統實現這種交錯執行的機制稱爲上下文切換異步

操做系統保持跟蹤進程運行所需的全部狀態信息。這種狀態,就是上下文。
在任何一個時刻,操做系統都只能執行一個進程代碼,當操做系統決定把控制權從當前進程轉移到某個新進程時,就會進行上下文切換,即保存當前進程的上下文,恢復新進程的上下文,而後將控制權傳遞到新進程,新進程就會從它上次中止的地方開始。操作系統

咱們還經過hello這個程序進行理解這個過程(環境爲linux):命令行

shell進程和hello進程。

  1. 開始,shell進程在運行,等待命令行的輸入
  2. 執行hello程序,shell經過系統調用來執行咱們的請求,這個時候系統調用會講控制權傳遞給操做系統。操做系統保存shell進程的上下文,建立一個hello進程以及其上下文並將控制權給新的hello進程。
  3. hello進程終止後,操做系統恢復shell進程的上下文,並將控制權傳回給shell進程
  4. shell進程繼續等待下個命令的輸入

2、線程

線程的概念

線程是操做系統可以進行運算調度的最小單位,它被包含在進程中,是進程中的實際運做單位

一個進程實際上能夠由多個線程的執行單元組成。每一個線程都運行在進程的上下文中,並共享一樣的代碼和全局數據。

因爲在實際的網絡服務器中對並行的需求,線程成爲愈來愈重要的編程模型,由於多線程之間比多進程之間更容易共享數據,同時線程通常比進程更高效

3、併發和並行的概念

併發指的是同時具備多個活動的系統

並行值得是用併發來使一個系統運行的更快。並行能夠在操做系統的多個抽象層次進行運用

相關文章
相關標籤/搜索