新聞中心
linux進程中,線程是一種核心概念,它極大增強了程序的執(zhí)行效率,使一個程序可以同時處理多個任務(wù)。在Linux進程中,線程可以分為用戶態(tài)線程和內(nèi)核態(tài)線程。用戶態(tài)線程由用戶級的線程庫,如pthread庫或kthread庫,產(chǎn)生,運行在用戶態(tài),它由包含寄存器、PC、SP等寄存器的寄存器集組成,可以理解為程序的一條隱形流水線,減少中斷的發(fā)生,提高效率;而內(nèi)核態(tài)線程是內(nèi)核態(tài)既定的,當(dāng)調(diào)度cpu時,內(nèi)核會使用內(nèi)核態(tài)線程來處理任務(wù),所以一個內(nèi)核態(tài)線程會集成了運行環(huán)境、文件描述符等項,也就是說,一個內(nèi)核態(tài)線程就是一個輕量級進程。

專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計、成都網(wǎng)站制作服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)漣源免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了成百上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
對于Linux進程中的線程,其構(gòu)建其實是由內(nèi)核所支持,應(yīng)用程序只需要通過調(diào)用內(nèi)核提供的函數(shù)接口,就可以創(chuàng)建線程,比如Linux下的pthread_create,它的基礎(chǔ)實現(xiàn)是通過arch/x86/kernel/process.c中的clone系統(tǒng)調(diào)用,其主要構(gòu)建如下:
1.分配棧內(nèi)存,使用MM_alloc函數(shù)來獲取一個空閑指針:
struct mm_struct *mm_alloc(){/* Get a free_link from the dynamic memory allocator. */}
2.開始構(gòu)建新線程,使用do_clone函數(shù)來u聲明復(fù)制函數(shù):
int do_clone(int(*fn)(void* arg),void* arg,unsigned long flags){/* Declare do_exit() the thread-exit mechanism. */}
3.將新線程添加到調(diào)度器的就緒隊列:
int schedule_add_thread(struct thread_struct *thread){/* Add the thread to the scheduler’s ready-queue. */}
4.創(chuàng)建新的地址空間,使用mm_alloc函數(shù)來創(chuàng)建:
struct mm_struct *mm_alloc_area(struct mm_struct *mm,unsigned long start,unsigned long size){/* Allocate new address spaces for the process. */}
以上幾步就是Linux進程中的線程構(gòu)建的基本流程,當(dāng)然,同時還有其它的操作,如文件描述符的管理、中斷處理、調(diào)度等,為了使程序更充分利用多核特性,來提高運行效率,我們只要在應(yīng)用層調(diào)用上述API,就可以構(gòu)建出一個完整的多線程應(yīng)用程序。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
文章名稱:的構(gòu)成Linux進程中:線程的組成與構(gòu)建(linux進程中線程)
網(wǎng)站網(wǎng)址:http://m.fisionsoft.com.cn/article/dhdcopj.html


咨詢
建站咨詢
