日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

进程、线程和协程的理解

發(fā)布時間:2024/9/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 进程、线程和协程的理解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)自:?http://blog.csdn.net/guyan0319 https://blog.csdn.net/guyan0319/article/details/79411626

一、進程?
進程(Process)是計算機中的程序關(guān)于某數(shù)據(jù)集合上的一次運行活動,是系統(tǒng)進行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。在早期面向進程設(shè)計的計算機結(jié)構(gòu)中,進程是程序的基本執(zhí)行實體;在當代面向線程設(shè)計的計算機結(jié)構(gòu)中,進程是線程的容器。程序是指令、數(shù)據(jù)及其組織形式的描述,進程是程序的實體。

組成

進程是一個實體。每一個進程都有它自己的地址空間,一般情況下,包括文本區(qū)域(text region)、數(shù)據(jù)區(qū)域(data region)和堆棧(stack region)。文本區(qū)域存儲處理器執(zhí)行的代碼;數(shù)據(jù)區(qū)域存儲變量和進程執(zhí)行期間使用的動態(tài)分配的內(nèi)存;堆棧區(qū)域存儲著活動過程調(diào)用的指令和本地變量。

特征?
動態(tài)性:進程的實質(zhì)是程序在多道程序系統(tǒng)中的一次執(zhí)行過程,進程是動態(tài)產(chǎn)生,動態(tài)消亡的。?
并發(fā)性:任何進程都可以同其他進程一起并發(fā)執(zhí)行?
獨立性:進程是一個能獨立運行的基本單位,同時也是系統(tǒng)分配資源和調(diào)度的獨立單位;?
異步性:由于進程間的相互制約,使進程具有執(zhí)行的間斷性,即進程按各自獨立的、不可預(yù)知的速度向前推進?
結(jié)構(gòu)特征:進程由程序、數(shù)據(jù)和進程控制塊三部分組成。?
多個不同的進程可以包含相同的程序:一個程序在不同的數(shù)據(jù)集里就構(gòu)成不同的進程,能得到不同的結(jié)果;但是執(zhí)行過程中,程序不能發(fā)生改變。

狀態(tài)?

二、線程

線程,有時被稱為輕量級進程(Lightweight Process,LWP),是程序執(zhí)行流的最小單元。一個標準的線程由線程ID,當前指令指針(PC),寄存器集合和堆棧組成。另外,線程是進程中的一個實體,是被系統(tǒng)獨立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點兒在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。

線程是程序中一個單一的順序控制流程。進程內(nèi)有一個相對獨立的、可調(diào)度的執(zhí)行單元,是系統(tǒng)獨立調(diào)度和分派CPU的基本單位指令運行時的程序的調(diào)度單位。在單個程序中同時運行多個線程完成不同的工作,稱為多線程。

特點

在多線程OS中,通常是在一個進程中包括多個線程,每個線程都是作為利用CPU的基本單位,是花費最小開銷的實體。線程具有以下屬性。?
1)輕型實體?
線程中的實體基本上不擁有系統(tǒng)資源,只是有一點必不可少的、能保證獨立運行的資源。?
線程的實體包括程序、數(shù)據(jù)和TCB。線程是動態(tài)概念,它的動態(tài)特性由線程控制塊TCB(Thread Control Block)描述。TCB包括以下信息:?
(1)線程狀態(tài)。?
(2)當線程不運行時,被保存的現(xiàn)場資源。?
(3)一組執(zhí)行堆棧。?
(4)存放每個線程的局部變量主存區(qū)。?
(5)訪問同一個進程中的主存和其它資源。?
用于指示被執(zhí)行指令序列的程序計數(shù)器、保留局部變量、少數(shù)狀態(tài)參數(shù)和返回地址等的一組寄存器和堆棧。?
2)獨立調(diào)度和分派的基本單位。?
在多線程OS中,線程是能獨立運行的基本單位,因而也是獨立調(diào)度和分派的基本單位。由于線程很“輕”,故線程的切換非常迅速且開銷小(在同一進程中的)。?
3)可并發(fā)執(zhí)行。?
在一個進程中的多個線程之間,可以并發(fā)執(zhí)行,甚至允許在一個進程中所有線程都能并發(fā)執(zhí)行;同樣,不同進程中的線程也能并發(fā)執(zhí)行,充分利用和發(fā)揮了處理機與外圍設(shè)備并行工作的能力。?
4)共享進程資源。

