網站首頁 編程語言 正文
1、進程與線程的概念
來源百度百科:
進程(Process) 是計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。 在當代面向線程設計的計算機結構中,進程是線程的容器。程序是指令、數據及其組織形式的描述,進程是程序的實體。是計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。程序是指令、數據及其組織形式的描述,進程是程序的實體。
線程(thread) 是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發多個線程,每條線程并行執行不同的任務。
2、什么是進程管理
到底什么是進程呢?
進程是正在執行的一個程序或命令,每一個進程都是一個運行的實體,都有自己的地址空間,并占用一定的系統資源。
那么什么是程序呢?
程序是人使用計算機語言編寫的可以實現特定目標或解決特定問題的代碼集合。
那我們換一種說法:
程序是人使用計算機語言編寫的,可以實現一定功能,并且可以執行的代碼集合。進程是正在執行中的程序。程序被執行時,執行人的權限和屬性、以及程序的代碼都會被加載如內存,操作系統給這個進程分配一個ID號,我們成為PID(進程ID)
3、進程管理的作用
判斷服務器健康狀態:運維工程師最主要的工作就是保證服務器安全穩定的運行。理想的狀態是,在服務器出現問題,但是還沒有造成服務器宕機或停止服務時,就人為干預解決了問題。進程管理最主要的工作就是判斷服務器當前運行是否健康,是否需要人為干預。如果服務器的CPU占用率、內存占用率過高,就需要人為介入解決問題了。
查看系統中所有的進程:我們需要查看系統中所有正在運行的進程,通過這些進程可以判斷系統中運行了哪些服務,是否有非法服務運行。
殺死進程:這是進程管理中最不常用的手段,當我需要停止服務時,會通過正確關閉命令來停止服務(如apache
服務可以通過service httpd stop
來關閉)。只有當正確終止進程的手段失效的情況下,才會考慮使用kill
命令殺死進程(你不是殺手,不要什么進程都用kill來終止,否則非常容易導致服務器崩潰)
4、Linux進程的幾種狀態
D
:不可被喚醒的睡眠狀態,通常用于I/O
情況。
R
:該進程正在運行。
S
:該進程在睡眠狀態,可被喚醒。
T
:停止狀態,可能是在后臺暫?;蜻M程在除錯狀態。
W
:內存交互狀態(從2.6內核開始無效)。
X
:死掉的進程(應該不會出現)。
Z
:僵尸進程。進程已經終止,但是部分程序還在內存當中。
<
:高優先級(以下狀態在BSD格式當中出現)。
N
:低優先級。
L
:被鎖入內存。
s
:包含子進程。
l
:多線程(小寫L)。
+
:位于后臺。
5、進程與線程的關系
(1)線程與進程的關系
比如電腦同時進行著200個進程:
線程與進程概念線程: 每個進程中至少包含一個線程,而這些線程都在共享進程的資源空間等,當線程發生變化的時候只會引起CPU執行的過程發生變化,不會改變進程所擁有的資源。同理一個程序中至少包含一個進程。進程中執行運算的最小單位,亦是執行處理機調度的基本單位進程: 每個進程都有自己的地址空間,資源如,內存,I/O,CPU,同一個進程里的 線程共享本進程里的地址空間,那能不能使用別人家進程的地址空間呢,顯然這是不可以的。由于進程的獨立性,當某一個進程崩潰之后,在保護模式下不會對別的進程進行影響。資源分配的基本單位,運行調度的基本單位,系統中并發執行的單位。
兩者的比較調度
同一個進程中,線程的切換不會引起進程的切換。
由一個進程的線程切換到另一個線程的進程時,引起進程的切換。并發性
進程可以并發執行,而一個進程中的線程也可以并發執行。擁有的資源
一般來說,線程并不會擁有自己的資源,但是它可以訪問自己本進程中的資源。比如,一個進程打開的文件等,進程中的其他線程是可以共享的。
(2)總結
我們簡單總結下:
進程:指在系統中正在運行的一個應用程序,程序一旦運行就是進程,進程是資源分配的最小單位。線程:系統分配處理器時間資源的基本單元,或者說進程之內獨立執行的一個單元執行流,線程是程序執行的最小單位。
原文鏈接:https://www.cnblogs.com/liuyuelinfighting/p/15692465.html
相關推薦
- 2022-09-06 python使用seaborn繪圖直方圖displot,密度圖,散點圖_python
- 2022-01-10 Layui碰上Thymeleaf的解析問題
- 2022-06-23 分布式醫療掛號系統整合Gateway網關解決跨域問題_其它綜合
- 2023-02-08 Pytorch中torch.repeat_interleave()函數使用及說明_python
- 2022-10-01 Qt+FFMPEG實現循環解碼詳解_C 語言
- 2023-01-30 python多進程程序打包成exe的問題_python
- 2022-10-06 Android?Fragment源碼分析Add方法_Android
- 2022-04-01 k8s ip地址變了 報錯Error getting node“ err=“node \“maste
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支