国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

java高并發(fā)系列 - 第5天:深入理解進(jìn)程和線(xiàn)程

233jl / 2005人閱讀

摘要:一旦等到期望的事件,線(xiàn)程就會(huì)再次進(jìn)入運(yùn)行狀態(tài)。表示結(jié)束狀態(tài),線(xiàn)程執(zhí)行完畢之后進(jìn)入結(jié)束狀態(tài)。一個(gè)進(jìn)程可以包括多個(gè)線(xiàn)程。

進(jìn)程

進(jìn)程(Process)是計(jì)算機(jī)中的程序關(guān)于某數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。程序是指令、數(shù)據(jù)及其組織形式的描述,進(jìn)程是程序的實(shí)體。

進(jìn)程具有的特征:

動(dòng)態(tài)性:進(jìn)程是程序的一次執(zhí)行過(guò)程,是臨時(shí)的,有生命期的,是動(dòng)態(tài)產(chǎn)生,動(dòng)態(tài)消亡的
并發(fā)性:任何進(jìn)程都可以同其他進(jìn)行一起并發(fā)執(zhí)行
獨(dú)立性:進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位
結(jié)構(gòu)性:進(jìn)程由程序,數(shù)據(jù)和進(jìn)程控制塊三部分組成
我們經(jīng)常使用windows系統(tǒng),經(jīng)常會(huì)看見(jiàn).exe后綴的文件,雙擊這個(gè).exe文件的時(shí)候,這個(gè)文件中的指令就會(huì)被系統(tǒng)加載,那么我們就能得到一個(gè)關(guān)于這個(gè).exe程序的進(jìn)程。進(jìn)程是“活”的,或者說(shuō)是正在被執(zhí)行的。

window中打開(kāi)任務(wù)管理器,可以看到當(dāng)前系統(tǒng)中正在運(yùn)行的進(jìn)程,如下圖:

線(xiàn)程

線(xiàn)程是輕量級(jí)的進(jìn)程,是程序執(zhí)行的最小單元,使用多線(xiàn)程而不是多進(jìn)程去進(jìn)行并發(fā)程序的設(shè)計(jì),是因?yàn)榫€(xiàn)程間的切換和調(diào)度的成本遠(yuǎn)遠(yuǎn)小于進(jìn)程。

我們用一張圖來(lái)看一下線(xiàn)程的狀態(tài)圖:

線(xiàn)程的所有狀態(tài)在java.lang.Thread中的State枚舉中有定義,如:

public enum State {

NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;

}

線(xiàn)程幾個(gè)狀態(tài)的介紹:

New:表示剛剛創(chuàng)建的線(xiàn)程,這種線(xiàn)程還沒(méi)有開(kāi)始執(zhí)行
RUNNABLE:運(yùn)行狀態(tài),線(xiàn)程的start()方法調(diào)用后,線(xiàn)程會(huì)處于這種狀態(tài)
BLOCKED:阻塞狀態(tài)。當(dāng)線(xiàn)程在執(zhí)行的過(guò)程中遇到了synchronized同步塊,但這個(gè)同步塊被其他線(xiàn)程已獲取還未釋放時(shí),當(dāng)前線(xiàn)程將進(jìn)入阻塞狀態(tài),會(huì)暫停執(zhí)行,直到獲取到鎖。當(dāng)線(xiàn)程獲取到鎖之后,又會(huì)進(jìn)入到運(yùn)行狀態(tài)(RUNNABLE)
WAITING:等待狀態(tài)。和TIME_WAITING都表示等待狀態(tài),區(qū)別是WAITING會(huì)進(jìn)入一個(gè)無(wú)時(shí)間限制的等,而TIME_WAITING會(huì)進(jìn)入一個(gè)有限的時(shí)間等待,那么等待的線(xiàn)程究竟在等什么呢?一般來(lái)說(shuō),WAITING的線(xiàn)程正式在等待一些特殊的事件,比如,通過(guò)wait()方法等待的線(xiàn)程在等待notify()方法,而通過(guò)join()方法等待的線(xiàn)程則會(huì)等待目標(biāo)線(xiàn)程的終止。一旦等到期望的事件,線(xiàn)程就會(huì)再次進(jìn)入RUNNABLE運(yùn)行狀態(tài)。
TERMINATED:表示結(jié)束狀態(tài),線(xiàn)程執(zhí)行完畢之后進(jìn)入結(jié)束狀態(tài)。
注意:從NEW狀態(tài)出發(fā)后,線(xiàn)程不能在回到NEW狀態(tài),同理,處理TERMINATED狀態(tài)的線(xiàn)程也不能在回到RUNNABLE狀態(tài)

