線程與進(jìn)程

以操作系統(tǒng)的角度述說(shuō)線程與進(jìn)程

作者: luoweifu 發(fā)布時(shí)間: 2017-11-29 17:17 原文鏈接

什么是線程

什么是線程娱仔?線程與進(jìn)程有什么關(guān)系?這是一個(gè)非常抽象的問(wèn)題匿乃,也是一個(gè)特別廣的話題,涉及到非常多的知識(shí)休吠。我不能確保能把它講得好,也不能確保講的內(nèi)容全部都正確业簿。即使這樣瘤礁,我也希望盡可能地把它講通俗一點(diǎn),講得明白一點(diǎn)梅尤,因?yàn)檫@是個(gè)一直困擾我很久的柜思,撲朔迷離的知識(shí)領(lǐng)域,希望通過(guò)我的理解揭開它一層一層神秘的面紗巷燥。

任務(wù)調(diào)度

線程是什么赡盘?要理解這個(gè)概念,需要先了解一下操作系統(tǒng)的一些相關(guān)概念缰揪。大部分操作系統(tǒng)(如Windows陨享、Linux)的任務(wù)調(diào)度是采用時(shí)間片輪轉(zhuǎn)的搶占式調(diào)度方式,也就是說(shuō)一個(gè)任務(wù)執(zhí)行一小段時(shí)間后強(qiáng)制暫停去執(zhí)行下一個(gè)任務(wù)钝腺,每個(gè)任務(wù)輪流執(zhí)行抛姑。任務(wù)執(zhí)行的一小段時(shí)間叫做時(shí)間片,任務(wù)正在執(zhí)行時(shí)的狀態(tài)叫運(yùn)行狀態(tài)艳狐,任務(wù)執(zhí)行一段時(shí)間后強(qiáng)制暫停去執(zhí)行下一個(gè)任務(wù)定硝,被暫停的任務(wù)就處于就緒狀態(tài)等待下一個(gè)屬于它的時(shí)間片的到來(lái)。這樣每個(gè)任務(wù)都能得到執(zhí)行毫目,由于CPU的執(zhí)行效率非常高蔬啡,時(shí)間片非常短,在各個(gè)任務(wù)之間快速地切換镀虐,給人的感覺就是多個(gè)任務(wù)在“同時(shí)進(jìn)行”箱蟆,這也就是我們所說(shuō)的并發(fā)(別覺得并發(fā)有多高深,它的實(shí)現(xiàn)很復(fù)雜刮便,但它的概念很簡(jiǎn)單顽腾,就是一句話:多個(gè)任務(wù)同時(shí)執(zhí)行)。多任務(wù)運(yùn)行過(guò)程的示意圖如下:
image

圖1:操作系統(tǒng)中的任務(wù)調(diào)度

進(jìn)程

我們都知道計(jì)算機(jī)的核心是CPU,它承擔(dān)了所有的計(jì)算任務(wù)抄肖;而操作系統(tǒng)是計(jì)算機(jī)的管理者久信,它負(fù)責(zé)任務(wù)的調(diào)度、資源的分配和管理漓摩,統(tǒng)領(lǐng)整個(gè)計(jì)算機(jī)硬件裙士;應(yīng)用程序則是具有某種功能的程序,程序是運(yùn)行于操作系統(tǒng)之上的管毙。

進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序在一個(gè)數(shù)據(jù)集上的一次動(dòng)態(tài)執(zhí)行的過(guò)程腿椎,是操作系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位,是應(yīng)用程序運(yùn)行的載體夭咬。進(jìn)程是一種抽象的概念啃炸,從來(lái)沒有統(tǒng)一的標(biāo)準(zhǔn)定義。進(jìn)程一般由程序卓舵、數(shù)據(jù)集合和進(jìn)程控制塊三部分組成南用。程序用于描述進(jìn)程要完成的功能,是控制進(jìn)程執(zhí)行的指令集掏湾;數(shù)據(jù)集合是程序在執(zhí)行時(shí)所需要的數(shù)據(jù)和工作區(qū)裹虫;程序控制塊(Program Control Block,簡(jiǎn)稱PCB)融击,包含進(jìn)程的描述信息和控制信息筑公,是進(jìn)程存在的唯一標(biāo)志。

進(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)程控制塊三部分組成。

