1. 程式人生 > >執行緒上下文切換和程序上下文切換的區別

執行緒上下文切換和程序上下文切換的區別

程序切換分兩步
1.切換頁目錄以使用新的地址空間
2.切換核心棧和硬體上下文。

對於linux來說,執行緒和程序的最大區別就在於地址空間。
對於執行緒切換,第1步是不需要做的,第2是程序和執行緒切換都要做的。所以明顯是程序切換代價大

執行緒上下文切換和程序上下問切換一個最主要的區別是執行緒的切換虛擬記憶體空間依然是相同的,但是程序切換是不同的。這兩種上下文切換的處理都是通過作業系統核心來完成的。核心的這種切換過程伴隨的最顯著的效能損耗是將暫存器中的內容切換出。

另外一個隱藏的損耗是上下文的切換會擾亂處理器的快取機制。簡單的說,一旦去切換上下文,處理器中所有已經快取的記憶體地址一瞬間都作廢了。還有一個顯著的區別是當你改變虛擬記憶體空間的時候,處理的頁表緩衝(processor’s Translation Lookaside Buffer (TLB))或者相當的神馬東西會被全部重新整理,這將導致記憶體的訪問在一段時間內相當的低效。但是線上程的切換中,不會出現這個問題。

相關推薦

執行上下文切換程序上下文切換區別

程序切換分兩步1.切換頁目錄以使用新的地址空間2.切換核心棧和硬體上下文。對於linux來說,執行緒和程序的最大區別就在於地址空間。對於執行緒切換,第1步是不需要做的,第2是程序和執行緒切換都要做的。所以明顯是程序切換代價大 執行緒上下文切換和程序上下問切換一個最主要的區別是執行緒的切換虛擬記憶體空間依

結合中斷上下文切換程序上下文切換分析Linux核心的一般執行過程

# 結合中斷上下文切換和程序上下文切換分析Linux核心的一般執行過程 [toc] ## 一. 實驗準備 1. 詳細要求 > 結合中斷上下文切換和程序上下文切換分析Linux核心一般執行過程 > > - 以fork和execve系統呼叫為例分析中斷上下文的切換 > - 分析ex

執行 -- run()方法start()方法的區別

