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