CPython解釋器的進程和線程概述

必備的理論基礎:python

#一 操做系統的做用:
    1:隱藏醜陋複雜的硬件接口,提供良好的抽象接口
    2:管理、調度進程,而且將多個進程對硬件的競爭變得有序

#二 多道技術:
    1.產生背景:針對單核,實現併發
    ps:
    如今的主機通常是多核,那麼每一個核都會利用多道技術
    有4個cpu,運行於cpu1的某個程序遇到io阻塞,會等到io結束再從新調度,會被調度到4個
    cpu中的任意一個,具體由操做系統調度算法決定。
    
    2.空間上的複用:如內存中同時有多道程序
    3.時間上的複用:複用一個cpu的時間片
       強調:遇到io切,佔用cpu時間過長也切,核心在於切以前將進程的狀態保存下來,這樣
            才能保證下次切換回來時,能基於上次切走的位置繼續運行

 

一 什麼是進程

    進程:正在進行的一個過程或者說一個任務。而負責執行任務則是cpu。程序員

    舉例(單核+多道,實現多個進程的併發執行):算法

    egon在一個時間段內有不少任務要作:python備課的任務,寫書的任務,交女友的任務,王者榮耀上分的任務,  多線程

    但egon同一時刻只能作一個任務(cpu同一時間只能幹一個活),如何才能玩出多個任務併發執行的效果?併發

    egon備一會課,再去跟李傑的女友聊聊天,再去打一會王者榮耀....這就保證了每一個任務都在進行中.spa

 

程序僅僅只是一堆代碼而已,而進程指的是程序的運行過程。操作系統

舉例:線程

想象一位有一手好廚藝的計算機科學家egon正在爲他的女兒元昊烘製生日蛋糕。設計

他有作生日蛋糕的食譜,code

廚房裏有所需的原料:麪粉、雞蛋、韭菜,蒜泥等。

在這個比喻中:

    作蛋糕的食譜就是程序(即用適當形式描述的算法)

    計算機科學家就是處理器(cpu)

    而作蛋糕的各類原料就是輸入數據

   進程就是廚師閱讀食譜、取來各類原料以及烘製蛋糕等一系列動做的總和

 

如今假設計算機科學家egon的兒子alex哭着跑了進來,說:XXXXXXXXXXXXXX

科學家egon想了想,處理兒子alex蟄傷的任務比給女兒元昊作蛋糕的任務更重要,因而

計算機科學家就記錄下他照着食譜作到哪兒了(保存進程的當前狀態),而後拿出一本急救手冊,按照其中的指示處理蟄傷。這裏,咱們看處處理機從一個進程(作蛋糕)切換到另外一個高優先級的進程(實施醫療救治),每一個進程擁有各自的程序(食譜和急救手冊)。當蜜蜂蟄傷處理完以後,這位計算機科學家又回來作蛋糕,從他
離開時的那一步繼續作下去。

須要強調的是:同一個程序執行兩次,那也是兩個進程

二  什麼是線程  

  在傳統操做系統中,每一個進程有一個地址空間,並且默認就有一個控制線程

  線程顧名思義,就是一條流水線工做的過程,一條流水線必須屬於一個車間,一個車間的工做過程是一個進程

      車間負責把資源整合到一塊兒,是一個資源單位,而一個車間內至少有一個流水線

      流水線的工做須要電源,電源就至關於cpu

  因此,進程只是用來把資源集中到一塊兒(進程只是一個資源單位,或者說資源集合),而線程纔是cpu上的執行單位。

 

  多線程(即多個控制線程)的概念是,在一個進程中存在多個控制線程,多個控制線程共享該進程的地址空間,至關於一個車間內有多條流水線,都共用一個車間的資源。

      例如,北京地鐵與上海地鐵是不一樣的進程,而北京地鐵裏的13號線是一個線程,北京地鐵全部的線路共享北京地鐵全部的資源,好比全部的乘客能夠被全部線路拉。

 

線程的建立開銷小

建立進程的開銷要遠大於線程?

若是咱們的軟件是一個工廠,該工廠有多條流水線,流水線工做須要電源,電源只有一個即cpu(單核cpu)

一個車間就是一個進程,一個車間至少一條流水線(一個進程至少一個線程)

建立一個進程,就是建立一個車間(申請空間,在該空間內建至少一條流水線)

而建線程,就只是在一個車間內造一條流水線,無需申請空間,因此建立開銷小

 

進程之間是競爭關係,線程之間是協做關係?

車間直接是競爭/搶電源的關係,競爭(不一樣的進程直接是競爭關係,是不一樣的程序員寫的程序運行的,迅雷搶佔其餘進程的網速,360把其餘進程當作病毒乾死)一個車間的不一樣流水線式協同工做的關係(同一個進程的線程之間是合做關係,是同一個程序寫的程序內開啓動,迅雷內的線程是合做關係,不會本身幹本身)

相關文章
相關標籤/搜索