線程

在早期的操作系統(tǒng)中并沒有線程的概念如绸,進(jìn)程是能擁有資源和獨(dú)立運(yùn)行的最小單位嘱朽,也是程序執(zhí)行的最小單位。任務(wù)調(diào)度采用的是時(shí)間片輪轉(zhuǎn)的搶占式調(diào)度方式怔接,而進(jìn)程是任務(wù)調(diào)度的最小單位搪泳,每個(gè)進(jìn)程有各自獨(dú)立的一塊內(nèi)存,使得各個(gè)進(jìn)程之間內(nèi)存地址相互隔離扼脐。

后來(lái)岸军,隨著計(jì)算機(jī)的發(fā)展奋刽,對(duì)CPU的要求越來(lái)越高,進(jìn)程之間的切換開銷較大艰赞,已經(jīng)無(wú)法滿足越來(lái)越復(fù)雜的程序的要求了佣谐。于是就發(fā)明了線程,線程是程序執(zhí)行中一個(gè)單一的順序控制流程方妖,是程序執(zhí)行流的最小單元狭魂,是處理器調(diào)度和分派的基本單位。一個(gè)進(jìn)程可以有一個(gè)或多個(gè)線程党觅,各個(gè)線程之間共享程序的內(nèi)存空間(也就是所在進(jìn)程的內(nèi)存空間)雌澄。一個(gè)標(biāo)準(zhǔn)的線程由線程ID、當(dāng)前指令指針(PC)杯瞻、寄存器和堆棧組成镐牺。而進(jìn)程由內(nèi)存空間(代碼、數(shù)據(jù)魁莉、進(jìn)程空間睬涧、打開的文件)和一個(gè)或多個(gè)線程組成。

進(jìn)程與線程的區(qū)別

前面講了進(jìn)程與線程沛厨,但可能你還覺得迷糊宙地,感覺他們很類似摔认。的確逆皮,進(jìn)程與線程有著千絲萬(wàn)縷的關(guān)系,下面就讓我們一起來(lái)理一理:

1. 線程是程序執(zhí)行的最小單位参袱,而進(jìn)程是操作系統(tǒng)分配資源的最小單位电谣;

2. 一個(gè)進(jìn)程由一個(gè)或多個(gè)線程組成,線程是一個(gè)進(jìn)程中代碼的不同執(zhí)行路線抹蚀;

3. 進(jìn)程之間相互獨(dú)立剿牺,但同一進(jìn)程下的各個(gè)線程之間共享程序的內(nèi)存空間(包括代碼段、數(shù)據(jù)集环壤、堆等)及一些進(jìn)程級(jí)的資源(如打開文件和信號(hào))晒来,某進(jìn)程內(nèi)的線程在其它進(jìn)程不可見;

4. 調(diào)度和切換:線程上下文切換比進(jìn)程上下文切換要快得多郑现。

線程與進(jìn)程關(guān)系的示意圖:
image

圖2:進(jìn)程與線程的資源共享關(guān)系
image

圖3:?jiǎn)尉€程與多線程的關(guān)系

總之湃崩,線程和進(jìn)程都是一種抽象的概念,線程是一種比進(jìn)程更小的抽象接箫,線程和進(jìn)程都可用于實(shí)現(xiàn)并發(fā)攒读。

在早期的操作系統(tǒng)中并沒有線程的概念,進(jìn)程是能擁有資源和獨(dú)立運(yùn)行的最小單位辛友,也是程序執(zhí)行的最小單位薄扁。它相當(dāng)于一個(gè)進(jìn)程里只有一個(gè)線程,進(jìn)程本身就是線程从橘。所以線程有時(shí)被稱為輕量級(jí)進(jìn)程(Lightweight Process定踱,LWP)蹦锋。

image

圖4:早期的操作系統(tǒng)只有進(jìn)程霍衫,沒有線程

后來(lái)董栽,隨著計(jì)算機(jī)的發(fā)展椅野,對(duì)多個(gè)任務(wù)之間上下文切換的效率要求越來(lái)越高鸣峭,就抽象出一個(gè)更小的概念——線程盆犁,一般一個(gè)進(jìn)程會(huì)有多個(gè)(也可是一個(gè))線程殿遂。

image

