摘要:進(jìn)程與線程聲明文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處進(jìn)程線程基本概念進(jìn)程程序的執(zhí)行實(shí)體,操作系統(tǒng)分配資源的最小單位線程被稱(chēng)為輕量級(jí)進(jìn)程,是調(diào)度分配的最小單位。一個(gè)標(biāo)準(zhǔn)的線程由線程,程序計(jì)數(shù)器,寄存器集合和堆棧組成進(jìn)程間線程間通信方式進(jìn)程間通信
進(jìn)程與線程 聲明
文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處https://segmentfault.com/u/yzwall
進(jìn)程&線程基本概念進(jìn)程:程序的執(zhí)行實(shí)體,操作系統(tǒng)分配資源的最小單位;
線程:被稱(chēng)為輕量級(jí)進(jìn)程,是CPU調(diào)度分配的最小單位。一個(gè)標(biāo)準(zhǔn)的線程由線程ID,程序計(jì)數(shù)器(PC),寄存器集合和堆棧組成;
進(jìn)程間/線程間通信方式 LinuxLinux進(jìn)程間通信:管道,信號(hào)(signal),消息隊(duì)列(Message),共享內(nèi)存(shared memory),信號(hào)量(semaphore),套接口(socket)
Linux線程間通信:互斥量(Mutex),信號(hào)量(Semaphore),條件變量
Windows進(jìn)程間通信:管道(pipe),消息隊(duì)列(Message),共享內(nèi)存(shared memory),信號(hào)量(semaphore),套接口(socket)
Windows線程間通信:臨界區(qū)(critical section),互斥量(Mutex),信號(hào)量(Semaphore),事件(Event)
線程是獨(dú)立調(diào)度的基本單位,進(jìn)程是擁有資源的基本單位(進(jìn)程只作為除CPU之外系統(tǒng)資源的分配單元,線程作為CPU的分配單元);
在同一進(jìn)程中,線程之間的切換不會(huì)引起進(jìn)程的切換,但從一個(gè)進(jìn)程中的線程切換到另一個(gè)進(jìn)程中的線程時(shí),會(huì)引起進(jìn)程的切換;
進(jìn)程創(chuàng)建和撤銷(xiāo)時(shí),系統(tǒng)開(kāi)銷(xiāo)遠(yuǎn)大于線程開(kāi)銷(xiāo);
進(jìn)程切換時(shí),保存現(xiàn)場(chǎng)開(kāi)銷(xiāo)和上下文切換開(kāi)銷(xiāo)遠(yuǎn)大于線程開(kāi)銷(xiāo);
進(jìn)程之間的地址空間互相獨(dú)立,一個(gè)進(jìn)程崩潰不影響其他進(jìn)程;
線程之間(屬于同一進(jìn)程)共享進(jìn)程的地址空間,一個(gè)線程死掉相當(dāng)于整個(gè)進(jìn)程死掉;
進(jìn)程間通信需要借助操作系統(tǒng);
由于線程共享進(jìn)程的地址空間,因此線程間同步與通信較容易實(shí)現(xiàn),甚至無(wú)需操作系統(tǒng)干預(yù);
死鎖產(chǎn)生必須同時(shí)滿足以下四個(gè)條件:
互斥條件:一段時(shí)間內(nèi),某資源僅被一個(gè)進(jìn)程所占有,其他進(jìn)程只能等待;
不剝奪條件:進(jìn)程擁有的資源只能由自己釋放,不可被其他進(jìn)程強(qiáng)行奪走;
請(qǐng)求和保持條件:在申請(qǐng)資源不能全部滿足的條件下,進(jìn)程占有已申請(qǐng)的資源,等待新的資源分配
循環(huán)等待條件:存在系統(tǒng)資源的進(jìn)程循環(huán)等待鏈;
死鎖處理策略預(yù)防死鎖:任意破壞死鎖產(chǎn)生的四個(gè)必要條件之一即可;
避免死鎖:在資源動(dòng)態(tài)分配過(guò)程中,采用某種算法(比如銀行家算法)防止系統(tǒng)進(jìn)入”不安全狀態(tài)“(系統(tǒng)有可能死鎖);
死鎖檢測(cè)和解除:通過(guò)系統(tǒng)檢測(cè)機(jī)制及時(shí)檢測(cè)出死鎖現(xiàn)象(利用資源分配圖),然后可通過(guò)剝奪資源,撤銷(xiāo)進(jìn)程和回退進(jìn)程解除死鎖;
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67021.html
摘要:父進(jìn)程調(diào)用創(chuàng)建子進(jìn)程。因而,一個(gè)進(jìn)程的第一個(gè)線程會(huì)隨著這個(gè)進(jìn)程的啟動(dòng)而創(chuàng)建,這個(gè)線程被稱(chēng)為該進(jìn)程的主線程。另一方面,線程不可能獨(dú)立于進(jìn)程存在。終止線程線程可以通過(guò)多種方式來(lái)終結(jié)同一個(gè)進(jìn)程中的其他線程。 前言 不積跬步,無(wú)以至千里;不積小流,無(wú)以成江海。在學(xué)習(xí)Java多線程相關(guān)的知識(shí)前,我們首先需要去了解一點(diǎn)操作系統(tǒng)的進(jìn)程、線程以及相關(guān)的基礎(chǔ)概念。 進(jìn)程 通常,我們把一個(gè)程序的執(zhí)行稱(chēng)為一...
摘要:一個(gè)進(jìn)程如果有多條執(zhí)行路徑,則稱(chēng)為多線程程序。這可能拋出在當(dāng)前線程中。考慮多線程的數(shù)據(jù)安全問(wèn)題是否是多線程環(huán)境。當(dāng)前線程必須擁有此對(duì)象監(jiān)視器。此方法導(dǎo)致當(dāng)前線程稱(chēng)之為將其自身放置在對(duì)象的等待集中,然后放棄此對(duì)象上的所有同步要求。 這是劉意老師的JAVA基礎(chǔ)教程的筆記講的賊好,附上傳送門(mén) 傳智風(fēng)清揚(yáng)-超全面的Java基礎(chǔ) 一、線程的引入 1.多線程概述 進(jìn)程 a.正在運(yùn)行的程序,是...
閱讀 2966·2021-11-08 13:20
閱讀 1034·2021-09-22 15:20
閱讀 665·2019-08-30 15:53
閱讀 1972·2019-08-30 15:43
閱讀 1283·2019-08-29 17:21
閱讀 543·2019-08-29 12:15
閱讀 2381·2019-08-28 17:51
閱讀 3147·2019-08-26 13:26