操作系統(tǒng)(OS)是配置在計算機(jī)硬件上的第一層軟件,是對硬件系統(tǒng)的首次擴(kuò)充贪薪。其主要作用是管理好這些設(shè)備媳禁,提高它們的利用率和系統(tǒng)的吞吐量,并為用戶和應(yīng)用程序提供一個簡單的接口画切,便于用戶使用竣稽。
進(jìn)程的定義:
1)進(jìn)程是程序的一次執(zhí)行
2)進(jìn)程是一個程序及其數(shù)據(jù)在處理機(jī)上順序執(zhí)行時所發(fā)生的活動
3)進(jìn)程是具有獨立功能的程序在一個數(shù)據(jù)集合上運行的過程,它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨立單位霍弹。
線程的定義:
線程是操作系統(tǒng)可識別的最小執(zhí)行和調(diào)度單位丧枪。如果把進(jìn)程理解為在邏輯上操作系統(tǒng)所完成的任務(wù),那么線程表示完成該任務(wù)的許多可能的子任務(wù)之一庞萍。例如拧烦,假設(shè)用戶啟動了一個窗口中的數(shù)據(jù)庫應(yīng)用程序,操作系統(tǒng)就將對數(shù)據(jù)庫的調(diào)用表示為一個進(jìn)程钝计。
假設(shè)用戶要從數(shù)據(jù)庫中產(chǎn)生一份工資單報表恋博,并傳到一個文件中,這是一個子任務(wù)私恬;在產(chǎn)生工資單報表的過程中债沮,用戶又可以輸人數(shù)據(jù)庫查詢請求,這又是一個子任務(wù)本鸣。這樣疫衩,操作系統(tǒng)則把每一個請求――工資單報表和新輸人的數(shù)據(jù)查詢表示為數(shù)據(jù)庫進(jìn)程中的獨立的線程。
線程可以在處理器上獨立調(diào)度執(zhí)行荣德,這樣闷煤,在多處理器環(huán)境下就允許幾個線程各自在單獨處理器上進(jìn)行童芹。操作系統(tǒng)提供線程就是為了方便而有效地實現(xiàn)這種并發(fā)性
引入線程的好處
(1)易于調(diào)度。
(2)提高并發(fā)性鲤拿。通過線程可方便有效地實現(xiàn)并發(fā)性假褪。進(jìn)程可創(chuàng)建多個線程來執(zhí)行同一程序的不同部分。
(3)開銷少近顷。創(chuàng)建線程比創(chuàng)建進(jìn)程要快生音,所需開銷很少。窒升。
(4)利于充分發(fā)揮多處理器的功能缀遍。通過創(chuàng)建多線程進(jìn)程(即一個進(jìn)程可具有兩個或更多個線程),每個線程在一個處理器上運行饱须,從而實現(xiàn)應(yīng)用程序的并發(fā)性域醇,使每個處理器都得到充分運行。
進(jìn)程與線程:
1)進(jìn)程是基本資源分配單位冤寿,而線程是基本調(diào)度和執(zhí)行單位歹苦;線程不擁有系統(tǒng)資源青伤,但線程可以訪問所屬進(jìn)程的資源督怜。
2)一個線程只能屬于一個進(jìn)程米愿,而一個進(jìn)程可以有多個線程精居,但至少有一個線程讲仰。
3)進(jìn)程之間可以并發(fā)執(zhí)行蚌斩,同一進(jìn)程內(nèi)的多個線程也可以并發(fā)執(zhí)行柬赐。
4)創(chuàng)建和撤銷進(jìn)程的系統(tǒng)開銷遠(yuǎn)大于創(chuàng)建和撤銷線程的系統(tǒng)開銷议蟆。
5)資源分配給進(jìn)程憨降,同一進(jìn)程的所有線程共享該進(jìn)程的所有資源与殃。 同一進(jìn)程中的多個線程共享代碼段(代碼和常量)立帖,數(shù)據(jù)段(全局變量和靜態(tài)變量)眼溶,擴(kuò)展段(堆存儲)。但是每個線程擁有自己的棧段晓勇,棧段又叫運行時段堂飞,用來存放所有局部變量和臨時變量。
注意:
不同進(jìn)程的線程間可以利用消息通信的辦法實現(xiàn)同步绑咱。
數(shù)據(jù)段中(全局變量和靜態(tài)變量)是指在開辟進(jìn)程時創(chuàng)建的, 不一定是指類中的全局和靜態(tài)變量绰筛。
協(xié)程:
協(xié)程是一種用戶態(tài)的輕量級線程,又稱微線程描融,英文名Coroutine铝噩,本質(zhì)上還是一個線程
, 擁有線程的共享代碼段(代碼和常量),數(shù)據(jù)段(全局變量和靜態(tài)變量)窿克,擴(kuò)展段(堆存儲)骏庸。協(xié)程的調(diào)度完全由用戶控制毛甲。人們通常將協(xié)程和子程序(函數(shù))比較著理解。
子程序調(diào)用總是一個入口敞恋,一次返回丽啡,一旦退出即完成了子程序的執(zhí)行。
協(xié)程的起始處是第一個入口點硬猫,在協(xié)程里补箍,返回點之后是接下來的入口點。在python中啸蜜,協(xié)程可以通過yield來調(diào)用其它協(xié)程坑雅。通過yield方式轉(zhuǎn)移執(zhí)行權(quán)的協(xié)程之間不是調(diào)用者與被調(diào)用者的關(guān)系,而是彼此對稱衬横、平等的裹粤,通過相互協(xié)作共同完成任務(wù)。其運行的大致流程如下:
- 第一步蜂林,協(xié)程A開始執(zhí)行遥诉。
- 第二步,協(xié)程A執(zhí)行到一半噪叙,進(jìn)入暫停矮锈,通過yield命令將執(zhí)行權(quán)轉(zhuǎn)移到協(xié)程B。
- 第三步睁蕾,(一段時間后)協(xié)程B交還執(zhí)行權(quán)苞笨。
- 第四步,協(xié)程A恢復(fù)執(zhí)行子眶。1234
協(xié)程的特點在于是一個線程執(zhí)行瀑凝,與多線程相比,其優(yōu)勢體現(xiàn)在:
協(xié)程的執(zhí)行效率非常高臭杰。因為子程序切換不是線程切換粤咪,而是由程序自身控制
,因此渴杆,沒有線程切換的開銷寥枝,和多線程比,線程數(shù)量越多将塑,協(xié)程的性能優(yōu)勢就越明顯脉顿。
由于是程序自身控制, 所以協(xié)程不需要多線程的鎖機(jī)制。在協(xié)程中控制共享資源不加鎖点寥,只需要判斷狀態(tài)就好了艾疟。