圖5:線程的出現(xiàn)诈铛,使得一個(gè)進(jìn)程可以有多個(gè)線程

多線程與多核

上面提到的時(shí)間片輪轉(zhuǎn)的調(diào)度方式說(shuō)一個(gè)任務(wù)執(zhí)行一小段時(shí)間后強(qiáng)制暫停去執(zhí)行下一個(gè)任務(wù),每個(gè)任務(wù)輪流執(zhí)行墨礁。很多操作系統(tǒng)的書都說(shuō)“同一時(shí)間點(diǎn)只有一個(gè)任務(wù)在執(zhí)行”幢竹。那有人可能就要問(wèn)雙核處理器呢?難道兩個(gè)核不是同時(shí)運(yùn)行嗎恩静?

其實(shí)“同一時(shí)間點(diǎn)只有一個(gè)任務(wù)在執(zhí)行”這句話是不準(zhǔn)確的焕毫,至少它是不全面的。那多核處理器的情況下驶乾,線程是怎樣執(zhí)行呢邑飒?這就需要了解內(nèi)核線程。

多核(心)處理器是指在一個(gè)處理器上集成多個(gè)運(yùn)算核心從而提高計(jì)算能力级乐,也就是有多個(gè)真正并行計(jì)算的處理核心疙咸,每一個(gè)處理核心對(duì)應(yīng)一個(gè)內(nèi)核線程。內(nèi)核線程(Kernel Thread风科,KLT)就是直接由操作系統(tǒng)內(nèi)核支持的線程撒轮,這種線程由內(nèi)核來(lái)完成線程切換,內(nèi)核通過(guò)操作調(diào)度器對(duì)線程進(jìn)行調(diào)度贼穆,并負(fù)責(zé)將線程的任務(wù)映射到各個(gè)處理器上题山。一般一個(gè)處理核心對(duì)應(yīng)一個(gè)內(nèi)核線程,比如單核處理器對(duì)應(yīng)一個(gè)內(nèi)核線程故痊,雙核處理器對(duì)應(yīng)兩個(gè)內(nèi)核線程顶瞳,四核處理器對(duì)應(yīng)四個(gè)內(nèi)核線程。

現(xiàn)在的電腦一般是雙核四線程愕秫、四核八線程慨菱,是采用超線程技術(shù)將一個(gè)物理處理核心模擬成兩個(gè)邏輯處理核心,對(duì)應(yīng)兩個(gè)內(nèi)核線程豫领,所以在操作系統(tǒng)中看到的CPU數(shù)量是實(shí)際物理CPU數(shù)量的兩倍抡柿,如你的電腦是雙核四線程,打開“任務(wù)管理器\性能”可以看到4個(gè)CPU的監(jiān)視器等恐,四核八線程可以看到8個(gè)CPU的監(jiān)視器洲劣。

image

圖6:雙核四線程在Windows8下查看的結(jié)果

超線程技術(shù)就是利用特殊的硬件指令备蚓,把一個(gè)物理芯片模擬成兩個(gè)邏輯處理核心,讓單個(gè)處理器都能使用線程級(jí)并行計(jì)算囱稽,進(jìn)而兼容多線程操作系統(tǒng)和軟件郊尝,減少了CPU的閑置時(shí)間,提高的CPU的運(yùn)行效率战惊。這種超線程技術(shù)(如雙核四線程)由處理器硬件的決定流昏,同時(shí)也需要操作系統(tǒng)的支持才能在計(jì)算機(jī)中表現(xiàn)出來(lái)。

程序一般不會(huì)直接去使用內(nèi)核線程吞获,而是去使用內(nèi)核線程的一種高級(jí)接口——輕量級(jí)進(jìn)程(Lightweight Process况凉,LWP),輕量級(jí)進(jìn)程就是我們通常意義上所講的線程(我們?cè)谶@稱它為用戶線程)各拷,由于每個(gè)輕量級(jí)進(jìn)程都由一個(gè)內(nèi)核線程支持刁绒,因此只有先支持內(nèi)核線程,才能有輕量級(jí)進(jìn)程烤黍。用戶線程與內(nèi)核線程的對(duì)應(yīng)關(guān)系有三種模型:一對(duì)一模型知市、多對(duì)一模型、多對(duì)多模型速蕊,在這以4個(gè)內(nèi)核線程嫂丙、3個(gè)用戶線程為例對(duì)三種模型進(jìn)行說(shuō)明。

