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