【文章內(nèi)容簡介】
用戶左右,而如果是并發(fā)編輯,則大概在 1020 個用戶。 (3).記錄數(shù)過多,單表記錄數(shù)過百萬性能就會變得較差,如果加上設(shè)計(jì)不良,這個限度還要降低。 不 能 編 譯 成 可 執(zhí) 行 文 件 ( .exe) , 必 須 要 安 裝 Access 運(yùn) 行 環(huán) 境 才 能 使 用 。 套接字(Socket)套接字(Socket)是通信的基石,是支持 TCP/IP 協(xié)議的網(wǎng)絡(luò)通信的基本操作單元??梢詫⑻捉幼挚醋鞑煌鳈C(jī)間的進(jìn)程進(jìn)行雙向通信的端點(diǎn),它構(gòu)成了單個主機(jī)河北工程大學(xué)畢業(yè)設(shè)計(jì)論文7內(nèi)及整個網(wǎng)絡(luò)間的編程界面。套接字存在于通信域中,通信域是為了處理一般的線程通過套接字通信而引進(jìn)的一種抽象概念。套接字通常和同一個域中的套接字交換數(shù)據(jù)(數(shù)據(jù)交換也可能穿越域的界限,但這時一定要執(zhí)行某種解釋程序) 。各種進(jìn)程使用這個相同的域互相之間用 Inter 協(xié)議簇來進(jìn)行通信。套接字可以根據(jù)通信性質(zhì)分類,這種性質(zhì)對于用戶是可見的。應(yīng)用程序一般僅在同一類的套接字間進(jìn)行通信。不過只要底層的通信協(xié)議允許,不同類型的套接字間也 照樣可以通信。套接字有三種不同的類型:流套接字、數(shù)據(jù)報(bào)套接字和原始套接字。流套接字(SOCK_STREAM ):流套接字用于提供面向連接、可靠的數(shù)據(jù)傳輸服務(wù)。該服務(wù)將保證數(shù)據(jù)能夠?qū)崿F(xiàn)無差錯、無重復(fù)發(fā)送,并按順序接收。流套接字之所以能夠?qū)崿F(xiàn)可靠的數(shù)據(jù)服務(wù),原因在于其使用了傳輸控制協(xié)議,即 TCP(The Transmission Control Protocol)協(xié)議。 數(shù)據(jù)報(bào)套接字(SOCK_DGRAM):數(shù)據(jù)報(bào)套接字提供了一種無連接的服務(wù)。該服務(wù)并不能保證數(shù)據(jù)傳輸?shù)目煽啃裕瑪?shù)據(jù)有可能在傳輸過程中丟失或出現(xiàn)數(shù)據(jù)重復(fù),且無法保證順序地接收到數(shù)據(jù)。數(shù)據(jù)報(bào)套接字使用 UDP(User Datagram Protocol)協(xié)議進(jìn)行數(shù)據(jù)的傳輸。由于數(shù)據(jù)包套接字不能保證數(shù)據(jù)傳輸?shù)目煽啃?,對于有可能出現(xiàn)的數(shù)據(jù)丟失情況,需要在程序中做相應(yīng)的處理。 原始套接字(SOCK_RAW):原始套接字與標(biāo)準(zhǔn)套接字(標(biāo)準(zhǔn)套接字指的是前面介紹的流套接字和數(shù)據(jù)報(bào)套接字)的區(qū)別在于:原始套接字可以讀寫內(nèi)核沒有處理的 IP 數(shù)據(jù)包,而流套接字只能讀取 TCP 協(xié)議的數(shù)據(jù),數(shù)據(jù)報(bào)套接字只能讀取UDP 協(xié)議的數(shù)據(jù)。因此,如果要訪問其他協(xié)議發(fā)送數(shù)據(jù)必須使用原始套接字。套接字的工作原理可以簡單描述:要通過互聯(lián)網(wǎng)進(jìn)行通信,你至少需要一對套接字,其中一個運(yùn)行于客戶機(jī)端,我們稱之為 ClientSocket,另一個運(yùn)行于服務(wù)器端,我們稱之為 ServerSocket。根據(jù)連接啟動的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過程可以分為三個步驟:服務(wù)器監(jiān)聽,客戶端請求,連接確認(rèn)。所謂服務(wù)器監(jiān)聽,是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時監(jiān)控網(wǎng)絡(luò)狀態(tài)。所謂客戶端請求,是指由客戶端的套接字提出連接請求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號,然后就向服務(wù)器端套接字提出連接請求。所謂連接確認(rèn),是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,它就響應(yīng)客戶端套接字的請求,建立一個新的線程,把服務(wù)器端套接字的河北工程大學(xué)畢業(yè)設(shè)計(jì)論文8描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。以上過程可以通過圖 21 來描述:服務(wù)器客戶端監(jiān)聽狀態(tài)連接請求發(fā)送服務(wù)端 S c o k e t 描述確認(rèn)服務(wù)端 S o c k e t 描述圖 21 Socket 建立過程 Windows Socket 介紹(Winsock)以 . Berkeley 大學(xué) BSD UNIX 中流行的 Socket 接口為范例定義了一套microsoft Windows 下網(wǎng)絡(luò)編程接口。它不僅包含了人們所熟悉的 Berkeley Socket 風(fēng)格的庫函數(shù);也包含了一組針對 Windows 的擴(kuò)展庫函數(shù),以使程序員能充分地利用Windows 消 息 驅(qū) 動 機(jī) 制 進(jìn)行編程。 Windows Sockets 規(guī)范本意在于提供給應(yīng) 用 程 序開發(fā)者一套簡單的 API,并讓各家網(wǎng)絡(luò)軟件供應(yīng)商共同遵守。此外,在一個特定版本 Windows 的基礎(chǔ)上,Windows Sockets 也定義了一個二進(jìn)制接口( ABI) ,以此來保證應(yīng)用 Windows Sockets API 的應(yīng)用程序能夠在任何網(wǎng)絡(luò)軟件供應(yīng)商的符合Windows Sockets 協(xié)議的實(shí)現(xiàn)上工作。因此這份規(guī)范定義了應(yīng)用程序開發(fā)者能夠使用,并且網(wǎng)絡(luò)軟件供應(yīng)商能夠?qū)崿F(xiàn)的一套庫函數(shù)調(diào)用和相關(guān)語義。遵守這套 Windows Sockets 規(guī)范的網(wǎng)絡(luò)軟件,我們稱之為 Windows Sockets 兼容的,而 Windows Sockets兼容實(shí)現(xiàn)的提供者,我們稱之為 Windows Sockets 提供者。一個網(wǎng)絡(luò)軟件供應(yīng)商必須百分之百地實(shí)現(xiàn) Windows Sockets 規(guī)范才能做到現(xiàn) Windows Sockets 兼容。任何能夠與 Windows Sockets 兼容實(shí)現(xiàn)協(xié)同工作的應(yīng)用程序就被認(rèn)為是具有 Windows Sockets 接口。我們稱這種應(yīng)用程序?yàn)?Windows Sockets 應(yīng)用程序。Windows Sockets規(guī)范定義并記錄了如何使用 API 與 Inter 協(xié) 議 族( IPS,通常我們指的是TCP/IP)連接,尤其要指出的是所有的 Windows Sockets 實(shí)現(xiàn)都支持流套接口和數(shù)據(jù)報(bào)套接口,應(yīng)用程序調(diào)用 Windows Sockets 的 API 實(shí)現(xiàn)相互之間的通訊。Windows Sockets 又利用下層的網(wǎng)絡(luò)通訊協(xié)議功能和操 作 系 統(tǒng) 調(diào)用實(shí)現(xiàn)實(shí)際的通訊河北工程大學(xué)畢業(yè)設(shè)計(jì)論文9工作。選定 WINDOWS 平臺開發(fā)網(wǎng)絡(luò)通信程序,可以選擇 WINDOWS 的 SOCKETS編程接口,Windows Sockets 是一套開放的、支持多種協(xié)議的 Windows 下的網(wǎng)絡(luò)編程接口。現(xiàn)在的 Winsock 已經(jīng)基本上實(shí)現(xiàn)了與協(xié)議無關(guān),你可以使用 Winsock 來調(diào)用多種協(xié)議的功能,但較常使用的是 TCP/IP 協(xié)議。Windows sockets 無疑是我們進(jìn)行網(wǎng)絡(luò)編程的利器。所有的 Windows Sockets 實(shí)現(xiàn)都支持流套接口和數(shù)據(jù)報(bào)套接口。應(yīng)用程序調(diào)用 Windows Sockets 的 API 實(shí)現(xiàn)相互之間的通訊。 Windows Sockets 又利用下層的網(wǎng)絡(luò)通訊協(xié)議功能和操作系統(tǒng)調(diào)用實(shí)現(xiàn)實(shí)際的通訊工作。它們之間的關(guān)系如圖 22 所示: 應(yīng)用程序 1 應(yīng)用程序 2網(wǎng)絡(luò)編程界面 , 例如 W i n d o w s S o c k e t s網(wǎng)絡(luò)通訊協(xié)議服務(wù)界面 , 例如 T C P / I P物理通訊介質(zhì)操作系統(tǒng) , 例如 W i n d o w s X P圖 22 Windows Sockets 實(shí)現(xiàn)通訊工作的各層關(guān)系圖 Socket 的同步和異步方式所謂 socket 通常也稱作套接字,應(yīng)用程序通常通過套接字 向網(wǎng)絡(luò)發(fā)出請求河北工程大學(xué)畢業(yè)設(shè)計(jì)論文10或者應(yīng)答網(wǎng)絡(luò)請求。對于一個網(wǎng)絡(luò)連接來說,套接字是平等的,并沒有差別,不因?yàn)樵诜?wù)器端或在客 戶 端 而產(chǎn)生不同級別。所謂 Socket 的同步方式,就是發(fā)送方發(fā)送數(shù)據(jù)包以后,不等待接收方響應(yīng),就接著發(fā)送下一個數(shù)據(jù)包。Socket 的異步方式,就是當(dāng)發(fā)送方發(fā)送一個數(shù)據(jù)包以后,一直等到接收方響應(yīng)后,才接著發(fā)送下一個數(shù)據(jù)包。關(guān)于套接字還有阻塞和非阻塞之分:阻塞套接字是指執(zhí)行此套接字的網(wǎng)絡(luò)調(diào)用時,直到調(diào)用成功才返回,否則此套接字就一直阻塞在網(wǎng)絡(luò)調(diào)用上。而非阻塞套接字是指在執(zhí)行此套接字的網(wǎng)絡(luò)調(diào)用時,不管成功與否,都立即返回。在 Windows 網(wǎng)絡(luò)通信軟件的開發(fā)中,最常用的方法就是異步非阻塞套接字。 用 Socket 開發(fā)一個 ServerClient 模型的程序開發(fā)原理: 服務(wù)器,使用 ServerSocket 監(jiān)聽指定的端口,端口可以隨意指定(由于 1024 以下的端口通常屬于保留端口,在一些操作系統(tǒng)中不可以隨意使用,所以建議使用大于 1024 的端口),等待客戶連接請求,客戶連接后,會話產(chǎn)生;在退出客戶端后,關(guān)閉連接??蛻舳?,使用 Socket 對網(wǎng)絡(luò)上某一個服務(wù)器的某一個端口發(fā)出連接請求,一旦連接成功,連接成功;客戶端退出后,關(guān)閉 Socket??蛻舳瞬恍枰付ù蜷_的端口,通常臨時的、動態(tài)的分配一個 1024 以上的端口。Socket 接口是 TCP/IP 網(wǎng)絡(luò)的 API,Socket 接口定義了許多函數(shù)或例程,程序員可以用它們來開發(fā) TCP/IP 網(wǎng)絡(luò)上的應(yīng)用程序。要學(xué) Inter 上的 TCP/IP 網(wǎng)絡(luò)編程,必須理解 Socket 接口。網(wǎng)絡(luò)的 Socket 數(shù)據(jù)傳輸是一種特殊的 I/O,Socket 也是一種文件描述符。Socket 也具有一個類似于打開文件的函數(shù)調(diào)用 Socket(),該函數(shù)返回一個整型的 Socket 描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^該 Socket 實(shí)現(xiàn)的。常用的 Socket 類型有兩種:流式 Socket(SOCK_STREAM)和數(shù)據(jù)報(bào)式Socket(SOCK_DGRAM )。流式是一種面向連接的 Socket,針對于面向連接的TCP 服務(wù)應(yīng)用;數(shù)據(jù)報(bào)式 Socket 是一種無連接的 Socket,對應(yīng)于無連接的 UDP 服務(wù)應(yīng)用。為了建立 Socket,程序可以調(diào)用 Socket 函數(shù),該函數(shù)返回一個類似于文件描述符的句柄。socket 函數(shù)原型為:int socket(int domain, int type, int protocol)。domain指明所使用的協(xié)議族,通常為 AF_INET,表示互聯(lián)網(wǎng)協(xié)議族( TCP/IP 協(xié)議族);type 參數(shù)指定 socket 的類型: SOCK_STREAM 或 SOCK_DGRAM,Socket 接口還定義了原始 Socket(SOCK_RAW),允許程序使用低層協(xié)議; protocol 通常賦值河北工程大學(xué)畢業(yè)設(shè)計(jì)論文110。Socket()調(diào)用返回一個整型 socket 描述符,你可以在后面的調(diào)用使用它。 Socket描述符是一個指向內(nèi)部數(shù)據(jù)結(jié)構(gòu)的指針,它指向描述符表入口。調(diào)用 Socket 函數(shù)時,socket 執(zhí)行體將建立一個 Socket,實(shí)際上 建立一個 Socket意味著為一個 Socket 數(shù)據(jù)結(jié)構(gòu)分配存儲空間。 Socket 執(zhí)行體為你管理描述符表。兩個網(wǎng)絡(luò)程序之間的一個網(wǎng)絡(luò)連接包括五種信息:通信協(xié)議、本地協(xié)議地址、本地主機(jī)端口、遠(yuǎn)端主機(jī)地址和遠(yuǎn)端協(xié)議端口。Socket 數(shù)據(jù)結(jié)構(gòu)中包含這五種信息。socket 在測量軟件中的使用也很廣泛。 多線程技術(shù)CPU 生產(chǎn)商為了提高 CPU 的性能,通常做法是提高 CPU 的時鐘頻率和增加緩存容量。不過目前 CPU 的頻率越來越快,如果再通過提升 CPU 頻率和增加緩存的方法來提高性能,往往會受到制造工藝上的限制以及成本過高的制約。盡管提高 CPU 的時鐘頻率和增加緩存容量后的確可以改善性能,但這樣的CPU 性能提高在技術(shù)上存在較大的難度。實(shí)際上在應(yīng)用中基于很多原因,CPU 的執(zhí)行單元都沒有被充分使用。如果 CPU 不能正常讀取數(shù)據(jù)(總線/內(nèi)存的瓶頸),其執(zhí)行單元利用率會明顯下降。另外就是目前大多數(shù)執(zhí)行線程缺乏 ILP(InstructionLevel Parallelism,多種指令同時執(zhí)行)支持。這些都造成了目前 CPU 的性能沒有得到全部的發(fā)揮。因此,Intel 則采用另一個思路去提高 CPU 的性能,讓 CPU 可以同時執(zhí)行多重線程,就能夠讓 CPU 發(fā)揮更大效率,即所謂“ 超線程(HyperThreading,簡稱 “HT”)”技術(shù)。超線程技術(shù)就是利用特殊的硬件指令,把兩個邏輯內(nèi)核模擬成兩個物理芯片,讓單個處理器都能使用線程級并行計(jì)算,進(jìn)而兼容多線程操作系統(tǒng)和軟件,減少了 CPU 的閑置時間,提高的 CPU 的運(yùn)行效率。采用超線程即是可在同一時間里,應(yīng)用程序可以使用芯片的不同部分。雖然單線程芯片每秒鐘能夠處理成千上萬條指令,但是在任一時刻只能夠?qū)σ粭l指令進(jìn)行操作。而超線程技術(shù)可以使芯片同時進(jìn)行多線程處理,使芯片性能得到提升。超線程技術(shù)是在一顆 CPU 同時執(zhí)行多個程序而共同分享一顆 CPU 內(nèi)的資源,理論上要像兩顆 CPU 一樣在同一時間執(zhí)行兩個線程,P4 處理器需要多加入一個Logical CPU Pointer(邏輯處理單元)。因此新一代的 P4 HT 的 die 的面積比以往的P4 增大了 5%。而其余部分如 ALU(整數(shù)運(yùn)算單元)、FPU(浮點(diǎn)運(yùn)算單元)、L2 Cache(二級緩存)則保持不變,這些部分是被分享的。雖然采用超線程技術(shù)能同時執(zhí)行兩個線程,但它并不象兩個真正的 CPU 那樣,每個 CPU 都具有獨(dú)立的資源。當(dāng)兩個線程都同時需要某一個資源時,其中一個要暫時停止,并讓出資源,直到這些資源閑置后才能繼續(xù)。因此超線程的性能并不等于河北工程大學(xué)畢業(yè)設(shè)計(jì)論文12兩顆 CPU 的性能。英特爾 P4 超線程有兩個運(yùn)行模式, Single Task Mode(單任務(wù)模式)及 Multi Task Mode(多任務(wù)模式),當(dāng)程序不支持 MultiProcessing(多處理器作業(yè))時,系統(tǒng)會停止其中一個邏輯 CPU 的運(yùn)行,把資源集中于單個邏輯 CPU 中,讓單線程程序不會因其中一個邏輯 CPU 閑置而減低性能,但由于被停止運(yùn)行的邏輯 CP