一對(duì)一模型

對(duì)于一對(duì)一模型來(lái)說(shuō)规哲,一個(gè)用戶線程就唯一地對(duì)應(yīng)一個(gè)內(nèi)核線程(反過(guò)來(lái)不一定成立跟啤,一個(gè)內(nèi)核線程不一定有對(duì)應(yīng)的用戶線程)。這樣媳叨,如果CPU沒有采用超線程技術(shù)(如四核四線程的計(jì)算機(jī))腥光,一個(gè)用戶線程就唯一地映射到一個(gè)物理CPU的線程关顷,線程之間的并發(fā)是真正的并發(fā)糊秆。一對(duì)一模型使用戶線程具有與內(nèi)核線程一樣的優(yōu)點(diǎn),一個(gè)線程因某種原因阻塞時(shí)其他線程的執(zhí)行不受影響议双;此處痘番,一對(duì)一模型也可以讓多線程程序在多處理器的系統(tǒng)上有更好的表現(xiàn)。

但一對(duì)一模型也有兩個(gè)缺點(diǎn):1. 許多操作系統(tǒng)限制了內(nèi)核線程的數(shù)量平痰,因此一對(duì)一模型會(huì)使用戶線程的數(shù)量受到限制汞舱;2. 許多操作系統(tǒng)內(nèi)核線程調(diào)度時(shí),上下文切換的開銷較大宗雇,導(dǎo)致用戶線程的執(zhí)行效率下降昂芜。
image

圖7:一對(duì)一模型

多對(duì)一模型

多對(duì)一模型將多個(gè)用戶線程映射到一個(gè)內(nèi)核線程上,線程之間的切換由用戶態(tài)的代碼來(lái)進(jìn)行赔蒲,因此相對(duì)一對(duì)一模型泌神,多對(duì)一模型的線程切換速度要快許多良漱;此外,多對(duì)一模型對(duì)用戶線程的數(shù)量幾乎無(wú)限制欢际。但多對(duì)一模型也有兩個(gè)缺點(diǎn):1. 如果其中一個(gè)用戶線程阻塞母市,那么其它所有線程都將無(wú)法執(zhí)行,因?yàn)榇藭r(shí)內(nèi)核線程也隨之阻塞了损趋;2. 在多處理器系統(tǒng)上患久,處理器數(shù)量的增加對(duì)多對(duì)一模型的線程性能不會(huì)有明顯的增加,因?yàn)樗械挠脩艟€程都映射到一個(gè)處理器上了浑槽。
image

圖8:多對(duì)一模型

多對(duì)多模型

多對(duì)多模型結(jié)合了一對(duì)一模型和多對(duì)一模型的優(yōu)點(diǎn)蒋失,將多個(gè)用戶線程映射到多個(gè)內(nèi)核線程上。多對(duì)多模型的優(yōu)點(diǎn)有:1. 一個(gè)用戶線程的阻塞不會(huì)導(dǎo)致所有線程的阻塞桐玻,因?yàn)榇藭r(shí)還有別的內(nèi)核線程被調(diào)度來(lái)執(zhí)行高镐;2. 多對(duì)多模型對(duì)用戶線程的數(shù)量沒有限制;3. 在多處理器的操作系統(tǒng)中畸冲,多對(duì)多模型的線程也能得到一定的性能提升嫉髓,但提升的幅度不如一對(duì)一模型的高。

在現(xiàn)在流行的操作系統(tǒng)中邑闲,大都采用多對(duì)多的模型算行。
image

圖9:多對(duì)多模型

查看進(jìn)程與線程

一個(gè)應(yīng)用程序可能是多線程的,也可能是多進(jìn)程的苫耸,如何查看呢州邢?在Windows下我們只須打開任務(wù)管理器就能查看一個(gè)應(yīng)用程序的進(jìn)程和線程數(shù)。按“Ctrl+Alt+Del”或右鍵快捷工具欄打開任務(wù)管理器褪子。

查看進(jìn)程數(shù)和線程數(shù):
image

圖10:查看線程數(shù)和進(jìn)程數(shù)

