亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Python Process/Thread 概念整理

Youngs / 1366人閱讀

摘要:每個(gè)在同一時(shí)間只能執(zhí)行一個(gè)線程在單核下的多線程其實(shí)都只是并發(fā),不是并行,并發(fā)和并行從宏觀上來講都是同時(shí)處理多路請求的概念。在多線程下,每個(gè)線程的執(zhí)行方式獲取執(zhí)行代碼直到或者是虛擬機(jī)將其掛起。拿不到通行證的線程,就不允許進(jìn)入執(zhí)行。

進(jìn)程與線程 并發(fā)與并行

進(jìn)程與線程

  首先要理解的是,我們的軟件都是運(yùn)行在操作系統(tǒng)之上,操作系統(tǒng)再控制硬件,比如 處理器、內(nèi)存、IO設(shè)備等。操作系統(tǒng)為了向上層應(yīng)用程序提供 簡單一致 的機(jī)制來控制復(fù)雜而又大相徑庭的低級硬件設(shè)備 抽象出 進(jìn)程 的概念。進(jìn)程是比較重量級的操作系統(tǒng)資源,它擁有獨(dú)立的內(nèi)存空間,而在 現(xiàn)代操作系統(tǒng)中為了實(shí)現(xiàn)在一個(gè)進(jìn)程中執(zhí)行多種任務(wù),因此實(shí)現(xiàn)了 線程。 一個(gè) 進(jìn)程 可以由多個(gè) 線程組成,每個(gè) 線程 是一個(gè)執(zhí)行單元,線程 運(yùn)行在 進(jìn)程 的上下文環(huán)境中,并共享 同樣的代碼和全局?jǐn)?shù)據(jù)。
我們經(jīng)常說的 多線程 就是指的 在一個(gè)進(jìn)程內(nèi)有多個(gè)線程在執(zhí)行任務(wù),在實(shí)際開發(fā)中,開發(fā)者寫的代碼其實(shí)都是在線程的環(huán)境中執(zhí)行的,而在多線程開發(fā)中,經(jīng)常涉及到 一些 線程安全的問題,簡單的看下進(jìn)程 和 線程占有的資源情況

  簡單的理解 線程安全 的問題:多線程程序在運(yùn)行時(shí)候,可能會(huì)同時(shí)對一個(gè)變量進(jìn)行操作,操作的時(shí)候,一般線程會(huì)將這個(gè)變量的值 copy 到 自身線程的巨變變量中,再進(jìn)行操作,此時(shí)可能就會(huì)發(fā)生 讀寫時(shí)數(shù)據(jù)不同步(數(shù)據(jù)已經(jīng)被其他線程操作了,自身線程操作時(shí)讀取的值已經(jīng)是舊的了)的問題。

并發(fā)與并行  

  進(jìn)程 可以申請和擁有系統(tǒng)資源,進(jìn)程是一個(gè)實(shí)體,程序的執(zhí)行依賴于、主存(存放程序和程序處理的數(shù)據(jù)) CPU(執(zhí)行代碼) 等…(比如IO),而進(jìn)程相當(dāng)于一個(gè)環(huán)境,是控制這些操作系統(tǒng)硬件的實(shí)體,在操作系統(tǒng)中,一個(gè)系統(tǒng)上可以運(yùn)行多個(gè)進(jìn)程,運(yùn)行的進(jìn)程一般是多于運(yùn)行它們的CPU 個(gè)數(shù)的, 所以通常一個(gè)CPU 可能需要運(yùn)行多個(gè)進(jìn)程任務(wù),一個(gè)CPU 就像是一個(gè)工人,他一個(gè)時(shí)間節(jié)點(diǎn)只能做一件事情,所以 CPU 得頻繁的在多個(gè) 進(jìn)程中切換(上下文切換),這種現(xiàn)象就是并發(fā)執(zhí)行。
  并行執(zhí)行的概念是指 多個(gè)程序在多個(gè)CPU上同時(shí)執(zhí)行,“并行” 概念是 并發(fā) 概念的一個(gè)子集,我們可以編寫一個(gè) 并行程序,但是如果沒有足夠的 CPU 來執(zhí)行,那么最終就變成了并發(fā)執(zhí)行

