谈谈进程和线程的区别
進程和線程的區別是面試提問頻率最高的問題,沒有之一。
我們首先了解一下進程和線程的概念。
進程:一個進程就是一個正在執行程序的實例。
線程:操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。
?
這就是進程和線程。從他們的概念擴展開來,我們可以這樣回答進程和線程的區別:
1、一個程序至少有一個進程,一個進程至少有一個線程,線程是輕量級的進程。
2、進程在執行過程中擁有獨立的存儲空間,而多個線程共享內存。
3、進程是系統資源分配的最小單位,線程是CPU調度的最小單位。
A process is an active program i.e. a program that is under execution. It is more than the program code as it includes the program counter, process stack, registers, program code etc. Compared to this, the program code is only the text section.
A thread is a lightweight process that can be managed independently by a scheduler. It improves the application performance using parallelism. A thread shares information like data segment, code segment, files etc. with its peer threads while it contains its own registers, stack, counter etc.
?
這樣的回答可能能夠通過面試官的考核,但并沒有真正點明問題所在。
比如在Linux系統上,實際上線程的概念并不存在。
線程僅僅被視為一個與其他進程共享資源的進程。
而Windows則提供了線程專有的機制。
?
進程的概念是比較明確的,它就對應著程序的一次運行。
那么線程到底是啥?
CSAPP把線程稱為進程的一個執行單元。
維基百科把線程稱為操作系統能夠進行運算調度的最小單位。
?
聽起來還是云里霧里的。
那么,要解答線程“是”什么,不如先看看線程“有”什么。
線程的所有物,主要就是以下幾部分:
程序計數器,一組寄存器、棧和狀態字。
另外,它還共享地址空間、全局變量、打開的文件等,也就是進程的資源。
?
我們可以看到,這些共享的資源,主要是內存相關的。
而線程獨有的這些東西,則對應著CPU的執行邏輯。
?
因此,我對線程的理解就是:被進程管理的,共享資源的一次完整的CPU執行邏輯組合。
?
轉載于:https://www.cnblogs.com/sh1296/p/10791213.html
總結
以上是生活随笔為你收集整理的谈谈进程和线程的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flink源码分析 - 源码构建
- 下一篇: Ant Design Pro+Elect