在“進(jìn)程”選項(xiàng)卡下量淌,我們可以看到一個(gè)應(yīng)用程序包含的線程數(shù)。如果一個(gè)應(yīng)用程序有多個(gè)進(jìn)程嫌褪,我們能看到每一個(gè)進(jìn)程呀枢,如在上圖中,Google的Chrome瀏覽器就有多個(gè)進(jìn)程笼痛。同時(shí)裙秋,如果打開了一個(gè)應(yīng)用程序的多個(gè)實(shí)例也會(huì)有多個(gè)進(jìn)程,如上圖中我打開了兩個(gè)cmd窗口缨伊,就有兩個(gè)cmd進(jìn)程摘刑。如果看不到線程數(shù)這一列,可以再點(diǎn)擊“查看\選擇列”菜單刻坊,增加監(jiān)聽的列枷恕。

查看CPU和內(nèi)存的使用率:

在性能選項(xiàng)卡中,我們可以查看CPU和內(nèi)存的使用率谭胚,根據(jù)CPU使用記錄的監(jiān)視器的個(gè)數(shù)還能看出邏輯處理核心的個(gè)數(shù)徐块,如我的雙核四線程的計(jì)算機(jī)就有四個(gè)監(jiān)視器隶校。
image

圖11:查看CPU和內(nèi)存的使用率

線程的生命周期

當(dāng)線程的數(shù)量小于處理器的數(shù)量時(shí),線程的并發(fā)是真正的并發(fā)蛹锰,不同的線程運(yùn)行在不同的處理器上深胳。但當(dāng)線程的數(shù)量大于處理器的數(shù)量時(shí),線程的并發(fā)會(huì)受到一些阻礙铜犬,此時(shí)并不是真正的并發(fā)舞终,因?yàn)榇藭r(shí)至少有一個(gè)處理器會(huì)運(yùn)行多個(gè)線程。

在單個(gè)處理器運(yùn)行多個(gè)線程時(shí)癣猾,并發(fā)是一種模擬出來(lái)的狀態(tài)敛劝。操作系統(tǒng)采用時(shí)間片輪轉(zhuǎn)的方式輪流執(zhí)行每一個(gè)線程。現(xiàn)在纷宇,幾乎所有的現(xiàn)代操作系統(tǒng)采用的都是時(shí)間片輪轉(zhuǎn)的搶占式調(diào)度方式夸盟,如我們熟悉的Unix、Linux像捶、Windows及macOS等流行的操作系統(tǒng)上陕。

我們知道線程是程序執(zhí)行的最小單位,也是任務(wù)執(zhí)行的最小單位拓春。在早期只有進(jìn)程的操作系統(tǒng)中释簿,進(jìn)程有五種狀態(tài),創(chuàng)建硼莽、就緒庶溶、運(yùn)行、阻塞(等待)懂鸵、退出偏螺。早期的進(jìn)程相當(dāng)于現(xiàn)在的只有單個(gè)線程的進(jìn)程,那么現(xiàn)在的多線程也有五種狀態(tài)匆光,現(xiàn)在的多線程的生命周期與早期進(jìn)程的生命周期類似套像。

image

圖12:早期進(jìn)程的生命周期

進(jìn)程在運(yùn)行過(guò)程有三種狀態(tài):就緒、運(yùn)行殴穴、阻塞凉夯,創(chuàng)建和退出狀態(tài)描述的是進(jìn)程的創(chuàng)建過(guò)程和退出過(guò)程货葬。

創(chuàng)建:進(jìn)程正在創(chuàng)建采幌,還不能運(yùn)行。操作系統(tǒng)在創(chuàng)建進(jìn)程時(shí)要進(jìn)行的工作包括分配和建立進(jìn)程控制塊表項(xiàng)震桶、建立資源表格并分配資源休傍、加載程序并建立地址空間;

就緒:時(shí)間片已用完蹲姐,此線程被強(qiáng)制暫停磨取,等待下一個(gè)屬于它的時(shí)間片到來(lái)人柿;

運(yùn)行:此線程正在執(zhí)行,正在占用時(shí)間片忙厌;

阻塞:也叫等待狀態(tài)凫岖,等待某一事件(如IO或另一個(gè)線程)執(zhí)行完;

退出:進(jìn)程已結(jié)束逢净,所以也稱結(jié)束狀態(tài)哥放,釋放操作系統(tǒng)分配的資源。
image

