freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

iocp服務(wù)器主控中心的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文(編輯修改稿)

2025-07-16 14:09 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 參數(shù)指定的是一個(gè)現(xiàn)有的完成端口。CompletionKey(完成鍵)參數(shù)則指定要與某個(gè)特定套接字句柄關(guān)聯(lián)在一起的“單句柄數(shù)據(jù)”;在這個(gè)參數(shù)中,應(yīng)用程序可保存與一個(gè)套接字對(duì)應(yīng)的任意類型的信息。之所以把它叫作“單句柄數(shù)據(jù)”,是由于它只對(duì)應(yīng)著與那個(gè)套接字句柄關(guān)聯(lián)在一起的數(shù)據(jù)。可將其作為指向一個(gè)數(shù)據(jù)結(jié)構(gòu)的指針,來(lái)保存套接字句柄;在那個(gè)結(jié)構(gòu)中,同時(shí)包含了套接字的句柄,以及與那個(gè)套接字有關(guān)的其他信息。就象本章稍后還會(huì)講述的那樣,為完成端口提供服務(wù)的線程例程可通過(guò)這個(gè)參數(shù),取得與套接字句柄有關(guān)的信息。根據(jù)我們到目前為止學(xué)到的東西,首先來(lái)構(gòu)建一個(gè)基本的應(yīng)用程序框架。程序清單89向大家闡述了如何使用完成端口模型,來(lái)開發(fā)一個(gè)回應(yīng)(或“反射”)服務(wù)器應(yīng)用。在這個(gè)程序中,我們基本上按下述步驟行事:1)創(chuàng)建一個(gè)完成端口。第四個(gè)參數(shù)保持為0,指定在完成端口上,每個(gè)處理器一次只允許執(zhí)行一個(gè)工作者線程。2)判斷系統(tǒng)內(nèi)到底安裝了多少個(gè)處理器。3)創(chuàng)建工作者線程,根據(jù)步驟2)得到的處理器信息,在完成端口上,為已完成的I/O請(qǐng)求提供服務(wù)。在這個(gè)簡(jiǎn)單的例子中,我們?yōu)槊總€(gè)處理器都只創(chuàng)建一個(gè)工作者線程。這是由于事先已預(yù)計(jì)到,到時(shí)不會(huì)有任何線程進(jìn)入“掛起”狀態(tài),造成由于線程數(shù)量的不足,而使處理器空閑的局面(沒(méi)有足夠的線程可供執(zhí)行)。調(diào)用CreateThread函數(shù)時(shí),必須同時(shí)提供一個(gè)工作者例程,由線程在創(chuàng)建好執(zhí)行。本節(jié)稍后還會(huì)詳細(xì)討論線程的職責(zé)。4)準(zhǔn)備好一個(gè)監(jiān)聽套接字,在端口5150上監(jiān)聽進(jìn)入的連接請(qǐng)求。5)使用accept函數(shù),接受進(jìn)入的連接請(qǐng)求。6)創(chuàng)建一個(gè)數(shù)據(jù)結(jié)構(gòu),用于容納“單句柄數(shù)據(jù)”,同時(shí)在結(jié)構(gòu)中存入接受的套接字句柄。7)調(diào)用CreateIoComletionPort,將自accept返回的新套接字句柄同完成端口關(guān)聯(lián)到一起。通過(guò)完成鍵(CompletionKey)參數(shù),將單句柄數(shù)據(jù)結(jié)構(gòu)傳遞給CreateIoComletionPort。8)開始在已接受的連接上進(jìn)行I/O操作。在此,我們希望通過(guò)重疊I/O機(jī)制,在新建的套接字上投遞一個(gè)或多個(gè)異步WSARecv或WSASend請(qǐng)求。這些I/O請(qǐng)求完成后,一個(gè)工作者線程會(huì)為I/O請(qǐng)求提供服務(wù),同時(shí)繼續(xù)處理未來(lái)的I/O請(qǐng)求,稍后便會(huì)在步驟3)指定的工作者例程中,體驗(yàn)到這一點(diǎn)。9)重復(fù)步驟5)~8),直至服務(wù)器中止。服務(wù)器程序利用線程技術(shù)響應(yīng)客戶請(qǐng)求已經(jīng)司空見慣,可能您認(rèn)為這樣做效率已經(jīng)很高,但您有沒(méi)有想過(guò)優(yōu)化一下使用線程的方法。該文章將向您介紹服務(wù)器程序如何利用線程池來(lái)優(yōu)化性能并提供一個(gè)簡(jiǎn)單的線程池實(shí)現(xiàn)。線程池的技術(shù)背景在面向?qū)ο缶幊讨?,?chuàng)建和銷毀對(duì)象是很費(fèi)時(shí)間的,因?yàn)閯?chuàng)建一個(gè)對(duì)象要獲取內(nèi)存資源或者其它更多資源。在Java中更是如此,虛擬機(jī)將試圖跟蹤每一個(gè)對(duì)象,以便能夠在對(duì)象銷毀后進(jìn)行垃圾回收。所以提高服務(wù)程序效率的一個(gè)手段就是盡可能減少創(chuàng)建和銷毀對(duì)象的次數(shù),特別是一些很耗資源的對(duì)象創(chuàng)建和銷毀。如何利用已有對(duì)象來(lái)服務(wù)就是一個(gè)需要解決的關(guān)鍵問(wèn)題,其實(shí)這就是一些池化資源技術(shù)產(chǎn)生的原因。比如大家所熟悉的數(shù)據(jù)庫(kù)連接池正是遵循這一思想而產(chǎn)生的,本文將介紹的線程池技術(shù)同樣符合這一思想。目前,一些著名的大公司都特別看好這項(xiàng)技術(shù),并早已經(jīng)在他們的產(chǎn)品中應(yīng)用該技術(shù)。比如IBM的WebSphere,IONA的Orbix2000在SUN的Jini中,Microsoft的MTS(Microsoft Transaction ),COM+等?,F(xiàn)在您是否也想在服務(wù)器程序應(yīng)用該項(xiàng)技術(shù)?線程池技術(shù)如何提高服務(wù)器程序的性能我所提到服務(wù)器程序是指能夠接受客戶請(qǐng)求并能處理請(qǐng)求的程序,而不只是指那些接受網(wǎng)絡(luò)客戶請(qǐng)求的網(wǎng)絡(luò)服務(wù)器程序。多線程技術(shù)主要解決處理器單元內(nèi)多個(gè)線程執(zhí)行的問(wèn)題,它可以顯著減少處理器單元的閑置時(shí)間,增加處理器單元的吞吐能力。但如果對(duì)多線程應(yīng)用不當(dāng),會(huì)增加對(duì)單個(gè)任務(wù)的處理時(shí)間??梢耘e一個(gè)簡(jiǎn)單的例子:假設(shè)在一臺(tái)服務(wù)器完成一項(xiàng)任務(wù)的時(shí)間為TT1創(chuàng)建線程的時(shí)間T2在線程中執(zhí)行任務(wù)的時(shí)間,包括線程間同步所需時(shí)間T3線程銷毀的時(shí)間顯然T=T1+T2+T3。注意這是一個(gè)極度簡(jiǎn)化的假設(shè)??梢钥闯鯰1,T3是多線程本身的帶來(lái)的開銷,我們渴望減少T1,T3所用的時(shí)間,從而減少T的時(shí)間。但一些線程的使用者并沒(méi)有注意到這一點(diǎn),所以在程序中頻繁的創(chuàng)建或銷毀線程,這導(dǎo)致T1和T3在T中占有相當(dāng)比例。顯然這是突出了線程的弱點(diǎn)(T1,T3),而不是優(yōu)點(diǎn)(并發(fā)性)。線程池技術(shù)正是關(guān)注如何縮短或調(diào)整T1,T3時(shí)間的技術(shù),從而提高服務(wù)器程序性能的。它把T1,T3分別安排在服務(wù)器程序的啟動(dòng)和結(jié)束的時(shí)間段或者一些空閑的時(shí)間段,這樣在服務(wù)器程序處理客戶請(qǐng)求時(shí),不會(huì)有T1,T3的開銷了。線程池不僅調(diào)整T1,T3產(chǎn)生的時(shí)間段,而且它還顯著減少了創(chuàng)建線程的數(shù)目。在看一個(gè)例子:假設(shè)一個(gè)服務(wù)器一天要處理50000個(gè)請(qǐng)求,并且每個(gè)請(qǐng)求需要一個(gè)單獨(dú)的線程完成。我們比較利用線程池技術(shù)和不利于線程池技術(shù)的服務(wù)器處理這些請(qǐng)求時(shí)所產(chǎn)生的線程總數(shù)。在線程池中,線程數(shù)一般是固定的,所以產(chǎn)生線程總數(shù)不會(huì)超過(guò)線程池中線程的數(shù)目或者上限(以下簡(jiǎn)稱線程池尺寸),而如果服務(wù)器不利用線程池來(lái)處理這些請(qǐng)求則線程總數(shù)為50000。一般線程池尺寸是遠(yuǎn)小于50000。所以利用線程池的服務(wù)器程序不會(huì)為了創(chuàng)建50000而在處理請(qǐng)求時(shí)浪費(fèi)時(shí)間,從而提高效率。這些都是假設(shè),不能充分說(shuō)明問(wèn)題,下面我將討論線程池的簡(jiǎn)單實(shí)現(xiàn)并對(duì)該程序進(jìn)行對(duì)比測(cè)試,以說(shuō)明線程技術(shù)優(yōu)點(diǎn)及應(yīng)用領(lǐng)域。 socket通訊技術(shù)分析主控在Socket通信中主要用到了TCP和UDP兩種網(wǎng)絡(luò)協(xié)議,主機(jī)存活性探測(cè)用到的是UDP協(xié)議,主要有以下幾個(gè)特點(diǎn):(1)UDP是一個(gè)無(wú)連接協(xié)議,傳輸數(shù)據(jù)之前源端和終端不建立連接,當(dāng)它想傳送時(shí)就簡(jiǎn)單地去抓取來(lái)自應(yīng)用程序的數(shù)據(jù),并盡可能快地把它扔到網(wǎng)絡(luò)上。在發(fā)送端,UDP傳送數(shù)據(jù)的速度僅僅是受應(yīng)用程序生成數(shù)據(jù)的速度、計(jì)算機(jī)的能力和傳輸帶寬的限制;在接收端,UDP把每個(gè)消息段放在隊(duì)列中,應(yīng)用程序每次從隊(duì)列中讀一個(gè)消息段。(2)由于傳輸數(shù)據(jù)不建立連接,因此也就不需要維護(hù)連接狀態(tài),包括收發(fā)狀態(tài)等,因此一臺(tái)服務(wù)機(jī)可同時(shí)向多個(gè)客戶機(jī)傳輸相同的消息。(3)UDP信息包的標(biāo)題很短,只有8個(gè)字節(jié),相對(duì)于TCP的20個(gè)字節(jié)信息包的額外開銷很小。(4)吞吐量不受擁擠控制算法的調(diào)節(jié),只受應(yīng)用軟件生成數(shù)據(jù)的速率、傳輸帶寬、源端和終端主機(jī)性能的限制。任務(wù)的分發(fā)和sensor狀態(tài)上報(bào)使用的是TCP協(xié)議,正式基于TCP協(xié)議可靠這一特點(diǎn),從任務(wù)分發(fā)到評(píng)估結(jié)束整個(gè)通訊過(guò)程才得以連續(xù)的完成。另外,還采用了socket異步通知事件WSAAsyncSelect()和IO重疊操作(IO完成端口)。 ADO數(shù)據(jù)庫(kù)技術(shù)分析數(shù)據(jù)庫(kù)訪問(wèn)技術(shù),主要是ADO(ActiveX Data Objects)技術(shù),通過(guò)查詢安全策略信息庫(kù),可以方便程序得到系統(tǒng)的策略配置列表信息及每個(gè)策略的描述信息。ADO是Microsoft為最新和最強(qiáng)大的數(shù)據(jù)訪問(wèn)范例OLE(Object Linking and Embedding)DB而設(shè)計(jì)的,是一個(gè)便于使用的應(yīng)用程序?qū)咏涌凇DO使您能夠編寫應(yīng)用程序以通過(guò)OLEDB提供者訪問(wèn)和操作數(shù)據(jù)庫(kù)服務(wù)器中的數(shù)據(jù)。ADO最主要的優(yōu)點(diǎn)是易于使用、速度快、內(nèi)存支出少和磁盤遺跡小。ADO在關(guān)鍵的應(yīng)用方案中使用最少的網(wǎng)絡(luò)流量,并且在前端和數(shù)據(jù)源之間使用最少的層數(shù),所有這些都是為了提供輕量、高性能的接口。之所以稱為ADO,是用了一個(gè)比較熟悉的暗喻,OLE自動(dòng)化接口。OLEDB是一組組件對(duì)象模型”(COM)接口,是新的數(shù)據(jù)庫(kù)低層接口,它封裝了ODBC的功能,并以統(tǒng)一的方式訪問(wèn)存儲(chǔ)在不同信息源中的數(shù)據(jù)。OLEDB是Microsoft UDA(Universal Data Access)策略的技術(shù)基礎(chǔ)。OLEDB為任何數(shù)據(jù)源提供了高性能的訪問(wèn),這些數(shù)據(jù)源包括關(guān)系和非關(guān)系數(shù)據(jù)庫(kù)、電子郵件和文件系統(tǒng)、文本和圖形、自定義業(yè)務(wù)對(duì)象等等。也就是說(shuō),OLEDB并不局限于ISAM、Jet甚至關(guān)系數(shù)據(jù)源,它能夠處理任何類型的數(shù)據(jù),而不考慮它們的格式和存儲(chǔ)方法。在實(shí)際應(yīng)用中,這種多樣性意味著可以訪問(wèn)駐留在Excel電子數(shù)據(jù)表、文本文件、電子郵件/目錄服務(wù)甚至郵件服務(wù)器,諸如Microsoft Exchange中的數(shù)據(jù)。但是,OLEDB應(yīng)用程序編程接口的目的是為各種應(yīng)用程序提供最佳的功能,它并不符合簡(jiǎn)單化的要求。您需要的API應(yīng)該是一座連接應(yīng)用程序和OLEDB的橋梁,這就是ActiveX Data Objects(ADO)。ADO庫(kù)包含三個(gè)基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。_ConnectionPtr接口返回一個(gè)記錄集或一個(gè)空指針。通常使用它來(lái)創(chuàng)建一個(gè)數(shù)據(jù)連接或執(zhí)行一條不返回任何結(jié)果的SQL語(yǔ)句,如一個(gè)存儲(chǔ)過(guò)程,使用_ConnectionPtr接口返回一個(gè)記錄集不是一個(gè)好的使用方法。通常同CDatabase一樣,使用它創(chuàng)建一個(gè)數(shù)據(jù)連接,然后使用其它對(duì)象執(zhí)行數(shù)據(jù)輸入輸出操作。_CommandPtr接口返回一個(gè)記錄集。它提供了一種簡(jiǎn)單的方法來(lái)執(zhí)行返回記錄集的存儲(chǔ)過(guò)程和SQL語(yǔ)句。在使用_CommandPtr接口時(shí),你可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用連接串。如果你只執(zhí)行一次或幾次數(shù)據(jù)訪問(wèn)操作,后者是比較好的選擇。但如果你要頻繁訪問(wèn)數(shù)據(jù)庫(kù),并要返回很多記錄集,那么,你應(yīng)該使用全局_ConnectionPtr接口創(chuàng)建一個(gè)數(shù)據(jù)連接,然后使用_CommandPtr接口執(zhí)行存儲(chǔ)過(guò)程和SQL語(yǔ)句。_RecordsetPtr是一個(gè)記錄集對(duì)象。與以上兩種對(duì)象相比,它對(duì)記錄集提供了更多的控制功能,如記錄鎖定,游標(biāo)控制等。同_CommandPtr接口一樣,它不一定要使用一個(gè)已經(jīng)創(chuàng)建的數(shù)據(jù)連接,可以用一個(gè)連接串代替連接指針賦給_RecordsetPtr的connection成員變量,讓它自己創(chuàng)建數(shù)據(jù)連接。如果你要使用多個(gè)記錄集,最好的方法是同Command對(duì)象一樣使用已經(jīng)創(chuàng)建了數(shù)據(jù)連接的全局_ConnectionPtr接口,然后使用_RecordsetPtr執(zhí)行存儲(chǔ)過(guò)程和SQL語(yǔ)句。在一般的應(yīng)用程序里,開發(fā)出來(lái)的產(chǎn)品滿足了當(dāng)時(shí)的設(shè)計(jì)需求。然而,用戶往往會(huì)提出新的功能需求或者不同的用戶需要特定的功能。為了滿足這些需求而不對(duì)程序做完全的重寫或者再次經(jīng)歷開發(fā)、編譯、測(cè)試、分發(fā)這一過(guò)程,動(dòng)態(tài)鏈接庫(kù)技術(shù)的應(yīng)用是不錯(cuò)的選擇。動(dòng)態(tài)鏈接庫(kù)的應(yīng)用使得可以在不修改主程序二進(jìn)制代碼的情況為軟件增加新的功能,滿足不同客戶的需求。簡(jiǎn)單地說(shuō),動(dòng)態(tài)鏈接庫(kù)這個(gè)框架模型是在主程序在啟動(dòng)的時(shí)候查找其功能并加載其功能,讓動(dòng)態(tài)鏈接庫(kù)與主程序?qū)崿F(xiàn)互操作。很多應(yīng)用,比如Microsoft Office產(chǎn)品,使用類似的技術(shù)允許第三方開發(fā)出與Microsoft Office共同工作的產(chǎn)品,從而擴(kuò)充其功能。在本系統(tǒng)的開發(fā)過(guò)程中采用動(dòng)態(tài)鏈接庫(kù)(Dynamiclinklibrary, dll)來(lái)實(shí)現(xiàn)動(dòng)態(tài)鏈接庫(kù)。動(dòng)態(tài)鏈接庫(kù)(Dynamic link library)[]是一種具有一定功能的可執(zhí)行軟件模塊。動(dòng)態(tài)鏈接庫(kù)是Microsoft 。Windows本身就是由DLL組成的。而且MFC DLL Wizard和MFC庫(kù)也對(duì)DLL有了更多很好的支持。在VisualC++。通過(guò)以上的分析,在本系統(tǒng)中就是采用DLL來(lái)實(shí)現(xiàn)動(dòng)態(tài)鏈接庫(kù)技術(shù)的,程序把需要掃描的各模塊分別封裝在各自的動(dòng)態(tài)鏈接庫(kù)中,有主程序?qū)λ鼈冞M(jìn)行調(diào)用。為了方便軟件的使用,可能系統(tǒng)管理員僅僅希望掃描系統(tǒng)的某一部分或者某個(gè)方面,所以系統(tǒng)設(shè)計(jì)中不可避免的有系統(tǒng)的軟件使用者對(duì)掃描漏洞模塊進(jìn)行選擇的功能。根據(jù)系統(tǒng)管理員對(duì)掃描選項(xiàng)的選擇,加載不同的組件,即動(dòng)態(tài)鏈接庫(kù),對(duì)主機(jī)系統(tǒng)進(jìn)行掃描。這樣不僅方便系統(tǒng)編程的實(shí)現(xiàn),而且在系統(tǒng)啟動(dòng)時(shí)可以不加載不必要的動(dòng)態(tài)鏈接庫(kù)。最后,動(dòng)態(tài)鏈接庫(kù)技術(shù)有利于系統(tǒng)的更新、升級(jí)。目前系統(tǒng)中采用的掃描算法是最基本的,在判斷系統(tǒng)是否安全的準(zhǔn)確性上還有很大的不足,為了便于程序的升級(jí),系統(tǒng)中采用了配置文件相關(guān)的方法來(lái)獲得動(dòng)態(tài)鏈接庫(kù)的加載項(xiàng),以便將來(lái)在升級(jí)掃描技術(shù)時(shí)最大限度的復(fù)用原有程序。以下是使用動(dòng)態(tài)鏈接庫(kù)來(lái)實(shí)現(xiàn)的動(dòng)態(tài)鏈接庫(kù)遵循的一般步驟1)主程序初始化。2)讀取配置文件,獲得系統(tǒng)功能選項(xiàng)和動(dòng)態(tài)鏈接庫(kù)的配置關(guān)系。3)初始化動(dòng)態(tài)鏈接庫(kù)的函數(shù)查找特定的動(dòng)態(tài)鏈接庫(kù)目錄,找出所有的滿足條件的動(dòng)態(tài)鏈接庫(kù)文件。4)主程序調(diào)用動(dòng)態(tài)鏈接庫(kù)中的初始化函數(shù),實(shí)現(xiàn)動(dòng)態(tài)鏈接庫(kù)的初始化。5)在執(zhí)行過(guò)程3)后,主程序緩存每個(gè)模塊導(dǎo)出的函數(shù)名并建立引用,以方便以后程序調(diào)用。6)在程序運(yùn)行期間,通過(guò)用戶交互調(diào)用動(dòng)態(tài)鏈接庫(kù)中的功能。7)在程序結(jié)束的時(shí)候,調(diào)用動(dòng)態(tài)鏈接庫(kù)中的結(jié)束函數(shù)來(lái)釋放動(dòng)態(tài)鏈接庫(kù)初始化和運(yùn)行中占用的資源。8)主程序結(jié)束。本章主要介紹了系統(tǒng)的總體設(shè)計(jì)方案、系統(tǒng)的開發(fā)和運(yùn)行環(huán)境以及使用到的主要技術(shù)。總體方案給出了系統(tǒng)的框架結(jié)構(gòu)和模塊結(jié)構(gòu),主要使用的技術(shù)有socket通信和iO完成端口技術(shù)、線程池技術(shù)以及動(dòng)態(tài)鏈接庫(kù)、ado數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)。IO完成端口技術(shù)用來(lái)響應(yīng)sensor的大規(guī)模連接請(qǐng)求,線程池用來(lái)處理多sensor任務(wù)的分發(fā),使用動(dòng)態(tài)鏈接庫(kù)技術(shù)來(lái)制作掃描插件和分析插件,ado數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)用來(lái)訪問(wèn)和修改數(shù)據(jù)中心的數(shù)據(jù)。第4章 主控中心的系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)登錄的用戶
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1