程序與執行緒 一

2021-07-02 16:56:13 字數 2498 閱讀 8465

一、建立程序

在linux系統中,只有fork()系統呼叫能夠建立程序。呼叫fork()函式之後,父程序將暫存器和堆疊內的內容全部賦值給子程序的暫存器和堆疊。

/*

* fork_test.c

* version 1

* created on: 2015-5-18

* author: wangth

*/#include #include int main ()

else

printf("統計結果是: %d/n",count);

return 0;

}

上述**的結果為
i am the child process, my process id is
統計結果是:1

i am the parent process, my process id is
統計結果是: 1
fork函式的返回值有3種情況 

(1) 在子程序內返回0

(2) 父程序內返回大於0

(3) 當建立程序出現錯誤時返回的值小於0

printf某些內容時,作業系統僅僅是把該內容放到了stdout的緩衝佇列裡了,並沒有實際的寫到螢幕上。但是,只要看到有/n 則會立即重新整理stdout,因此就馬上能夠列印了。

二、程序切換

程序切換的概念首先要涉及的是硬體上下文,每個程序都有自己的記憶體空間,但是程序必須共享cpu的暫存器,而程序在恢復執行前必須裝入暫存器的值就被稱為硬體上下文。

當磁碟產生乙個中斷時,而程序正在執行,此時,中斷硬體將程式計數器,程式狀態字,硬體上下文壓入到核心態的堆疊中,隨即,計算機,跳轉到中斷向量所指示的位址,這些操作都是由硬體完成的。隨後由中斷服務例程接管一切剩餘的工作。

三、執行緒

執行緒是mini版的程序,其存在理由有三:

(1)需要有一種並行實體共享同乙個記憶體空間和所有可用資料

(2)執行緒相對比較輕量級,所以建立和切換執行緒時比較輕鬆

(3)多執行緒在多cpu系統中真正實現了並行

(4)執行緒允許計算和io重疊執行,加快程式執行速度

web伺服器中的例子中:

乙個稱為分派程式的執行緒從網路中讀入工作請求。在檢查請求之後,分派執行緒挑選乙個空轉的工作執行緒,提交該請求,將此空轉執行緒從阻塞狀態轉為就緒狀態。

工作執行緒在被喚醒之後檢查所有執行緒都能夠訪問的web頁面快取記憶體,如果沒有則呼叫讀硬碟的系統呼叫read。在呼叫read時,阻塞這個執行緒直到該執行緒完成read操作。在阻塞該執行緒的同時,分配程式選擇執行緒就緒佇列中的另乙個執行緒進行操作。

而此時如果是單執行緒,則在阻塞該程序之後,伺服器空轉,不執行後續到來的操作,可見多執行緒加速了程式的執行。

程序共享物理記憶體和磁碟,而執行緒共享同乙個位址空間。

posix執行緒的一些函式

/*建立乙個執行緒,成功返回0,失敗返回error錯誤標誌*/

[cpp]view plain

copy

intpthread_create(pthread_t * 

thread

,            

//thread :執行緒id, unsigned long intxi型

const

pthread_attr_t *attr,       

//attr: 執行緒屬性引數,建立時將根據這個引數進行執行緒初始化

void

*(*start_routine)(

void

*), 

//start_routine:指向執行緒所呼叫的函式

void

*arg);                                

//arg :執行緒傳遞引數 

/* 終止執行緒,成功返回0,失敗返回error錯誤 標誌*/

[cpp]view plain

copy

void

pthread_exit(

void

*retval);      

//retval:返回值指標

/*等待直到id為th執行緒執行結束(合併乙個執行緒的意思)*/

[cpp]view plain

copy

intpthread_join(pthread_t th, 

void

**thread_return);  

// th:執行緒id

// thread_return :執行緒終止或取消時的返回值指標

/*獲取當前執行緒id*/

[cpp]view plain

copy

pthread_t pthread_self(

void

);   

程序與執行緒(一)

作業系統 程序假如有兩個程式a和b,程式a在執行到一半的過程中,需要讀取大量的資料輸入 i o操作 而此時cpu只能靜靜地等待任務a讀取完資料才能繼續執行,這樣就白白浪費了cpu資源。是不是在程式a讀取資料的過程中,讓程式b去執行,當程式a讀取完資料之後,讓 程式b暫停,然後讓程式a繼續執行?既然是...

程序與執行緒

程序 process 管理單元,管理分配應用程式的資料,的記憶體空間.執行緒 thread 執行單元,執行緒負責執行乙個預先編排好的 段,執行 棧是基於執行緒的.乙個應用程式啟動的時候,程序自動建立,並且會預設建立主線程,主線程負責執行main 方法.thread t new thread new ...

程序與執行緒

程序 是擁有資源的實體,包括 1。乙個程序有乙個虛擬位址空間,不同程序位於不同的 虛擬位址空間中。程序之間若要通訊,必須通過作業系統 的功能呼叫 ipc 2。程序擁有其他資源,例如開啟的檔案和i o裝置。程序結束時,作業系統會自動釋放該程序擁有的所有資源。例如,如果 open乙個檔案而不close它...