在同一進程中的各個線程,都可以共享該進程所擁有的資源,這首先表現(xiàn)在:所有線程都具有相同的地址空間(進程的地址空間),這意味著,線程可以訪問該地址空間的每一個虛地址;此外,還可以訪問進程所擁有的已打開文件、定時器、信號量機構(gòu)等。由于同一個進程內(nèi)的線程共享內(nèi)存和文件,所以線程之間互相通信不必調(diào)用內(nèi)核。

三、協(xié)程

協(xié)程與子例程一樣,協(xié)程(coroutine)也是一種程序組件。相對子例程而言,協(xié)程更為一般和靈活,但在實踐中使用沒有子例程那樣廣泛。協(xié)程源自 Simula 和 Modula-2 語言,但也有其他語言支持。?
協(xié)程不是進程或線程,其執(zhí)行過程更類似于子例程,或者說不帶返回值的函數(shù)調(diào)用。?
一個程序可以包含多個協(xié)程,可以對比與一個進程包含多個線程,?
因而下面我們來比較協(xié)程和線程。我們知道多個線程相對獨立,有自己的上下文,切換受系統(tǒng)控制;而協(xié)程也相對獨立,有自己的上下文,但是其切換由自己控制,由當前協(xié)程切換到其他協(xié)程由當前協(xié)程來控制。?
協(xié)程和線程區(qū)別:協(xié)程避免了無意義的調(diào)度,由此可以提高性能,但也因此,程序員必須自己承擔調(diào)度的責任,同時,協(xié)程也失去了標準線程使用多CPU的能力。

四、進程和線程的關(guān)系和區(qū)別

1、地址空間:進程內(nèi)的一個執(zhí)行單元;進程至少有一個線程;它們共享進程的地址空間;而進程有自己獨立的地址空間;因此線程可以讀寫同樣的數(shù)據(jù)結(jié)構(gòu)和變量,便于線程之間的通信。相反,進程間通信(IPC)很困難且消耗更多資源。?
2、資源擁有:進程是資源分配和擁有的單位,同一個進程內(nèi)的線程共享進程的資源?
3、進程是資源的分配和調(diào)度的一個獨立單元,而線程是CPU調(diào)度的基本單元?
4、二者均可并發(fā)執(zhí)行.?
5、進程的創(chuàng)建調(diào)用fork或者vfork,而線程的創(chuàng)建調(diào)用pthread_create,進程結(jié)束后它擁有的所有線程都將銷毀,而線程的結(jié)束不會影響同個進程中的其他線程的結(jié)束?
6、線程有自己的私有屬性TCB,線程id,寄存器、硬件上下文,而進程也有自己的私有屬性進程控制塊PCB,這些私有屬性是不被共享的,用來標示一個進程或一個線程的標志

五、優(yōu)缺點?
線程和進程在使用上各有優(yōu)缺點:線程執(zhí)行開銷小,但不利于資源的管理和保護;而進程正相反。同時,線程適合于在SMP機器上運行,而進程則可以跨機器遷移。

最后送上,從網(wǎng)上找的材料,以圖文方式將進程和線程做的很好的解釋清晰易懂:

1、?
?
計算機的核心是CPU,它承擔了所有的計算任務(wù)。它就像一座工廠,時刻在運行。?
2、?
?
假定工廠的電力有限,一次只能供給一個車間使用。也就是說,一個車間開工的時候,其他車間都必須停工。背后的含義就是,單個CPU一次只能運行一個任務(wù)。?
3、?
?
進程就好比工廠的車間,它代表CPU所能處理的單個任務(wù)。任一時刻,CPU總是運行一個進程,其他進程處于非運行狀態(tài)?
4、?
?
一個車間里,可以有很多工人。他們協(xié)同完成一個任務(wù)。?
5、?
?
線程就好比車間里的工人。一個進程可以包括多個線程。?
6、?
?
車間的空間是工人們共享的,比如許多房間是每個工人都可以進出的。這象征一個進程的內(nèi)存空間是共享的,每個線程都可以使用這些共享內(nèi)存。?
7、?
?
可是,每間房間的大小不同,有些房間最多只能容納一個人,比如廁所。里面有人的時候,其他人就不能進去了。這代表一個線程使用某些共享內(nèi)存時,其他線程必須等它結(jié)束,才能使用這一塊內(nèi)存。?
8、?
?
一個防止他人進入的簡單方法,就是門口加一把鎖。先到的人鎖上門,后到的人看到上鎖,就在門口排隊,等鎖打開再進去。這就叫”互斥鎖”(Mutual exclusion,縮寫 Mutex),防止多個線程同時讀寫某一塊內(nèi)存區(qū)域。?
9、?
?
還有些房間,可以同時容納n個人,比如廚房。也就是說,如果人數(shù)大于n,多出來的人只能在外面等著。這好比某些內(nèi)存區(qū)域,只能供給固定數(shù)目的線程使用。?
10、?
?
這時的解決方法,就是在門口掛n把鑰匙。進去的人就取一把鑰匙,出來時再把鑰匙掛回原處。后到的人發(fā)現(xiàn)鑰匙架空了,就知道必須在門口排隊等著了。這種做法叫做”信號量”(Semaphore),用來保證多個線程不會互相沖突。

