程序、进程以及线程的爱恨情仇
很多人都聽(tīng)說(shuō)過(guò)程序,也聽(tīng)過(guò)程序員這種職業(yè)!那么什么是程序呢?又為什么叫程序員呢?
還有那傳說(shuō)中的進(jìn)程以及線(xiàn)程又是什么鬼?
他們之間又有怎樣的瓜葛呢?請(qǐng)聽(tīng)我娓娓道來(lái)…!
大象裝冰箱,開(kāi)始第一步:
程序是什么?
程序是為實(shí)現(xiàn)特定目標(biāo)或解決特定問(wèn)題,而用計(jì)算機(jī)語(yǔ)言編寫(xiě)的命令序列的集合;
一個(gè)程序應(yīng)該包括以下兩個(gè)方面的內(nèi)容:
1.對(duì)數(shù)據(jù)的描述
在程序中要制定數(shù)據(jù)的類(lèi)型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu);
2.對(duì)操作的描述
即操作步驟,也就是算法;一般分為系統(tǒng)程序和應(yīng)用程序兩大類(lèi);
(計(jì)算機(jī)中的程序在港澳臺(tái)地區(qū)成為程式)
程序就是為使電子計(jì)算機(jī)執(zhí)行一個(gè)或多個(gè)操作或執(zhí)行某一任務(wù)按序設(shè)計(jì)的計(jì)算機(jī)指令的集合由程序計(jì)算器控制。程序也是用匯編語(yǔ)言、高級(jí)語(yǔ)言等開(kāi)發(fā)編制出來(lái)的可以運(yùn)行的文件;
在計(jì)算機(jī)中稱(chēng)可執(zhí)行文件;
這就是度娘為我們準(zhǔn)備的超標(biāo)準(zhǔn)的答案;你懂了嗎?
什么?你還不懂;
這么說(shuō)吧!(開(kāi)始我的表演…)
程序是啥?打開(kāi)手機(jī)、電腦等等,你看到的每一個(gè)OOXX的圖標(biāo)都是程序;
程序是啥?程序就好比裝著一大堆圣旨的木頭箱!
箱子可以有很多種,里面的圣旨也可以有很多張;
圣旨代表什么呢?
那就是命令!這命令也有大小之分,就好比“天子(程序員)”與“諸侯(計(jì)算機(jī))”;
這諸侯一聲令下,他管那片一切綠燈;這就形成了程序;
但,天子一聲令下,那就有了天高皇帝遠(yuǎn)的“佳話(huà)”了;
執(zhí)行便是程序(可執(zhí)行文件【可以運(yùn)行的文件】);不執(zhí)行便不是(不可執(zhí)行文件);
(不同程序設(shè)計(jì)語(yǔ)言編寫(xiě)的程序就如同不同國(guó)家的圣旨一樣);
程序員的存在就相當(dāng)于天子的存在;
這么一想,我還有點(diǎn)小驕傲;我正在從事的職業(yè)還是皇族呢!
程序員.equals(天子);true;
那進(jìn)程和線(xiàn)程又是什么嘞?
我找到了以下內(nèi)容:
進(jìn)程是什么?
執(zhí)行中的程序叫做進(jìn)程(Process),是一個(gè)動(dòng)態(tài)的概念,是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位。現(xiàn)代的操作系統(tǒng)都可以同時(shí)啟動(dòng)多個(gè)進(jìn)程。比如:我們?cè)谟每峁仿?tīng)音樂(lè),也可以使用 eclipse 寫(xiě)代碼,也可以同時(shí)用瀏覽器查看網(wǎng)頁(yè)。進(jìn)程具有如下特點(diǎn):
3.多任務(wù)(Multitasking)操作系統(tǒng)將 CPU 時(shí)間動(dòng)態(tài)地劃分給每個(gè)進(jìn)程,操作系統(tǒng)同時(shí)執(zhí)行多個(gè)進(jìn)程,每個(gè)進(jìn)程獨(dú)立運(yùn)行。以進(jìn)程的觀(guān)點(diǎn)來(lái)看,它會(huì)以為自己獨(dú)占 CPU 的使用權(quán)。
4.進(jìn)程的查看
? Windows 系統(tǒng): Ctrl+Alt+Del,啟動(dòng)任務(wù)管理器即可查看所有進(jìn)程。
? Unix 系統(tǒng): ps or top。
線(xiàn)程是什么?
一個(gè)進(jìn)程可以產(chǎn)生多個(gè)線(xiàn)程。同多個(gè)進(jìn)程可以共享操作系統(tǒng)的某些資源一樣,同一進(jìn)程
的多個(gè)線(xiàn)程也可以共享此進(jìn)程的某些資源(比如:代碼、數(shù)據(jù)),所以線(xiàn)程又被稱(chēng)為輕量級(jí)
進(jìn)程(lightweight process)。
變量和對(duì)象,而且它們從同一堆中分配對(duì)象并進(jìn)行通信、數(shù)據(jù)交換和同步操作。
4.由于線(xiàn)程間的通信是在同一地址空間上進(jìn)行的,所以不需要額外的通信機(jī)制,這就使得通信更簡(jiǎn)便而且信息傳遞的速度也更快。
5.線(xiàn)程的啟動(dòng)、中斷、消亡,消耗的資源非常少。
你懂了嗎?
停…別說(shuō)what說(shuō)國(guó)語(yǔ);
那進(jìn)程到底是啥嘞?
就好比天子要向區(qū)諸侯國(guó)下達(dá)了選秀女的一堆圣旨;(這天子有強(qiáng)迫癥!!)
這一大堆的圣旨一到,諸侯這一看,整吧!全諸侯國(guó)就開(kāi)始安裝圣旨上寫(xiě)的要求去找人;
這個(gè)實(shí)施圣旨的動(dòng)作就是進(jìn)程;
那線(xiàn)程又是啥嘞?
就好比諸侯把銀子都發(fā)下去了,手底下的人也急了,這是天子選秀啊!那得塊那得好啊!
大伙一合計(jì),分頭干!這一分頭干就產(chǎn)生了線(xiàn)程!
線(xiàn)程和進(jìn)程的區(qū)別
?每個(gè)進(jìn)程都有獨(dú)立的代碼和數(shù)據(jù)空間(進(jìn)程上下文),進(jìn)程間的切換會(huì)有較大的開(kāi)銷(xiāo)。
?線(xiàn)程可以看成是輕量級(jí)的進(jìn)程,屬于同一進(jìn)程的線(xiàn)程共享代碼和數(shù)據(jù)空間,每個(gè)線(xiàn)
程有獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器(PC),線(xiàn)程切換的開(kāi)銷(xiāo)小。
?線(xiàn)程和進(jìn)程最根本的區(qū)別在于:進(jìn)程是資源分配的單位,線(xiàn)程是調(diào)度和執(zhí)行的單位。
?多進(jìn)程: 在操作系統(tǒng)中能同時(shí)運(yùn)行多個(gè)任務(wù)(程序)。
?多線(xiàn)程: 在同一應(yīng)用程序中有多個(gè)順序流同時(shí)執(zhí)行。
?線(xiàn)程是進(jìn)程的一部分,所以線(xiàn)程有的時(shí)候被稱(chēng)為輕量級(jí)進(jìn)程。
?一個(gè)沒(méi)有線(xiàn)程的進(jìn)程是可以被看作單線(xiàn)程的,如果一個(gè)進(jìn)程內(nèi)擁有多個(gè)線(xiàn)程,進(jìn)程的執(zhí)行過(guò)程不是一條線(xiàn)(線(xiàn)程)的,而是多條線(xiàn)(線(xiàn)程)共同完成的。
?系統(tǒng)在運(yùn)行的時(shí)候會(huì)為每個(gè)進(jìn)程分配不同的內(nèi)存區(qū)域,但是不會(huì)為線(xiàn)程分配內(nèi)存(線(xiàn)程所使用的資源是它所屬的進(jìn)程的資源),線(xiàn)程組只能共享資源。那就是說(shuō),除了 CPU 之外(線(xiàn)程在運(yùn)行的時(shí)候要占用 CPU 資源),計(jì)算機(jī)內(nèi)部的軟硬件資源的分配與線(xiàn)程無(wú)關(guān),線(xiàn)程只能共享它所屬進(jìn)程的資源。
進(jìn)程與程序的區(qū)別
程序是一組指令的集合,它是靜態(tài)的實(shí)體,沒(méi)有執(zhí)行的含義。而進(jìn)程是一個(gè)動(dòng)態(tài)的實(shí)體,
有自己的生命周期。一般說(shuō)來(lái),一個(gè)進(jìn)程肯定與一個(gè)程序相對(duì)應(yīng),并且只有一個(gè),但是一個(gè)
程序可以有多個(gè)進(jìn)程,或者一個(gè)進(jìn)程都沒(méi)有。除此之外,進(jìn)程還有并發(fā)性和交往性。簡(jiǎn)單地
說(shuō),進(jìn)程是程序的一部分,程序運(yùn)行的時(shí)候會(huì)產(chǎn)生進(jìn)程。
最后說(shuō)一下他們之間的關(guān)系;
就好像一把裝彈待發(fā)的散彈槍:程序就是子彈,進(jìn)程就是子彈出膛到擊中目標(biāo)的過(guò)程,線(xiàn)程就是那顆顆鋼珠;
沒(méi)有線(xiàn)程可以是單進(jìn)程,沒(méi)有線(xiàn)程可以是還沒(méi)運(yùn)行的程序;但相反就不行了;
感謝收看;如果能幫到您是我最大的榮幸;
總結(jié)
以上是生活随笔為你收集整理的程序、进程以及线程的爱恨情仇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JavaScript实现京东购物车页基础
- 下一篇: 最简单实现多线程的方法(Thread)