進(jìn)程與線(xiàn)程的一個(gè)簡(jiǎn)單解釋

進(jìn)程(process)和線(xiàn)程(thread)是操作系統(tǒng)的基本概念,但是它們比較抽象,不容易掌握。

1.計(jì)算機(jī)的核心是CPU,它承擔(dān)了所有的計(jì)算任務(wù)。它就像一座工廠(chǎng),時(shí)刻在運(yùn)行。

2.假定工廠(chǎng)的電力有限,一次只能供給一個(gè)車(chē)間使用。也就是說(shuō),一個(gè)車(chē)間開(kāi)工的時(shí)候,其他車(chē)間都必須停工。背后的含義就是,單個(gè)CPU一次只能運(yùn)行一個(gè)任務(wù)。

3.進(jìn)程就好比工廠(chǎng)的車(chē)間,它代表CPU所能處理的單個(gè)任務(wù)。任一時(shí)刻,CPU總是運(yùn)行一個(gè)進(jìn)程,其他進(jìn)程處于非運(yùn)行狀態(tài)。

4.一個(gè)車(chē)間里,可以有很多工人。他們協(xié)同完成一個(gè)任務(wù)。

5.線(xiàn)程就好比車(chē)間里的工人。一個(gè)進(jìn)程可以包括多個(gè)線(xiàn)程。

6.車(chē)間的空間是工人們共享的,比如許多房間是每個(gè)工人都可以進(jìn)出的。這象征一個(gè)進(jìn)程的內(nèi)存空間是共享的,每個(gè)線(xiàn)程都可以使用這些共享內(nèi)存。

7.可是,每間房間的大小不同,有些房間最多只能容納一個(gè)人,比如廁所。里面有人的時(shí)候,其他人就不能進(jìn)去了。這代表一個(gè)線(xiàn)程使用某些共享內(nèi)存時(shí),其他線(xiàn)程必須等它結(jié)束,才能使用這一塊內(nèi)存。

8.一個(gè)防止他人進(jìn)入的簡(jiǎn)單方法,就是門(mén)口加一把鎖。先到的人鎖上門(mén),后到的人看到上鎖,就在門(mén)口排隊(duì),等鎖打開(kāi)再進(jìn)去。這就叫"互斥鎖"(Mutual exclusion,縮寫(xiě) Mutex),防止多個(gè)線(xiàn)程同時(shí)讀寫(xiě)某一塊內(nèi)存區(qū)域。

9.還有些房間,可以同時(shí)容納n個(gè)人,比如廚房。也就是說(shuō),如果人數(shù)大于n,多出來(lái)的人只能在外面等著。這好比某些內(nèi)存區(qū)域,只能供給固定數(shù)目的線(xiàn)程使用。

10.這時(shí)的解決方法,就是在門(mén)口掛n把鑰匙。進(jìn)去的人就取一把鑰匙,出來(lái)時(shí)再把鑰匙掛回原處。后到的人發(fā)現(xiàn)鑰匙架空了,就知道必須在門(mén)口排隊(duì)等著了。這種做法叫做"信號(hào)量"(Semaphore),用來(lái)保證多個(gè)線(xiàn)程不會(huì)互相沖突。

11.操作系統(tǒng)的設(shè)計(jì),因此可以歸結(jié)為三點(diǎn):
(1)以多進(jìn)程形式,允許多個(gè)任務(wù)同時(shí)運(yùn)行;
(2)以多線(xiàn)程形式,允許單個(gè)任務(wù)分成不同的部分運(yùn)行;
(3)提供協(xié)調(diào)機(jī)制,一方面防止進(jìn)程之間和線(xiàn)程之間產(chǎn)生沖突,另一方面允許進(jìn)程之間和線(xiàn)程之間共享資源。

喜歡就關(guān)注我吧

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/76132.html

