在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 線程與進程
二、Enum 的源碼
前言
一、Python 模塊簡介
一、List(列表)
五、匿名函數(shù)
三、什么是元類
二、循環(huán)語句
二、模塊的使用
三、第一個 Python 程序
線程與進程
Python
三、條件語句和循環(huán)語句綜合實例
四、對象的描述器
三、類的屬性
一、迭代
五、迭代器和生成器綜合例子
六、運算符相關(guān)的魔術(shù)方法
一、枚舉類的使用
前言
一、簡明概述
二、Python 的基本數(shù)據(jù)類型
多線程編程
五、作用域
四、包
四、枚舉的比較
四、Python 中的變量
六、類的多態(tài)
一、Python 中類也是對象
一、Python 的 Magic Method
前言
四、生成器
一、面向?qū)ο蟮母拍?/span>
五、類的繼承
二、類
二、使用 <code>type()</code> 動態(tài)創(chuàng)建類
進程
二、set
三、主模塊和非主模塊
一、字典(Dictionary)
前言
前言
前言
前言
四、集成開發(fā)環(huán)境(IDE): PyCharm
前言
四、函數(shù)的參數(shù)
三、lsit 生成式(列表生成式)
四、自定義元類
四、類的方法
二、函數(shù)傳值問題
二、注釋
一、條件語句
一、Python 語法的簡要說明
三、函數(shù)返回值
三、基本數(shù)據(jù)類型轉(zhuǎn)換
三、屬性的訪問控制
二、Python 的安裝
前言
三、命名規(guī)范
一、Python 自定義函數(shù)的基本步驟
三、自定義類型的枚舉
五、自定義容器(Container)
二、Python 迭代器
前言
二、tuple(元組)
一、Python 簡介
前言
前言
前言
二、構(gòu)造(<code>__new__</code>)和初始化(<code>__init__</code>)
前言

線程與進程

線程與進程是操作系統(tǒng)里面的術(shù)語,簡單來講,每一個應(yīng)用程序都有一個自己的進程。

操作系統(tǒng)會為這些進程分配一些執(zhí)行資源,例如內(nèi)存空間等。在進程中,又可以創(chuàng)建一些線程,他們共享這些內(nèi)存空間,并由操作系統(tǒng)調(diào)用,以便并行計算。

我們都知道現(xiàn)代操作系統(tǒng)比如 Mac OS X,UNIX,Linux,Windows 等可以同時運行多個任務(wù)。打個比方,你一邊在用瀏覽器上網(wǎng),一邊在聽敲代碼,一邊用 Markdown 寫博客,這就是多任務(wù),至少同時有 3 個任務(wù)正在運行。當然還有很多任務(wù)悄悄地在后臺同時運行著,只是桌面上沒有顯示而已。對于操作系統(tǒng)來說,一個任務(wù)就是一個進程(Process),比如打開一個瀏覽器就是啟動一個瀏覽器進程,打開 PyCharm 就是一個啟動了一個 PtCharm 進程,打開 Markdown 就是啟動了一個 Md 的進程。

雖然現(xiàn)在多核 CPU 已經(jīng)非常普及了??墒怯捎?CPU 執(zhí)行代碼都是順序執(zhí)行的,這時候我們就會有疑問,單核 CPU 是怎么執(zhí)行多任務(wù)的呢?

其實就是操作系統(tǒng)輪流讓各個任務(wù)交替執(zhí)行,任務(wù) 1 執(zhí)行 0.01 秒,切換到任務(wù) 2 ,任務(wù) 2 執(zhí)行 0.01 秒,再切換到任務(wù) 3 ,執(zhí)行 0.01秒……這樣反復(fù)執(zhí)行下去。表面上看,每個任務(wù)都是交替執(zhí)行的,但是,由于 CPU的執(zhí)行速度實在是太快了,我們?nèi)庋酆透杏X上沒法識別出來,就像所有任務(wù)都在同時執(zhí)行一樣。

真正的并行執(zhí)行多任務(wù)只能在多核 CPU 上實現(xiàn),但是,由于任務(wù)數(shù)量遠遠多于 CPU 的核心數(shù)量,所以,操作系統(tǒng)也會自動把很多任務(wù)輪流調(diào)度到每個核心上執(zhí)行。

有些進程不僅僅只是干一件事的啊,比如瀏覽器,我們可以播放時視頻,播放音頻,看文章,編輯文章等等,其實這些都是在瀏覽器進程中的子任務(wù)。在一個進程內(nèi)部,要同時干多件事,就需要同時運行多個“子任務(wù)”,我們把進程內(nèi)的這些“子任務(wù)”稱為線程(Thread)。

由于每個進程至少要干一件事,所以,一個進程至少有一個線程。當然,一個進程也可以有多個線程,多個線程可以同時執(zhí)行,多線程的執(zhí)行方式和多進程是一樣的,也是由操作系統(tǒng)在多個線程之間快速切換,讓每個線程都短暫地交替運行,看起來就像同時執(zhí)行一樣。

那么在 Python 中我們要同時執(zhí)行多個任務(wù)怎么辦?

有兩種解決方案:

一種是啟動多個進程,每個進程雖然只有一個線程,但多個進程可以一塊執(zhí)行多個任務(wù)。

還有一種方法是啟動一個進程,在一個進程內(nèi)啟動多個線程,這樣,多個線程也可以一塊執(zhí)行多個任務(wù)。

當然還有第三種方法,就是啟動多個進程,每個進程再啟動多個線程,這樣同時執(zhí)行的任務(wù)就更多了,當然這種模型更復(fù)雜,實際很少采用。

總結(jié)一下就是,多任務(wù)的實現(xiàn)有3種方式:

  • 多進程模式;
  • 多線程模式;
  • 多進程+多線程模式。

同時執(zhí)行多個任務(wù)通常各個任務(wù)之間并不是沒有關(guān)聯(lián)的,而是需要相互通信和協(xié)調(diào),有時,任務(wù) 1 必須暫停等待任務(wù) 2 完成后才能繼續(xù)執(zhí)行,有時,任務(wù) 3 和任務(wù) 4 又不能同時執(zhí)行,所以,多進程和多線程的程序的復(fù)雜度要遠遠高于我們前面寫的單進程單線程的程序。

因為復(fù)雜度高,調(diào)試困難,所以,不是迫不得已,我們也不想編寫多任務(wù)。但是,有很多時候,沒有多任務(wù)還真不行。想想在電腦上看電影,就必須由一個線程播放視頻,另一個線程播放音頻,否則,單線程實現(xiàn)的話就只能先把視頻播放完再播放音頻,或者先把音頻播放完再播放視頻,這顯然是不行的。