一、建立程序
在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它...