了解多線程之前 首先說一下 程序 進程 和 線程的區別啊
程序我們都知道,它是一連串的動也不動的指令集,不來也不去,靜靜的做個美男子讓機器去解析.
而進程呢, 我們的機器 我們的操作系統要運行,需要調度上面的程序,既然有調度的這個動作,那聽上去他就是一個動態的概念.
而線程 就是在進程內的多條執行路徑,也就是說在一個進程內 可能有多個程序需要調度,那就有多條線程,
就好比我們要去灌溉一片農田, 我們首先要有一個進程開啟,要行動起來,而期間呢,有需要鋪設水袋的人,有需要配備農機的人,有需要觀看農田的人,這些可能協同在這一個進程中.
總結就是在進程內開辟多條線程. 比如 在一個類里面 有 a ,b,c三個方法,a 執行的同時,b和c 也可以進行.而不是 a執行完 b才能執行.
進程是程序的一次動態執行過程,他占用一定的地址空間.
每個進程都是獨立的,有三部分組成:cpu/data/code
缺點:內存浪費,cpu的負擔
so 開辟線程,其實就是一個輕量級的進程,因為它也是開辟了一條單一的路徑的.
所以一個進程可以擁有多個并行的線程.
一個進程中的線程共享相同的內存單元,內存地址空間->可以訪問相同的變量和對象,而且他們從同一堆中分配對象->通信 數據交換 同步操作
但這有可能對統一資源進行征用,會出現并發性問題.
進程和線程的區別: 官方說法
根本區別:進程是作為資源分配的單位, 線程是調度和執行的單位.
從開銷上來說:每個進程都有獨立的代碼和數據空間(進程上下文),進程間的切換會有較大開銷. 線程可看成是輕量級的進程,同一類線程共享代碼和數據空間. 每個線程都有獨立的運行棧 和 程序計數器(pc),線程切換的開銷小.
所處環境:在操作系統中能同時運行多個任務(程序) 線程 ->在同意應用程序中有多個的有順序的執行代碼.
分配內存:系統在運行的時候 為不同的進程分配不同的內存空間. 除了cpu以外 不會為線程在分配內存,因為本身線程就是在進程內,他們只是共享這些內存資源
包含關系:沒有線程的進程是可以被看作單線程的,如果一個進程內有多個線程,那么執行過程不是一條線的,是多條線共同完成的.
線程是進程的一部分,所以線程有的時候被稱為是輕量級的進程.
新聞熱點
疑難解答