免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
線程概述

4.9 線程(Thread)

引入線程的目的是簡(jiǎn)化線程間的通信,以小的開(kāi)銷(xiāo)來(lái)提高進(jìn)程的并發(fā)程度。


4.9.1 線程的概念

  
線程 有時(shí)稱(chēng)輕量級(jí)進(jìn)程。 進(jìn)程中的一個(gè)運(yùn)行實(shí)體,是一個(gè)CPU調(diào)度單位, 資源的擁有者還是進(jìn)程或稱(chēng)任務(wù)。

   事實(shí)上,引入線程主要是為了提高系統(tǒng)的執(zhí)行效率,減少處理機(jī)的空轉(zhuǎn)時(shí)間和調(diào)度切換(保護(hù)現(xiàn)場(chǎng)信息)的時(shí)間,以及便于系統(tǒng)管理。
  

             
      進(jìn)程與線程之間關(guān)系
   進(jìn)程和線程的比較
 進(jìn)程是資源分配的基本單位。所有與該進(jìn)程有關(guān)的資源,都被記錄在進(jìn)程控制塊PCB中。以表示該進(jìn)程擁有這些資源或正在使用它們。另外,進(jìn)程也是搶占處理機(jī)的調(diào)度單位,它擁有一個(gè)完整的虛擬地址空間。與進(jìn)程相對(duì)應(yīng),線程與資源分配無(wú)關(guān),它屬于某一個(gè)進(jìn)程,并與進(jìn)程內(nèi)的其他線程一起共享進(jìn)程的資源。

 

 當(dāng)進(jìn)程發(fā)生調(diào)度時(shí),不同的進(jìn)程擁有不同的虛擬地址空間,而同一進(jìn)程內(nèi)的不同線程共享同一地址空間。

 

 線程只由相關(guān)堆棧(系統(tǒng)?;蛴脩魲#┘拇嫫骱途€程控制表TCB組成。寄存器可被用來(lái)存儲(chǔ)線程內(nèi)的局部變量,但不能存儲(chǔ)其他線程的相關(guān)變量。

 

 發(fā)生進(jìn)程切換與發(fā)生線程切換時(shí)相比較,進(jìn)程切換時(shí)涉及到有關(guān)資源指針的保存以及地址空間的變化等問(wèn)題;線程切換時(shí),由于同不進(jìn)程內(nèi)的線程共享資源和地址 空間,將不涉及資源信息的保存和地址變化問(wèn)題,從而減少了操作系統(tǒng)的開(kāi)銷(xiāo)時(shí)間。而且,進(jìn)程的調(diào)度與切換都是由操作系統(tǒng)內(nèi)核完成,而線程則既可由操作系統(tǒng)內(nèi) 核完成,也可由用戶程序進(jìn)行。

               


                    圖   多線程與進(jìn)程之間的關(guān)系

 4.9.2 線程的適用范圍

    典型的應(yīng)用

   

 1.服務(wù)器中的文件管理或通信控制

   

 2.前后臺(tái)處理

   

 3.異步處理

  
                     

4.9.3 線程的執(zhí)行特性

 
線程有3個(gè)基本狀態(tài):執(zhí)行、就緒、阻塞

  線程有5種基本操作:

 派生:線程在進(jìn)程內(nèi)派生出來(lái),它即可由進(jìn)程派生,也可由線程派生。
 阻塞(Block):如果一個(gè)線程在執(zhí)行過(guò)程中需要等待某個(gè)事件發(fā)生,則被阻塞。
 激活(unblock):如果阻塞線程的事件發(fā)生,則該線程被激活并進(jìn)入就緒隊(duì)列。
 調(diào)度(schedule):選擇一個(gè)就緒線程進(jìn)入執(zhí)行狀態(tài)。
 
結(jié)束(Finish):如果一個(gè)線程執(zhí)行結(jié)束,它的寄存器上下文以及堆棧內(nèi)容等將被釋放。
            

     圖  線程的狀態(tài)與操作
線程的另一個(gè)執(zhí)行特性是同步。線程中所使用的同步控制機(jī)制與進(jìn)程中所使用的同步控制機(jī)制相同。

4.9.4 線程的分類(lèi)

  
線程有兩個(gè)基本類(lèi)型:

   

 用戶級(jí)線程:管理過(guò)程全部由用戶程序完成,操作系統(tǒng)內(nèi)核心只對(duì)進(jìn)程進(jìn)行管理。

   

 系統(tǒng)級(jí)線程(核心級(jí)線程):由操作系統(tǒng)內(nèi)核進(jìn)行管理。操作系統(tǒng)內(nèi)核給應(yīng)用程序提供相應(yīng)的系統(tǒng)調(diào)用和應(yīng)用程序接口API,以使用戶程序可以創(chuàng)建、執(zhí)行、撤消線程。

線程舉例

1. SUN Solaris 2.3

  
²        Solaris支持內(nèi)核線程、輕權(quán)進(jìn)程和用戶線程。一個(gè)進(jìn)程可有大量用戶線程;大量用戶線程復(fù)用少量的輕權(quán)進(jìn)程,輕權(quán)進(jìn)程與內(nèi)核線程一一對(duì)應(yīng)。
 ¨
        
用戶級(jí)線程在調(diào)用核心服務(wù)時(shí)(如文件讀寫(xiě)),需要“捆綁(bound)”在一個(gè)LWP上。永久捆綁(一個(gè)LWP固定被一個(gè)用戶級(jí)線程占用,該LWP移到LWP池之外)和臨時(shí)捆綁(從LWP池中臨時(shí)分配一個(gè)未被占用的LWP)。
 
²        在調(diào)用系統(tǒng)服務(wù)時(shí),如果所有LWP已被其他用戶級(jí)線程所占用(捆綁),則該線程阻塞直到有可用的LWP。
 
²        如果LWP執(zhí)行系統(tǒng)線程時(shí)阻塞(如read()調(diào)用),則當(dāng)前捆綁在LWP上的用戶級(jí)線程也阻塞。
                                  
                               圖  用戶線程、輕權(quán)進(jìn)程和核心線程的關(guān)系

 ¨
       
有關(guān)的C庫(kù)函數(shù)
        /* 創(chuàng)建用戶級(jí)線程             */
    int
thr_create(void *stack_base, size_t stack_size,
    void *(*start_routine)(void *), void *arg, long flags,
    thread_t *new_thread_id); 

  其中flags包括:THR_BOUND(永久捆綁), THR_NEW_LWP(創(chuàng)建新LWP放入LWP池),若兩者同時(shí)指定則創(chuàng)建兩個(gè)新LWP,一個(gè)永久捆綁而另一個(gè)放入LWP池。
 ²        有關(guān)的系統(tǒng)調(diào)用
   /*
在當(dāng)前進(jìn)程中創(chuàng)建LWP     */
  int _lwp_create(ucontext_t *contextp, unsigned long flags,

  lwpid_t *new_lwp_id);
  /*
構(gòu)造LWP上下文          */
  void _lwp_makecontext(ucontext_t *ucp,
   void (*start_routine)( void *), void *arg,
  void *private, caddr_t stack_base, size_t stack_size);
  /*
注意:沒(méi)有進(jìn)行“捆綁”操作的系統(tǒng)調(diào)用 */

    2. Windows NT

  
²        NT線程的上下文包括:寄存器、核心、線程環(huán)境塊和用戶。
 ²        NT線程狀態(tài)
   (1)         就緒狀態(tài):進(jìn)程已獲得除處理機(jī)外的所需資源,等待執(zhí)行。
   (2)
        
備用狀態(tài):特定處理器的執(zhí)行對(duì)象,系統(tǒng)中每個(gè)處理器上只能有一個(gè)處于備用狀態(tài)的線程。
 
(3)         運(yùn)行狀態(tài):完成描述表切換,線程進(jìn)入運(yùn)行狀態(tài),直到內(nèi)核搶先、時(shí)間片用完、線程終止或進(jìn)行等待狀態(tài)。
 
(4)         等待狀態(tài):線程等待對(duì)象句柄,以同步它的執(zhí)行。等待結(jié)束時(shí),根據(jù)優(yōu)先級(jí)進(jìn)入運(yùn)行、就緒狀態(tài)。
 
(5)         轉(zhuǎn)換狀態(tài):線程在準(zhǔn)備執(zhí)行而其內(nèi)核堆棧處于外存時(shí),線程進(jìn)入轉(zhuǎn)換狀態(tài);當(dāng)其內(nèi)核堆棧調(diào)回內(nèi)存,線程進(jìn)入就緒狀態(tài)。
 
(6)         終止?fàn)顟B(tài):線程執(zhí)行完就進(jìn)入終止?fàn)顟B(tài);如執(zhí)行體有一指向線程對(duì)象的指針,可將線程對(duì)象重新初始化,并再次使用。

  

                          圖  Windows NT的線程狀態(tài)
  ²        NT線程的有關(guān)API
   
  

         CreateThread()函數(shù)在調(diào)用進(jìn)程的地址空間上創(chuàng)建一個(gè)線程,以執(zhí)行指定的函數(shù);返回值為所創(chuàng)建線程的句柄。
 
        
ExitThread()函數(shù)用于結(jié)束本線程。
 
        
SuspendThread()函數(shù)用于掛起指定的線程。
 
        
ResumeThread()函數(shù)遞減指定線程的掛起計(jì)數(shù),掛起計(jì)數(shù)為0時(shí),線程恢復(fù)執(zhí)行。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
多線程編程
進(jìn)程和線程基礎(chǔ)知識(shí)全家桶,30 張圖一套帶走
linux 的進(jìn)程與線程
Linux內(nèi)核線程之深入淺出
linux進(jìn)程描述符
linux 下多線程編程
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服