圖13:線程的生命周期

創(chuàng)建:一個(gè)新的線程被創(chuàng)建爹土,等待該線程被調(diào)用執(zhí)行甥雕;

就緒:時(shí)間片已用完,此線程被強(qiáng)制暫停胀茵,等待下一個(gè)屬于它的時(shí)間片到來(lái)社露;

運(yùn)行:此線程正在執(zhí)行,正在占用時(shí)間片琼娘;

阻塞:也叫等待狀態(tài)峭弟,等待某一事件(如IO或另一個(gè)線程)執(zhí)行完;

退出:一個(gè)線程完成任務(wù)或者其他終止條件發(fā)生脱拼,該線程終止進(jìn)入退出狀態(tài)孟害,退出狀態(tài)釋放該線程所分配的資源。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挪拟,一起剝皮案震驚了整個(gè)濱河市挨务,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌玉组,老刑警劉巖谎柄,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異惯雳,居然都是意外死亡朝巫,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門石景,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)劈猿,“玉大人,你說(shuō)我怎么就攤上這事潮孽【救伲” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵往史,是天一觀的道長(zhǎng)仗颈。 經(jīng)常有香客問(wèn)我,道長(zhǎng)椎例,這世上最難降的妖魔是什么挨决? 我笑而不...
    開封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任请祖,我火速辦了婚禮,結(jié)果婚禮上脖祈,老公的妹妹穿的比我還像新娘肆捕。我一直安慰自己,他們只是感情好盖高,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開白布福压。 她就那樣靜靜地躺著,像睡著了一般或舞。 火紅的嫁衣襯著肌膚如雪荆姆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天映凳,我揣著相機(jī)與錄音胆筒,去河邊找鬼。 笑死诈豌,一個(gè)胖子當(dāng)著我的面吹牛仆救,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播矫渔,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼彤蔽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了庙洼?” 一聲冷哼從身側(cè)響起顿痪,我...
    開封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎油够,沒想到半個(gè)月后蚁袭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡石咬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年揩悄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鬼悠。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡删性,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出焕窝,到底是詐尸還是另有隱情蹬挺,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布袜啃,位于F島的核電站汗侵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏群发。R本人自食惡果不足惜晰韵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望熟妓。 院中可真熱鬧雪猪,春花似錦、人聲如沸起愈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抬虽。三九已至官觅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間阐污,已是汗流浹背休涤。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笛辟,地道東北人功氨。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像手幢,于是被迫代替她去往敵國(guó)和親捷凄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容

  • 進(jìn)程 1:進(jìn)程是指在系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序,進(jìn)程是程序在計(jì)算機(jī)上的一次執(zhí)行活動(dòng)围来。 2:每個(gè)進(jìn)程之間是相互獨(dú)立...
    沒有夢(mèng)想_何必遠(yuǎn)方閱讀 866評(píng)論 0 3
  • 又來(lái)到了一個(gè)老生常談的問(wèn)題跺涤,應(yīng)用層軟件開發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢? 今天就這個(gè)問(wèn)題開始监透,來(lái)談?wù)劜?..
    tangsl閱讀 4,129評(píng)論 0 23
  • 進(jìn)程與線程的區(qū)別是很重要的一個(gè)知識(shí)點(diǎn)钦铁,也是面試中經(jīng)常問(wèn)到的。網(wǎng)上轉(zhuǎn)載博客痕跡明顯才漆,且千篇一律牛曹。我簡(jiǎn)單提取下,記錄下...
    AlbenXie閱讀 2,915評(píng)論 0 4
  • 別這樣對(duì)我說(shuō) 連我自己都開始懷疑我是不是生病 我需要住院?jiǎn)幔?我是真的精神有問(wèn)題嗎? 還是我是一個(gè)潛在的高卧妫患者遇...
    過(guò)期的饅頭閱讀 211評(píng)論 0 0
  • 17歲那年阅虫,我的夢(mèng)想是成為一名歌手。一個(gè)人站在舞臺(tái)中央不跟,身穿艷麗的服裝颓帝,腳著油光锃亮的皮鞋,梳著利落的發(fā)型,渾身上...
    超級(jí)天才多啦a夢(mèng)閱讀 435評(píng)論 0 0