国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

進程和線程、協(xié)程的區(qū)別

Original 2016-11-08 09:53:27 591
abstract:現(xiàn)在多進程多線程已經(jīng)是老生常談了,協(xié)程也在最近幾年流行起來。python中也有協(xié)程庫,tornado中也用了gevent封裝好的協(xié)程。本文主要介紹進程、線程和協(xié)程三者之間的區(qū)別。一、概念  1、進程進程是具有一定獨立功能的程序關于某個數(shù)據(jù)集合上的一次運行活動,進程是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位。每個進程都有自己的獨立內(nèi)存空間,不同進程通過進程間通信來通信。由于進程比較重量,占據(jù)獨立的內(nèi)存,

現(xiàn)在多進程多線程已經(jīng)是老生常談了,協(xié)程也在最近幾年流行起來。python中也有協(xié)程庫,tornado中也用了gevent封裝好的協(xié)程。本文主要介紹進程、線程和協(xié)程三者之間的區(qū)別。

一、概念

  1、進程

進程是具有一定獨立功能的程序關于某個數(shù)據(jù)集合上的一次運行活動,進程是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位。每個進程都有自己的獨立內(nèi)存空間,不同進程通過進程間通信來通信。由于進程比較重量,占據(jù)獨立的內(nèi)存,所以上下文進程間的切換開銷(棧、寄存器、虛擬內(nèi)存、文件句柄等)比較大,但相對比較穩(wěn)定安全。

  2、線程

線程是進程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。線程間通信主要通過共享內(nèi)存,上下文切換很快,資源開銷較少,但相比進程不夠穩(wěn)定容易丟失數(shù)據(jù)。

  3、協(xié)程

協(xié)程是一種用戶態(tài)的輕量級線程,協(xié)程的調(diào)度完全由用戶控制。協(xié)程擁有自己的寄存器上下文和棧。協(xié)程調(diào)度切換時,將寄存器上下文和棧保存到其他地方,在切回來的時候,恢復先前保存的寄存器上下文和棧,直接操作棧則基本沒有內(nèi)核切換的開銷,可以不加鎖的訪問全局變量,所以上下文的切換非??臁?/p>

二、區(qū)別:

  1、進程多與線程比較

線程是指進程內(nèi)的一個執(zhí)行單元,也是進程內(nèi)的可調(diào)度實體。線程與進程的區(qū)別:
1) 地址空間:線程是進程內(nèi)的一個執(zhí)行單元,進程內(nèi)至少有一個線程,它們共享進程的地址空間,而進程有自己獨立的地址空間
2) 資源擁有:進程是資源分配和擁有的單位,同一個進程內(nèi)的線程共享進程的資源
3) 線程是處理器調(diào)度的基本單位,但進程不是
4) 二者均可并發(fā)執(zhí)行

5) 每個獨立的線程有一個程序運行的入口、順序執(zhí)行序列和程序的出口,但是線程不能夠獨立執(zhí)行,必須依存在應用程序中,由應用程序提供多個線程執(zhí)行控制

  2、協(xié)程多與線程進行比較

1) 一個線程可以多個協(xié)程,一個進程也可以單獨擁有多個協(xié)程,這樣python中則能使用多核CPU。

2) 線程進程都是同步機制,而協(xié)程則是異步

3) 協(xié)程能保留上一次調(diào)用時的狀態(tài),每次過程重入時,就相當于進入上一次調(diào)用的狀態(tài)


Release Notes

Popular Entries