楊冬黎,楊 斌
(1. 東北石油大學(xué) 計(jì)算機(jī)與信息技術(shù)學(xué)院,黑龍江 大慶 163318;2. 黑龍江省科學(xué)院技術(shù)物理研究所,哈爾濱150090)
放射源是核技術(shù)應(yīng)用的必然產(chǎn)物,是安全管理的重要組成部分,據(jù)不完全統(tǒng)計(jì)目前放射源使用數(shù)目年均以20%的速度在增加[1].為確保放射源得到有效安全的控制,放射性廢物和廢棄放射源得到安全儲(chǔ)存處置,減少其對(duì)人們?cè)诮?jīng)濟(jì)、健康等方面造成的危害,必須建立一套構(gòu)筑核與輻射安全監(jiān)管防護(hù)體系[2].在這種情況下,純?nèi)斯す芾砭S護(hù)幾乎不可能[3],所以放射源自動(dòng)監(jiān)控系統(tǒng)應(yīng)運(yùn)而生.
放射源自動(dòng)監(jiān)控系統(tǒng)能夠?qū)崿F(xiàn)對(duì)放射源及其相關(guān)設(shè)施的三位一體的監(jiān)控,即:實(shí)時(shí)自動(dòng)監(jiān)控輻射環(huán)境劑量率,追蹤放射源位置,監(jiān)視放射源周圍環(huán)境等,使管理部門及時(shí)掌控放射源的動(dòng)態(tài)信息;此外在核泄露發(fā)生時(shí),還可以部署應(yīng)急監(jiān)控設(shè)備,一方面可以作為警戒圍欄向誤入警戒范圍的人畜發(fā)出聲光報(bào)警,另一方面可以通過機(jī)械設(shè)施將應(yīng)急系統(tǒng)投入超出人體所能承受的高輻射劑量的區(qū)域,可以為應(yīng)急指揮現(xiàn)場(chǎng)提供準(zhǔn)確的劑量讀數(shù)參考.
隨著我國環(huán)境保護(hù)工作的發(fā)展,我國放射源監(jiān)測(cè)技術(shù)也取得了較大的進(jìn)步,但由于國內(nèi)放射源監(jiān)測(cè)網(wǎng)絡(luò)的搭建正處在探索階段[4],特別是在數(shù)據(jù)服務(wù)器研發(fā)方面多數(shù)停留在科學(xué)研究層面上,并沒有過多的理論可供參考,而且多數(shù)研制成型上位機(jī)只是針對(duì)特定需求而進(jìn)行開發(fā)的,功能單一、缺少靈活性.雖然國內(nèi)外有完成端口在信息通信方面應(yīng)用的實(shí)例,但當(dāng)前放射源監(jiān)測(cè)數(shù)據(jù)多通過串口或有線連接方式進(jìn)行傳輸,因此對(duì)基于無線網(wǎng)絡(luò)傳輸數(shù)據(jù)的研究,特別是對(duì)其優(yōu)化則具有較高難度.本文試圖在原有放射源自動(dòng)監(jiān)控系統(tǒng)中數(shù)據(jù)通信優(yōu)化方面展開研究.針對(duì)數(shù)據(jù)通信方式占用服務(wù)器系統(tǒng)資源多、并行處理能力差的缺陷,通過封裝IOCP模型來改善原有數(shù)據(jù)通信方式的不足,并對(duì)封裝IOCP模型優(yōu)化方案進(jìn)行了探索性研究.
IOCP又被稱作“I/O完成端口”,是微軟公司提出的一種運(yùn)行于Windows操作系統(tǒng)之上的各設(shè)備間進(jìn)行I/O處理的高效工作機(jī)制,設(shè)備可以是文件、命名管道、串口、并口等.IOCP是一種基于Windows內(nèi)核級(jí)的一種高效的通信處理機(jī)制,利用此機(jī)制對(duì)Winsock的通信進(jìn)行管理,通過指定數(shù)量的線程,處理重疊的I/O操作[5].
為了測(cè)試IOCP的工作性能,分別采用傳統(tǒng)Socket和完成端口兩種通信方式進(jìn)行的壓力測(cè)試(每秒發(fā)送200個(gè)數(shù)據(jù)包),圖1、2是在等同環(huán)境下得出的測(cè)試結(jié)果.從圖1中可以看出并發(fā)連接數(shù)越多IOCP的CPU占用率的優(yōu)勢(shì)越明顯,其CPU的占用率比傳統(tǒng)Socket小.圖2中可以看出連接數(shù)越多,IOCP在內(nèi)存占用方面的優(yōu)勢(shì)越明顯.所以采用IOCP工作模式的通信方式更適合大規(guī)模數(shù)據(jù)訪問環(huán)境.
圖1 傳統(tǒng)Socket與IOCP的CPU占用率對(duì)比圖
圖2 傳統(tǒng)Socket與IOCP的內(nèi)存使用情況對(duì)比圖
作為放射源自動(dòng)監(jiān)控系統(tǒng)中連接監(jiān)測(cè)終端和前端監(jiān)控系統(tǒng)的數(shù)據(jù)服務(wù)器,一方面負(fù)責(zé)快速響應(yīng)來自不同地點(diǎn),數(shù)以千計(jì)放射源監(jiān)測(cè)終端發(fā)送來的數(shù)據(jù)處理請(qǐng)求和指令請(qǐng)求;另一方面要將各終端工作運(yùn)行狀況及時(shí)反饋給前端控制系統(tǒng),此外,它還是整個(gè)系統(tǒng)的底層數(shù)據(jù)管理者.所以,數(shù)據(jù)服務(wù)器在整個(gè)系統(tǒng)運(yùn)行中發(fā)揮著舉足輕重的作用.放射源自動(dòng)監(jiān)控系統(tǒng)架構(gòu)圖如圖3所示.
圖3 放射源自動(dòng)監(jiān)控系統(tǒng)架構(gòu)圖
又因?yàn)閿?shù)據(jù)通信架起了前端控制系統(tǒng)和數(shù)采終端溝通的橋梁,缺少它前端控制系統(tǒng)就無法實(shí)現(xiàn)對(duì)監(jiān)測(cè)終端的有效監(jiān)控,監(jiān)測(cè)終端也無法將實(shí)時(shí)采集的監(jiān)測(cè)數(shù)據(jù)上傳到監(jiān)控中心,這樣整個(gè)監(jiān)測(cè)系統(tǒng)就失去了運(yùn)行的意義.所以如何建立數(shù)據(jù)服務(wù)器和監(jiān)測(cè)終端的數(shù)據(jù)通信,以及數(shù)據(jù)通信優(yōu)化的研究,是保證數(shù)據(jù)服務(wù)器高效運(yùn)行,乃至整個(gè)系統(tǒng)穩(wěn)定運(yùn)行的關(guān)鍵所在.
通過進(jìn)行放射源在線監(jiān)測(cè)系統(tǒng)研發(fā)過程中發(fā)現(xiàn),采用傳統(tǒng)通信方式進(jìn)行無線網(wǎng)絡(luò)數(shù)據(jù)傳輸時(shí),由于無線網(wǎng)絡(luò)受外界干擾較大,信號(hào)不穩(wěn)定,極易造成網(wǎng)絡(luò)傳輸中斷形成死鏈接.此外,多監(jiān)測(cè)終端的并發(fā)訪問也是對(duì)數(shù)據(jù)服務(wù)器工作能力的嚴(yán)峻考驗(yàn),如果數(shù)據(jù)服務(wù)器由于申請(qǐng)?jiān)L問量過大無法及時(shí)響應(yīng),致使終端始終處于等待狀態(tài)的現(xiàn)象時(shí)有發(fā)生,而且極易遭成網(wǎng)絡(luò)堵塞.這些問題的存在會(huì)最終導(dǎo)致數(shù)據(jù)服務(wù)器工作效率的極速下降,以及資源迅速耗竭而崩潰,進(jìn)而致使整個(gè)系統(tǒng)無法正常運(yùn)轉(zhuǎn).
一般通信模塊都是先創(chuàng)建一個(gè)accept線程等待一個(gè)用戶發(fā)出請(qǐng)求,并為每個(gè)用戶請(qǐng)求都創(chuàng)建一個(gè)新的線程.然后accept線程被掛起,等待下一個(gè)用戶請(qǐng)求的到來.但是這種通信模塊也有問題,問題的瓶頸就是應(yīng)用程序?yàn)槊總€(gè)用戶請(qǐng)求都創(chuàng)建了一個(gè)線程,而且這些線程不會(huì)被掛起,操作系統(tǒng)要花大量的時(shí)間來進(jìn)行線程調(diào)度,極大的浪費(fèi)了CPU資源[6].
針對(duì)上述問題和傳統(tǒng)放射源監(jiān)測(cè)系統(tǒng)中數(shù)據(jù)通信方面的優(yōu)化研究,以放射源數(shù)據(jù)在數(shù)據(jù)服務(wù)器和監(jiān)測(cè)終端間的數(shù)據(jù)交互和數(shù)據(jù)服務(wù)器內(nèi)部通信模塊的工作機(jī)制為主要研究對(duì)象,通過對(duì)完成端口的工作模式在相關(guān)領(lǐng)域應(yīng)用的研究,擬將這些技術(shù)與傳統(tǒng)數(shù)據(jù)通信技術(shù)進(jìn)行融和,相對(duì)于傳統(tǒng)的通信方式采用封裝了高效I/O模式的完成端口工作模式則更適合這種大訪問量的數(shù)據(jù)通信.其工作線程不會(huì)阻塞在費(fèi)時(shí)的I/O操作上,且可以為任何用戶的任何I/O操作服務(wù),使線程和CPU的利用率增高,且只需少數(shù)幾個(gè)線程就可以處理大量I/O請(qǐng)求,避免CPU花費(fèi)時(shí)間在大量線程調(diào)度上.具體情形是IOCP(I/O完成端口)模型根據(jù)用戶設(shè)定,事先開好多個(gè)線程存儲(chǔ)在線程池中.然后所有用戶的請(qǐng)求都投遞到一個(gè)完成端口上,然后各線程逐一地從完成端口中取得用戶消息并加以處理,這就避免了為每個(gè)用戶開一個(gè)線程,既減少了線程資源,又提高了線程的利用率,最終實(shí)現(xiàn)對(duì)數(shù)據(jù)通信的優(yōu)化.IOCP模型圖如圖4所示.
IOCP通信服務(wù)程序使用多個(gè)線程來實(shí)現(xiàn)高性能和高并發(fā)性,因此異步I/O請(qǐng)求的線程與異步處理I/O完成的線程可能不是同一個(gè)線程,工作者線程的完成順序是不確定的.換句話說,先完成異步I/O的可能后處理,后完成異步I/O的可能先處理.當(dāng)用戶請(qǐng)求投遞到IOCP來發(fā)送數(shù)據(jù)時(shí),等待發(fā)送的數(shù)據(jù)也被重新排序了.針對(duì)該問題,通過在緩沖類中增加讀寫順序號(hào),并且按照順序號(hào)來處理內(nèi)存.如果順序號(hào)相同,那么這個(gè)數(shù)據(jù)就可以進(jìn)行處理,否則,要將不正確的順序號(hào)的數(shù)據(jù)包進(jìn)行緩存,直到它之前的數(shù)據(jù)包處理完后才可以處理它.
圖4 IOCP模型
本文開發(fā)了一個(gè)基于IOCP的放射源自動(dòng)監(jiān)控系統(tǒng),該系統(tǒng)對(duì)傳統(tǒng)通信方式進(jìn)行了改進(jìn),以適應(yīng)系統(tǒng)的工作環(huán)境,從根本上發(fā)揮完成端口在處理大量并發(fā)訪問方面的優(yōu)勢(shì),提升數(shù)據(jù)服務(wù)器的吞吐量和工作效率,有利于工作人員對(duì)放射源的檢測(cè)與監(jiān)控,從而對(duì)監(jiān)控?cái)?shù)據(jù)進(jìn)行分析與總結(jié).
參考文獻(xiàn):
[1] 濮慶福,張小毛.從放射事故看如何完善放射源的管理[J].中國輻射衛(wèi)生,2006,15(2): 175-176.
[2] 郁 蕾,匡 恒.放射源遠(yuǎn)程自動(dòng)監(jiān)控管理體系的構(gòu)建[J].環(huán)境監(jiān)控與預(yù)警,2011,3(1): 30-32.
[3] JONES A, OHLUND J. Networking programming for Microsoft windows [M]. Washington: Microsoft Press, 2002:145-169.
[4] 劉 華,趙順平,梁梅燕,等.我國輻射環(huán)境監(jiān)測(cè)的回顧與展望[J].輻射防護(hù),2008,28(6): 375-376.
[5] 張靜華,張玉明.IOCP研究及在大規(guī)模網(wǎng)絡(luò)通信系統(tǒng)中的應(yīng)用[J].計(jì)算機(jī)與現(xiàn)代化,2004(9): 41-46.
[6] 陳和平,周靜寧,顧晉廣.IOCP機(jī)制與網(wǎng)絡(luò)代理服務(wù)器的實(shí)現(xiàn)方法[J].計(jì)算機(jī)應(yīng)用,2003,23(4): 109-110,114.