一. 直接呼叫run()方法 public class Two_Thread implements Runnable { public static void main(String[] args) { // TODO Auto-generated method

Java併發程式設計基礎//程序:每個程序都有獨立的程式碼資料空間(程序上下文),程序間的切換開銷比較大,一個程序包含1-n個執行緒 //執行緒:同一類執行緒共享程式碼資料空間,每個執行緒擁有獨立的執行棧程式計

1.實現多執行緒的兩種方式: (1)繼承Thread類; (2)實現Runnable介面 //程序:每個程序都有獨立的程式碼和資料空間(程序上下文),程序間的切換開銷比較大,一個程序包含1-n個執行緒 //執行緒:同一類執行緒共享程式碼和資料空間,每個執行緒擁有獨立的執行

linux程序切換程序上下文,thread_union資料結構(task_union V0.11)

程序是作業系統中很重要的一個抽象,是對程式的一次執行例項的抽象。每個程序執行在自己的上下中,其上下文包括被程序正文所定義的程序狀態、程序的全域性使用者變數和資料結構、它使用的暫存器的值、儲存在它的程序表項的值以及它的使用者棧和核心棧的內容。當出現執行中程序發生中斷或異常核心

Java執行的6種狀態及切換

原文:https://blog.csdn.net/pange1991/article/details/53860651#commentBox Java中執行緒的狀態分為6種。     1. 初始(NEW):新建立了一個執行緒物件,但還沒有呼叫start()方法。

【筆記】程序執行的概念異同

一、程序 1.程序就是一個正在執行的程式。程序是作業系統分配資源的最小單位。 2.程序的缺點: (1)程序佔有系統資源; (2)程序的切換給作業系統帶來了額外的開銷; (3)建立新程序會把父程序的資源複製一份到子程序,如果建立多個程序,會佔用大量資源; (4)程序間的資料共享

Java執行的6種狀態及切換(透徹講解)-本文系轉載

Java執行緒的6種狀態及切換(透徹講解) 轉自:https://mp.weixin.qq.com/s/hUOwck4lMp7c_rvY4TTeQQ Java中執行緒的狀態分為6種。 1.  初始(NEW):新建立了一個執行緒物件,但還沒有呼叫start()方法。

安卓多執行間通訊程序之間通訊有什麼不同?分別怎麼實現?

**當一個程式第一次啟動的時候,Android會去動一個Linux進行和一個主執行緒,預設情況下,所有改程式元件都將在該程序和執行緒中 執行,同時Android會為每個應用程式分配一個單獨的Linux使用者,Android會盡量保留一個正在執行的程序,只在記憶體資源出現不足時,Andro

Java執行的6種狀態及切換(透徹講解)

來源:https://blog.csdn.net/pange1991/article/details/53860651 Java中執行緒的狀態分為6種。 1.初始(NEW):新建立了一個執行緒物件,但還沒有呼叫start()方法。 2.執行(RUNNABLE):J

Java執行的6種狀態及切換(透徹講解)

Java中執行緒的狀態分為6種。 1. 初始(NEW):新建立了一個執行緒物件,但還沒有呼叫start()方法。 2. 執行(RUNNABLE):Java執行緒中將就緒(ready)和執行中(running)兩種

java中程序執行以及執行的狀態方法

程序是cpu資源分配的最小單位,執行緒是cpu排程的最小單位。 一個程式至少有一個程序,一個程序至少有一個執行緒.  執行緒的劃分尺度小於程序,使得多執行緒程式的併發性高。 另外,程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大地提高了程式的執行效率。

Java多執行執行的狀態以及之間的切換(轉)

 博主最近幾天在面試的時候,被面試官問到了Java多執行緒的幾種狀態,無疑博主已經把該忘記的都忘記了,很是尷尬,回到家中在網上找到一篇部落格,博主認真閱讀了此文章,寫的很詳細,現轉載分享給大家: Java中執行緒的狀態分為6種。     1. 初始(N

Java執行面試題之程序執行區別

1.定義 程序:具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位. 執行緒:程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一

Java執行的6種狀態及切換(生命週期)

轉自:https://blog.csdn.net/pange1991/article/details/53860651/ Java中執行緒的狀態分為6種。 1. 初始(NEW):新建立了一個執行緒物件,但還沒有呼叫start()方法。2. 執行(RUNNABLE):Java執行緒中將就緒(r

python併發程式設計之多程序、多執行、非同步協程

一、多執行緒   多執行緒就是允許一個程序記憶體在多個控制權,以便讓多個函式同時處於啟用狀態,從而讓多個函式的操作同時執行。即使是單CPU的計算機,也可以通過不停地在不同執行緒的指令間切換,從而造成多執行緒同時執行的效果。   多執行緒相當於一個併發(concunrr

Java執行的5種狀態及切換(透徹講解)

Java中的執行緒的生命週期大體可分為5種狀態。 ①NEW:這種情況指的是,通過New關鍵字建立了Thread類(或其子類)的物件 ②RUNNABLE:這種情況指的是Thread類的物件呼叫了start()方法,這時的執行緒就等待時間片輪轉到自己這,以便獲得CPU;第二種情況是執行緒在處於RUNNABLE狀

程序執行的總結區別

對於程序和執行緒的區別,很多面試或者筆試都有涉及到。我想很多朋友跟我一樣,對他們都僅限於一些很粗很廣的定義和區分,對於很多細節一下子回答出來還是有一定難度的。下面我將對程序和執行緒做一個系統的總結,供大家參考。如文中有不妥的地方,歡迎大家指正。  一、概念上區分 程式:

面試題:1,程序執行區別?什麼時候用程序?什麼時候用執行?為什麼你的專案中用的是執行?為什麼不用程序?如果只有程序,對你這個專案有沒有影響?

答:首先得知道什麼是程序什麼是執行緒,我的理解是程序是指在系統中正在執行的一個應用程式;程式一旦執行就是程序,或者更專業化來說:程序是指程式執行時的一個例項,即它是程式已經執行到課中程度的資料結構的彙集。從核心的觀點看,程序的目的就是擔當分配系統資源(CPU時間、記憶體等)的

iOS 開發多執行及其程序執行的介紹理解

iOS開發多執行緒篇—多執行緒簡單介紹 一、程序和執行緒 1.什麼是程序 程序是指在系統中正在執行的一個應用程式 每個程序之間是獨立的,每個程序均執行在其專用且受保護的記憶體空間內 比如同時開啟QQ、Xcode,系統就會分別啟動2個程序 通過“活動監視器”可以檢視Mac系統中所開啟的程序 2.什