SQL SERVER線(xiàn)程和纖程的區(qū)別
SQL SERVER線(xiàn)程和纖程都是非常重要的,下面就為將為您分析SQL SERVER線(xiàn)程和纖程的區(qū)別,在了解區(qū)別之前,先讓我們認(rèn)識(shí)一下什么是線(xiàn)程和纖程。
一、基本概念
(一)線(xiàn)程
SQL SERVER使用操作零碎的線(xiàn)程來(lái)執(zhí)行并發(fā)任務(wù)。在不使用纖程的情況下,SQL SERVER將啟動(dòng)線(xiàn)程,并由OS將線(xiàn)程分配給CPU,線(xiàn)程管理由OS內(nèi)核控制,當(dāng)一個(gè)線(xiàn)程完成退出CPU,其他線(xiàn)程調(diào)度占用該CPU時(shí),將發(fā)生一個(gè)上下文切換,這個(gè)切換是在應(yīng)用程序的用戶(hù)模式和線(xiàn)程管理的內(nèi)核模式之間的切換,所以需要付出一定的代價(jià),應(yīng)當(dāng)盡量避免這種切換
(二)纖程
為了減少上下文切換,引入纖程的概念,可以在SQL SERVER中啟用纖程,纖程是線(xiàn)程的子模塊,纖程由運(yùn)行在用戶(hù)模式下的代碼管理,所以切換纖程比切換進(jìn)程的代價(jià)少的多,因?yàn)槔w程模式不需要在將用戶(hù)模式和內(nèi)核模式中切換,而切換線(xiàn)程則需要這種轉(zhuǎn)換。
(三)兩者的區(qū)別
SQL SERVER管理纖程的調(diào)度,而OS管理線(xiàn)程的調(diào)度;線(xiàn)程模式里SQL SERVER為每個(gè)并發(fā)用戶(hù)創(chuàng)建配一個(gè)線(xiàn)程,而纖程模式中 SQL SERVER為每個(gè)CPU分配一個(gè)線(xiàn)程,并為每個(gè)并發(fā)用戶(hù)創(chuàng)建配一個(gè)纖程,一個(gè)線(xiàn)程中可以有多個(gè)纖程,纖程只在線(xiàn)程里切換,不用上下文切換 。
注意:SQL SERVER PERSONAL EDITION和 DESKTOP EDITION不支持纖程模式;WIN95,98不支持線(xiàn)程池
二、SQL SERVER對(duì)線(xiàn)程和纖程的管理
SQL SERVER既可以為用戶(hù)連接維護(hù)一個(gè)線(xiàn)程池,也可以維護(hù)一個(gè)纖程池(如果設(shè)置了纖程模式,則零碎只維護(hù)纖程池,不在是線(xiàn)程池)在連接池中,線(xiàn)程和纖程都看作工作纖程,并可以由MAX WORKER THREADS 選項(xiàng)來(lái)設(shè)置SQL SERVER可分配的線(xiàn)程或纖程的***數(shù)目,一般采用默認(rèn)值255 。
當(dāng)一個(gè)語(yǔ)句需要SQL SERVER執(zhí)行時(shí):
(1)如果線(xiàn)程池里用空閑的線(xiàn)程,SQL SERVER將為該語(yǔ)句分配一個(gè)線(xiàn)程
(2)如果線(xiàn)程池中沒(méi)有可供使用的空閑線(xiàn)程并且沒(méi)有達(dá)到***工作線(xiàn)程數(shù)量,SQL SERVER將為該命令創(chuàng)建新的工作線(xiàn)程
(3)如果到了***線(xiàn)程使用數(shù)量并且沒(méi)有空閑的線(xiàn)程,則進(jìn)程必須等待其他處理完成后釋放一個(gè)線(xiàn)程
【編輯推薦】
SQL Server同步復(fù)制的實(shí)現(xiàn)方法