付承彪
(曲靖師范學(xué)院 計算機科學(xué)與工程學(xué)院,云南 曲靖655011)
近年來,隨著IP網(wǎng)絡(luò)的飛速發(fā)展,基于IP承載網(wǎng)絡(luò)的下一代網(wǎng)絡(luò)(NGN)已被業(yè)界廣泛認(rèn)可。NGN網(wǎng)絡(luò)基于軟交換技術(shù)[1],因為它具有開放的體系架構(gòu),高效的擴展性和靈活性[2],并能提供給用戶更加個性化的服務(wù),在整個通信網(wǎng)絡(luò)中得到了廣泛的應(yīng)用。
我們?nèi)绻岩粋€正在運行的軟件看做一個進(jìn)程,就像一個大的管道,這個管道不運送什么東西,但里面有很多個小的管道,每個小管負(fù)責(zé)的東西不同,而這些小管道就可以看做是一個個線程[3]。如果運行的是一個單線程的程序的話,而這個線程需要連續(xù)運行幾個功能時,如果正在運行的那個功能因碰到一個等待或者睡眠的指令的話,他就會停在那里不做任何事,此是這個CPU就空閑在那里,同時還會等待知道程序重新繼續(xù)運行。如果使用多線程技術(shù),那么可以把這幾個功能同時(并不是絕對意義上的同時)運行,當(dāng)其中一個功能遇到睡眠指令的時候,其他沒有睡眠的繼續(xù)運行,這個可以花更短的時間,讓CPU更充分的被利用來完成需要的事情,線程通常共享一個代碼區(qū),但有各自獨立的數(shù)據(jù)存儲區(qū)。
線程總是在某個進(jìn)程環(huán)境中創(chuàng)建的,而且它的整個壽命期都在進(jìn)程中。進(jìn)程是不活潑的,從來不執(zhí)行任何東西,它只是線程的容器。線程用于描述進(jìn)程中的運行路徑,每當(dāng)進(jìn)程創(chuàng)建時,系統(tǒng)就要創(chuàng)建一個主線程[4]。多線程的設(shè)計在NGN網(wǎng)絡(luò)測試儀中最重要的是能夠?qū)崿F(xiàn)多項任務(wù)的“同時”進(jìn)行,以至多個客戶可以同時進(jìn)行讀操作,而不會彼此影響。
本軟件將采取多線程的結(jié)構(gòu):除主線程外,主要的輔助線程有:數(shù)據(jù)讀取線程、文件保存線程、粗解碼線程和CDR合成線程。
主線程負(fù)責(zé)與用戶交互,包括軟件的啟動、中止、響應(yīng)用戶輸入、顯示界面顯示和刷新等。主線程具有調(diào)度其它輔助線程的作用。
數(shù)據(jù)讀取線程負(fù)責(zé)從硬件接收數(shù)據(jù),為了在高速率時不丟包,這個線程被設(shè)置為一個高優(yōu)先級的線程。該線程的作用是響應(yīng)硬件驅(qū)動的消息,從硬件讀取信令消息數(shù)據(jù),把接收到的消息數(shù)據(jù)以一定的格式存放到數(shù)據(jù)緩沖區(qū)中,該緩沖直接映射到硬盤文件上面。
粗解碼線程為數(shù)據(jù)緩沖區(qū)中的新消息,建立消息索引,并進(jìn)行粗解碼和呼叫合成。處理完一條消息后,此線程向主線程發(fā)送界面顯示或刷新消息,接著處理下一條新消息(如果有消息)。粗解碼結(jié)果存放在粗解碼結(jié)果緩沖區(qū)或文件中。
文件保存線程負(fù)責(zé)把數(shù)據(jù)保存在文件,后臺把消息緩沖區(qū)中的原始消息數(shù)據(jù)存儲在磁盤上,用于減少內(nèi)存消耗,而且用于將來的離線分析。擬采取的方法如下:在內(nèi)存中分配一個足夠大的緩沖區(qū),用來防止消息到來速度過快造成的消息緩沖區(qū)溢出;另一方面,當(dāng)消息緩沖區(qū)的占用超過一定比例時,就將數(shù)據(jù)緩沖區(qū)的內(nèi)容保存至硬盤數(shù)據(jù)文件,騰出所占內(nèi)存空間,此過程由數(shù)據(jù)存盤線程在后臺完成。整個軟件的多線程體系結(jié)構(gòu)如圖1所示:
圖1 多線程體系結(jié)構(gòu)
實時采集的情況和離線回放的情況有較大不同,在離線的情況下,數(shù)據(jù)不用進(jìn)行讀取線程,而是存儲在存儲設(shè)備中,通過文件映射將數(shù)據(jù)直接映射到數(shù)據(jù)緩沖區(qū)中。
在創(chuàng)建了多個線程后,對資源訪問的沖突問題也隨之產(chǎn)生。從上圖1中可以看到數(shù)據(jù)讀取線程、粗解碼線程、存盤線程都會訪問存放原始數(shù)據(jù)的緩存;合成線程和CDR信息存盤線程會同時訪問CDR信息緩存等。
線程需要下面兩種情況下相互進(jìn)行通信:
(1)當(dāng)有多個線程訪問共享資源而不使資源被破壞;
(2)當(dāng)一個線程需要將某個任務(wù)已經(jīng)完成的情況通知另外一個或多個線程;
為了達(dá)到上述要求,需要建立一種機制,即線程同步,來避免對資源訪問的沖突,令一個線程能在一定時間獨占某一資源進(jìn)行訪問,限制其他線程在這段時間對同一資源的訪問權(quán)。
在一些極端情況下,如果數(shù)據(jù)到達(dá)速率很高,遠(yuǎn)大于粗解碼速率,即粗解碼線程需要對已存盤的數(shù)據(jù)文件進(jìn)行操作,必須定義并保存好粗解碼消息。
本文首先概述了多線程技術(shù),然后在分析NGN中多線程技術(shù)的基礎(chǔ)上,給出了NGN網(wǎng)絡(luò)中的多線程應(yīng)用。本文所闡述的多線程技術(shù),在NGN現(xiàn)網(wǎng)中的應(yīng)用有一定的現(xiàn)實意義。
[1]付承彪,蔡昌許,陶燕林.H.248協(xié)議在NGN網(wǎng)絡(luò)中的應(yīng)用分析[J].曲靖師范學(xué)院學(xué)報,2013,32(06):48-51.
[2]代孝東,陳文星.基于SIP和H.248協(xié)議的混合軟交換技術(shù)的研究[J].計算機科學(xué),2011,38(10A):336-337轉(zhuǎn)352.
[3]田安紅,付承彪,李麗.基于Socket的網(wǎng)絡(luò)通信過程的研究[J].曲靖師范學(xué)院,2013,32(06):45-47.
[4]董浩,張玲.軟交換核心網(wǎng)的安全解決方案研究[J].山西電子技術(shù),2013(01):69-71.