相關(guān)文章

  • 我的阿里之路+Java面經(jīng)考點(diǎn)

    摘要:我的是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)。因?yàn)槲倚睦砗芮宄业哪繕?biāo)是阿里。所以在收到阿里之后的那晚,我重新規(guī)劃了接下來(lái)的學(xué)習(xí)計(jì)劃,將我的短期目標(biāo)更新成拿下阿里轉(zhuǎn)正。 我的2017是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕JDK源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)offer。然后五月懷著忐忑的心情開(kāi)始了螞蟻金...

    姘擱『 評(píng)論0 收藏0
  • java并發(fā)系列 - 21java中的CAS操作,java并發(fā)的基石

    摘要:方法由兩個(gè)參數(shù),表示期望的值,表示要給設(shè)置的新值。操作包含三個(gè)操作數(shù)內(nèi)存位置預(yù)期原值和新值。如果處的值尚未同時(shí)更改,則操作成功。中就使用了這樣的操作。上面操作還有一點(diǎn)是將事務(wù)范圍縮小了,也提升了系統(tǒng)并發(fā)處理的性能。 這是java高并發(fā)系列第21篇文章。 本文主要內(nèi)容 從網(wǎng)站計(jì)數(shù)器實(shí)現(xiàn)中一步步引出CAS操作 介紹java中的CAS及CAS可能存在的問(wèn)題 悲觀鎖和樂(lè)觀鎖的一些介紹及數(shù)據(jù)庫(kù)...

    zorro 評(píng)論0 收藏0
  • java并發(fā)系列 - 19:JUC中的Executor框架詳解1,全面掌握java并發(fā)相關(guān)技術(shù)

    摘要:有三種狀態(tài)運(yùn)行關(guān)閉終止。類(lèi)類(lèi),提供了一系列工廠(chǎng)方法用于創(chuàng)建線(xiàn)程池,返回的線(xiàn)程池都實(shí)現(xiàn)了接口。線(xiàn)程池的大小一旦達(dá)到最大值就會(huì)保持不變,在提交新任務(wù),任務(wù)將會(huì)進(jìn)入等待隊(duì)列中等待。此線(xiàn)程池支持定時(shí)以及周期性執(zhí)行任務(wù)的需求。 這是java高并發(fā)系列第19篇文章。 本文主要內(nèi)容 介紹Executor框架相關(guān)內(nèi)容 介紹Executor 介紹ExecutorService 介紹線(xiàn)程池ThreadP...

    icattlecoder 評(píng)論0 收藏0
  • java并發(fā)系列 - 1:必須知道的幾個(gè)概念

    摘要:并發(fā)和并行并發(fā)和并行是兩個(gè)非常容易被混淆的概念。并發(fā)說(shuō)的是在一個(gè)時(shí)間段內(nèi),多件事情在這個(gè)時(shí)間段內(nèi)交替執(zhí)行。并行說(shuō)的是多件事情在同一個(gè)時(shí)刻同事發(fā)生。由于線(xiàn)程池是一個(gè)線(xiàn)程,得不到執(zhí)行,而被餓死,最終導(dǎo)致了程序死鎖的現(xiàn)象。 同步(Synchronous)和異步(Asynchronous) 同步和異步通常來(lái)形容一次方法調(diào)用,同步方法調(diào)用一旦開(kāi)始,調(diào)用者必須等到方法調(diào)用返回后,才能繼續(xù)后續(xù)的行為...

    zhoutk 評(píng)論0 收藏0
  • java并發(fā)系列 - 4:JMM相關(guān)的一些概念

    摘要:我們需要先了解這些概念。在中,其表現(xiàn)在對(duì)于共享變量的某些操作,是不可分的,必須連續(xù)的完成。有序性有序性指的是程序按照代碼的先后順序執(zhí)行。 JMM(java內(nèi)存模型),由于并發(fā)程序要比串行程序復(fù)雜很多,其中一個(gè)重要原因是并發(fā)程序中數(shù)據(jù)訪(fǎng)問(wèn)一致性和安全性將會(huì)受到嚴(yán)重挑戰(zhàn)。如何保證一個(gè)線(xiàn)程可以看到正確的數(shù)據(jù)呢?這個(gè)問(wèn)題看起來(lái)很白癡。對(duì)于串行程序來(lái)說(shuō),根本就是小菜一碟,如果你讀取一個(gè)變量,這個(gè)...

    mengbo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

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