并發(fā):同時(shí)有很多任務(wù)需要做,可以串行執(zhí)行也可以并行執(zhí)行
并行:可以同時(shí)(嚴(yán)格意義上的)做多個(gè)任務(wù)


作者:zhuoxiuwu
來源:CSDN
原文:https://blog.csdn.net/zhuoxiu...
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!

----------------------------------------
----------------------------------------

有句行話: “python下多線程是雞肋,推薦使用多進(jìn)程!”
為什么呢?

看兩點(diǎn):
1、GIL是什么?GIL的全稱是Global Interpreter Lock(全局解釋器鎖),來源是python設(shè)計(jì)之初的考慮,為了數(shù)據(jù)安全所做的決定。

2、每個(gè)CPU在同一時(shí)間只能執(zhí)行一個(gè)線程(在單核CPU下的多線程其實(shí)都只是并發(fā),不是并行,并發(fā)和并行從宏觀上來講都是同時(shí)處理多路請求的概念。但并發(fā)和并行又有區(qū)別,并行是指兩個(gè)或者多個(gè)事件在同一時(shí)刻發(fā)生;而并發(fā)是指兩個(gè)或多個(gè)事件在同一時(shí)間間隔內(nèi)發(fā)生。)

在Python多線程下,每個(gè)線程的執(zhí)行方式:
1.獲取GIL
2.執(zhí)行代碼直到sleep或者是python虛擬機(jī)將其掛起。
3.釋放GIL

可見,某個(gè)線程想要執(zhí)行,必須先拿到GIL,我們可以把GIL看作是“通行證”,并且在一個(gè)python進(jìn)程中,GIL只有一個(gè)。拿不到通行證的線程,就不允許進(jìn)入CPU執(zhí)行。
所以python里,無論如何都沒法GIL導(dǎo)致的同一時(shí)間只能執(zhí)行一個(gè)線程的問題,所以效率依然不盡如人意。

又有名言: “python下想要充分利用多核CPU,就用多進(jìn)程”。
這又是為什么呢?

原因是:每個(gè)進(jìn)程有各自獨(dú)立的GIL,互不干擾,這樣就可以真正意義上的并行執(zhí)行,所以在python中,多進(jìn)程的執(zhí)行效率優(yōu)于多線程(僅僅針對多核CPU而言)。

作者:知我莫言
來源:知乎
原文:https://zhuanlan.zhihu.com/p/...

自己總結(jié)一下:

一個(gè)process只有一個(gè)GIL
一個(gè)process可以理解成 a bundle of threads

一個(gè) CPU core 在某一時(shí)刻,只能有一個(gè)thread。
因此一個(gè) CPU core 在某一時(shí)刻,自然也只能有一個(gè)Process。

但是不同的cpu core可以同時(shí)有同一個(gè)Process
假設(shè)有 4核CPU 和 4個(gè)process
CPU0,CPU1,CPU2, CPU3 可以同時(shí)處理 process0

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/44029.html

相關(guān)文章

  • AsyncTask異步任務(wù)類

    摘要:異步任務(wù)的構(gòu)造方法主要用于初始化線程池先關(guān)的成員變量創(chuàng)建一個(gè)新的異步任務(wù)。所以,我們是必須確保在銷毀活動(dòng)之前取消任務(wù)。 目錄介紹 01.先看下AsyncTask用法 02.AsyncTask源碼深入分析 2.1 構(gòu)造方法源碼分析 2.2 看execute(Params... params)方法 2.3 mWorker和mFuture的創(chuàng)建過程 03.異步機(jī)制的實(shí)現(xiàn) 04.不同...

    dongxiawu 評論0 收藏0

發(fā)表評論

0條評論

Youngs

|高級講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<