多線程技術(shù)在Delphi數(shù)據(jù)庫編程中的應(yīng)用

字號:

引言
    在傳統(tǒng)上,并發(fā)多任務(wù)的實現(xiàn)采用的是在操作系統(tǒng)級運行多個進(jìn)程,由操作系統(tǒng)按照一定的策略(優(yōu)先級、循環(huán)等),調(diào)度各個進(jìn)程的執(zhí)行,以限度的利用計算機(jī)的各種資源。在這種實現(xiàn)方法中最基本的調(diào)度單位是操作系統(tǒng)級上的進(jìn)程。由于各個進(jìn)程擁有自己獨立的運行環(huán)境(寄存器和地址空間等)。進(jìn)程與進(jìn)程之間的耦合關(guān)系差,并發(fā)性粒度過于粗糙,并發(fā)實現(xiàn)也不太容易。所以,除非特殊需要,一般的應(yīng)用設(shè)計都不采用這種技術(shù)。
    為了克服這些問題,近年來逐步發(fā)展了并發(fā)多線程的程序設(shè)計技術(shù)。從并發(fā)Ada、并發(fā)C等各種并發(fā)多任務(wù)的程序設(shè)計語言(這些語言中采用的雖然不是線程這個術(shù)語,但其基本思想是一樣的),到Mach、Chorus、Solaris System等各種采用了線程技術(shù)的系統(tǒng),多線程技術(shù)得到了迅速發(fā)展和日益廣泛的應(yīng)用。IEEE也推出了有關(guān)多線程程序設(shè)計的標(biāo)準(zhǔn)POSIX1003.4a。特別是在Window NT和Windows 98等流行操作系統(tǒng)中,采用了線程作為基本的調(diào)度單位,其API中也提供了有關(guān)線程操作的用戶程序接口。所有這些無疑都會促進(jìn)多線程技術(shù)在程序設(shè)計中被日益廣泛的采用。
    多線程技術(shù)的概念
    所謂線程(或稱線索,thread),指程序中的以單一的順序控制流。線程按順序執(zhí)行,即在一個線程中,一個時刻只能由一個執(zhí)行點。顯然,按傳統(tǒng)方法設(shè)計的程序,無論是單道執(zhí)行的程序,還是由多個進(jìn)程并發(fā)執(zhí)行的多道程序,就每個程序本身而言,都是由單線程組成的。
    多線程程序設(shè)計,就是使單個程序中包含并發(fā)執(zhí)行的多個線程。當(dāng)多線程程序執(zhí)行時,在該程序?qū)?yīng)的進(jìn)程中就有多個控制流在同時運行,即具有并發(fā)執(zhí)行的多個線程。在一個進(jìn)程中包含并發(fā)執(zhí)行的多個控制流,而不是把多個控制流一一分散在多個進(jìn)程中,這是多線程程序設(shè)計與并發(fā)多進(jìn)程程序設(shè)計截然不同之處。這就決定了二者之間雖然在概念上有許多相通之處,但實現(xiàn)方法則是完全不同。
    分別示意了把一個任務(wù)按兩個并發(fā)進(jìn)程和兩個并發(fā)線程分解后的情況。比較這兩張圖中進(jìn)程與進(jìn)程之間、線程與線程之間的關(guān)系可以看出,進(jìn)程之間的關(guān)系比較疏遠(yuǎn),各個進(jìn)程是在自己獨有的地址空間內(nèi)執(zhí)行,不但寄存器和堆棧是獨有的,動態(tài)數(shù)據(jù)堆、靜態(tài)數(shù)據(jù)區(qū)和程序代碼也相互獨立。而線程之間的關(guān)系則要緊密的多。雖然各線程為保持自己的控制流而獨有寄存器和堆棧,但由于各線程從屬于同一進(jìn)程,它們共享同一地址空間,所以動態(tài)堆、靜態(tài)數(shù)據(jù)區(qū)及程序代碼則是各線程共有的。
    許多多任務(wù)操作系統(tǒng)限制用戶能擁有的最多進(jìn)程數(shù)目,如很多Unix版本的典型值為20個左右,這對許多并發(fā)應(yīng)用來說遠(yuǎn)遠(yuǎn)不夠。而對多線程技術(shù)來說,不存在這樣的數(shù)目限額。