不難看出,mutex是semaphore的一種特殊情況(n=1時)。也就是說,完全可以用后者替代前者。但是,因為mutex較為簡單,且效率高,所以在必須保證資源獨占的情況下,還是采用這種設(shè)計。?
11、?

操作系統(tǒng)的設(shè)計,因此可以歸結(jié)為三點:

(1)以多進程形式,允許多個任務(wù)同時運行;

(2)以多線程形式,允許單個任務(wù)分成不同的部分運行;

(3)提供協(xié)調(diào)機制,一方面防止進程之間和線程之間產(chǎn)生沖突,另一方面允許進程之間和線程之間共享資源。

(完)

來源:https://www.cnblogs.com/guolei2570/p/8810536.html

總結(jié)

以上是生活随笔為你收集整理的进程、线程和协程的理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩一级黄色 | 精品国产乱码久久久久夜深人妻 | 亚洲综合av一区 | av大片网站 | 成人欧美一区二区三区黑人动态图 | 韩国jizz| 成人黄色国产 | 在线色综合 | 天天色影| 涩涩av| 国产成人精品一区二三区四区五区 | 精品福利在线视频 | 肥熟女一区二区三肥熟女 | 日本大胆裸体做爰视频 | 日本一本在线视频 | 国产精品我不卡 | 国产乱码精品一区二区三区精东 | 91精品亚洲 | 宿舍女女闺蜜调教羞辱 | 秋霞7777鲁丝伊人久久影院 | 97成网| 131mm少妇做爰视频 | 日韩激情四射 | 91丝袜国产在线观看 | 99ri在线| 色中文字幕 | 污污的视频在线免费观看 | 波多野结衣不卡视频 | 小视频国产 | 亚洲国产精华液网站w | 在线一区视频 | 中文字幕+乱码+中文乱码91 | 久久久亚洲欧洲 | 日本黄色免费观看 | 日本午夜影视 | 亚洲gay视频 | www操操操 | 免费黄色链接 | 白丝开裆喷水 | 国产日韩欧美综合在线 | 一区二区三区天堂 | 成人免费不卡视频 | 色天堂视频 | 黄色片网站国产 | 五月婷婷基地 | 成人在线视频观看 | 九色影院 | 操色网| 蝌蚪久久| 免费亚洲婷婷 | 国产又色又爽又黄又免费 | 亚洲欧美日韩久久精品 | 爱爱爱网| 国产人妖一区二区三区 | 波多野结衣在线视频播放 | 糖心视频在线 | 福利网址在线 | 国产suv精品一区二区33 | 色呦呦影院 | 亚洲国产精品网站 | 东北少妇bbbb搡bbb搡 | 亚洲天堂欧美在线 | 波多野结衣中文一区 | 九九综合久久 | 日韩欧美在线视频观看 | 一区二区三区麻豆 | 日产精品久久久久久久蜜臀 | av动漫免费看 | 中文字幕高清在线 | 久久久久久久久久av | 五月天激情视频在线观看 | 人妻熟女aⅴ一区二区三区汇编 | 欧美一区二区三区免费视频 | 9999精品视频| 欧美成人影音 | 四虎网站最新网址 | 99福利视频 | 色哟哟一区二区三区四区 | 亚洲午夜精选 | 亚洲视频手机在线观看 | 水果派解说av | 久久久久国产免费 | 免费无码不卡视频在线观看 | 毛片免| 51调教丨国产调教视频 | 大香依人 | 在线污视频 | 欧美另类一区二区 | 亚洲成人av一区 | 97成人人妻一区二区三区 | 国产福利精品在线观看 | 国产情侣露脸自拍 | 亚洲熟妇国产熟妇肥婆 | 91亚洲国产成人精品一区二三 | 欧美国产三级 | 性做久久久久 | 日韩欧美久久 | 在线观看成人小视频 | 1000部啪啪未满十八勿入 |