專利名稱:可升級(jí)打印假脫機(jī)系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
該公開系統(tǒng)涉及用在客戶機(jī)/服務(wù)器計(jì)算應(yīng)用程序中的改進(jìn)的打印假脫機(jī)系統(tǒng)。
背景技術(shù):
大規(guī)模商業(yè)機(jī)構(gòu)的趨勢(shì)是將多個(gè)打印服務(wù)器合并成單個(gè)服務(wù)器。日益地,單個(gè)打印服務(wù)器服務(wù)更多用戶以及連接到更多打印機(jī)上是一種趨勢(shì)。Windows2003服務(wù)器對(duì)可擴(kuò)展性加以改進(jìn),例如Windows2000服務(wù)器可擴(kuò)展性。本發(fā)明涉及對(duì)Windows 2003服務(wù)器結(jié)構(gòu)采用的、充當(dāng)打印服務(wù)器的技術(shù)的改進(jìn)。
可擴(kuò)展性問題的共通原因是在服務(wù)器上具有競爭處理器時(shí)間的太多線程(或過程)。單個(gè)中央處理單元每次只能執(zhí)行一個(gè)指令。如果工作交給后臺(tái)線程,當(dāng)主線程或其他線程繼續(xù)運(yùn)行時(shí)它不執(zhí)行。當(dāng)在鎖定或時(shí)間片分配上阻塞線程時(shí),當(dāng)線程激起時(shí)上下文切換浪費(fèi)CPU資源。時(shí)常,為線程分配時(shí)間片,沒想到發(fā)現(xiàn)它被阻塞,然后再次立即睡眠。這一現(xiàn)象導(dǎo)致超高速緩存系統(tǒng)顛簸以及在上下文切換中花費(fèi)的低效周期。
為給出說明,在服務(wù)800臺(tái)打印機(jī)和5000臺(tái)客戶機(jī)的服務(wù)器(或多個(gè)服務(wù)器)上運(yùn)行測(cè)試。產(chǎn)生大約5000個(gè)并行線程。每當(dāng)在過程中創(chuàng)建線程時(shí),服務(wù)器操作系統(tǒng)為線程的堆棧預(yù)留地址空間區(qū)域以及向該預(yù)留區(qū)域指定一些物理存儲(chǔ)器。對(duì)在Windows服務(wù)器2003下運(yùn)行的打印假脫機(jī)系統(tǒng)來說,這些參數(shù)可以是用于堆棧的262,144字節(jié)以及x86處理器上每線程存儲(chǔ)器的32,768字節(jié)。對(duì)5000個(gè)線程,將占用5000×32768=164m的存儲(chǔ)器。5000個(gè)并行線程主要集中在2個(gè)位置,來自客戶機(jī)的RPC呼入呼叫和端口線程功能。本發(fā)明涉及降低由這兩個(gè)原因引起的服務(wù)器資源消耗的努力。在名為“Win32 SystemsProgramming”的正文,Copyright 2001 Addison Wesley的第14章(Asynchronous Input/Output and Completion ports)中也論述了資源分配的這一問題。
Windows 2000和Windows XP中的當(dāng)前客戶機(jī)打印假脫機(jī)系統(tǒng)使用遠(yuǎn)程過程調(diào)用,該調(diào)用使用命名管(named pipe)端點(diǎn)與服務(wù)器通信。使用命名管產(chǎn)生與可擴(kuò)展性和安全性有關(guān)的問題。
·為支持到客戶機(jī)的打印通知,通過允許到客戶機(jī)的匿名連接,用于通知的反向信道(從服務(wù)器到客戶機(jī)的通信)才是可能的。服務(wù)器還需要維護(hù)到所有注冊(cè)客戶機(jī)的那些同時(shí)連接,這不利地影響服務(wù)器的可擴(kuò)展性。
·不期望在服務(wù)器上允許大量空閑未決調(diào)用。通過命名管,等待應(yīng)答的每個(gè)客戶機(jī)將具有在服務(wù)器上運(yùn)行的未決命名管,每個(gè)要求一定量核心存儲(chǔ)器。
假脫機(jī)系統(tǒng)接口具有以下問題 ·接口主要是同步接口,在服務(wù)器端防止任何線程池。還影響在客戶機(jī)端執(zhí)行任何異步操作的能力和影響我們的應(yīng)用程序響應(yīng)時(shí)間。
名為Inside Microsoft Windows 2000(Solomon等人Microsoft Press,版權(quán)2000)的正文具有與聯(lián)網(wǎng)有關(guān)的章節(jié)。The Solomon等人的正文提到“除在此所述的基于接口的同步功能調(diào)用外,Windows 2000 RPC還支持異步的RPC。異步RPC讓RPC應(yīng)用程序執(zhí)行功能而不是等待直到功能完成以便繼續(xù)處理為止。相反,應(yīng)用程序能執(zhí)行其他代碼以及稍后,當(dāng)來自服務(wù)器的響應(yīng)已經(jīng)到達(dá)時(shí),RPC運(yùn)行時(shí)間發(fā)事件對(duì)象信號(hào),客戶機(jī)與異步調(diào)用關(guān)聯(lián)??蛻魴C(jī)能使用一套Win32功能,諸如WaitForSingleObject,來獲悉功能結(jié)束”。
發(fā)明內(nèi)容
一種示例性系統(tǒng)可用于在打印機(jī)上有效地打印數(shù)據(jù)以及結(jié)合專用打印服務(wù)器使用。本發(fā)明的一個(gè)用途支持服務(wù)具有需要同時(shí)打印數(shù)據(jù)的應(yīng)用程序的大量客戶端計(jì)算機(jī)的打印服務(wù)器。這些應(yīng)用程序包括但不局限于字處理應(yīng)用程序。服務(wù)器計(jì)算機(jī)具有實(shí)現(xiàn)服務(wù)器打印假脫機(jī)系統(tǒng)的軟件,用于協(xié)調(diào)客戶端計(jì)算機(jī)發(fā)送給打印服務(wù)器的數(shù)據(jù)的打印。多個(gè)打印機(jī)通常通過網(wǎng)絡(luò)與服務(wù)器耦合,用于在服務(wù)器打印假脫機(jī)系統(tǒng)的指導(dǎo)下打印。
根據(jù)示例性系統(tǒng),客戶端計(jì)算機(jī)包括在客戶端計(jì)算機(jī)上運(yùn)行的客戶機(jī)打印假脫機(jī)系統(tǒng),通過到服務(wù)器打印假脫機(jī)系統(tǒng)的異步遠(yuǎn)程過程調(diào)用,將數(shù)據(jù)發(fā)送到其中一個(gè)打印機(jī)。服務(wù)器打印假脫機(jī)系統(tǒng)包括線程管理器,用于通過將數(shù)據(jù)傳送到多個(gè)打印機(jī),維護(hù)用于服務(wù)未決客戶端計(jì)算機(jī)請(qǐng)求的線程池。
在客戶端計(jì)算機(jī)處的異步遠(yuǎn)程過程調(diào)用減少服務(wù)器性能的掛起或等待的應(yīng)用程序的實(shí)例。如果打印服務(wù)器處于重負(fù)載,客戶應(yīng)用程序看起來具有故障,盡管它僅是等待來自打印服務(wù)器的響應(yīng)。
在服務(wù)器處使用線程池勢(shì)必降低現(xiàn)有技術(shù)打印假脫機(jī)系統(tǒng)中出現(xiàn)的低效上下文切換。這種上下文切換請(qǐng)求服務(wù)器資源以及導(dǎo)致低效使用打印服務(wù)器處理器時(shí)間。
示例性系統(tǒng)使用TCP作為客戶機(jī)和服務(wù)器間的傳送協(xié)議。TCP更快、具有豐富的功能、更可升級(jí)和穩(wěn)固以及通常比命名管浪費(fèi)較少資源。TCP在域和其他非標(biāo)準(zhǔn)環(huán)境上工作良好。TCP對(duì)防火墻更友好以及它在處理其通信量方面包含更少部件。
在結(jié)合附圖描述的系統(tǒng)的下述示例性實(shí)施例中更全面地描述本發(fā)明的這些和其他目的、優(yōu)點(diǎn)和特征。
圖1是用于實(shí)現(xiàn)本發(fā)明的示例性實(shí)施例的計(jì)算機(jī)系統(tǒng)的示意圖描述; 圖2是表示一起聯(lián)網(wǎng)的多個(gè)計(jì)算機(jī)的示意性描述,其中至少一個(gè)計(jì)算機(jī)包括用于實(shí)現(xiàn)根據(jù)本發(fā)明構(gòu)造的打印假脫機(jī)系統(tǒng)的軟件; 圖3是根據(jù)本發(fā)明實(shí)現(xiàn)基于遠(yuǎn)程過程調(diào)用的打印假脫機(jī)系統(tǒng)的分層軟件部件的示意性描述; 圖4和4A是用于客戶機(jī)和服務(wù)器間的打印機(jī)通知的過程內(nèi)通信如何工作的現(xiàn)有技術(shù)描述; 圖5是依照本發(fā)明的示范性實(shí)施例,客戶機(jī)和服務(wù)器打印假脫機(jī)系統(tǒng)間的過程內(nèi)通信的描述; 圖6是依照本發(fā)明的示例性實(shí)施例,用于服務(wù)客戶機(jī)請(qǐng)求的線程池的操作的描述;以及 圖7是用于將打印作業(yè)增加到用于服務(wù)打印請(qǐng)求的線程池的調(diào)度程序的示意性描述。
具體實(shí)施例方式 圖2是具有通過網(wǎng)絡(luò)通信與服務(wù)器12通信的多個(gè)工作站11的網(wǎng)絡(luò)10的描述。服務(wù)器在網(wǎng)絡(luò)上與多個(gè)打印機(jī)13通信用于服務(wù)打印請(qǐng)求,以及還包括通過并行接口與打印機(jī)13a耦合的接口。網(wǎng)絡(luò)上的通信是通過安裝在工作站和服務(wù)器中的傳統(tǒng)以太網(wǎng)交換機(jī)和以太網(wǎng)卡的有線以及通過實(shí)現(xiàn)已知無線通信標(biāo)準(zhǔn)的無線路由器的無線。因此例如,膝上型計(jì)算機(jī)14能夠在沒有物理連接到網(wǎng)絡(luò)硬件的情況下,與服務(wù)器12通信。工作站(或膝上型電腦)能通信和控制在服務(wù)器上實(shí)現(xiàn)的打印假脫機(jī)系統(tǒng)以便應(yīng)在工作站上執(zhí)行的應(yīng)用程序之一的請(qǐng)求來打印。例如,字處理應(yīng)用軟件通過操作系統(tǒng)暴露于應(yīng)用程序的Win32應(yīng)用程序接口傳送它的請(qǐng)求。盡管Win32是目前用于Windows商標(biāo)操作系統(tǒng)的優(yōu)選應(yīng)用接口,但是本發(fā)明設(shè)想將請(qǐng)求發(fā)送到服務(wù)器12的其他裝置。
本發(fā)明的示例性實(shí)施例使用過程內(nèi)通信的客戶機(jī)/服務(wù)器模型,用于實(shí)現(xiàn)打印假脫機(jī)系統(tǒng)。更具體地說,在一個(gè)示范性的實(shí)施例中,工作站11上的在客戶機(jī)過程通過網(wǎng)絡(luò)10與一個(gè)或多個(gè)打印服務(wù)器12通信以便以比現(xiàn)有技術(shù)打印系統(tǒng)有效和穩(wěn)定的方式打印。圖3是在打印假脫機(jī)系統(tǒng)處實(shí)現(xiàn)基于遠(yuǎn)程過程調(diào)用(在此稱為RPC)的隊(duì)列作業(yè)過程的服務(wù)器和客戶機(jī)的交互作用的示意性描述。在圖3中,看到客戶機(jī)15通過網(wǎng)絡(luò)(諸如圖2的網(wǎng)絡(luò))與服務(wù)器16交互作用。在一個(gè)例子中,客戶機(jī)是在工作站上運(yùn)行的軟件,服務(wù)器軟件是在服務(wù)器計(jì)算機(jī)12上運(yùn)行的軟件。盡管服務(wù)器軟件是在專用打印服務(wù)器上運(yùn)行的軟件,但是依照本發(fā)明的示范性實(shí)施例,工作站也實(shí)現(xiàn)充當(dāng)服務(wù)器的打印假脫機(jī)系統(tǒng)。因此,在另一應(yīng)用中,依照客戶機(jī)/服務(wù)器模型,客戶機(jī)和服務(wù)器在相同的計(jì)算機(jī)上執(zhí)行。例如,工作站上的打印假脫機(jī)系統(tǒng)使用異步過程調(diào)用直接將打印請(qǐng)求傳送到本地打印機(jī)。
利用RPC過程內(nèi)通信允許在本地機(jī)器(諸如工作站11之一)上執(zhí)行的應(yīng)用程序調(diào)用遠(yuǎn)程機(jī)器(諸如圖2中的服務(wù)器12)上的過程。調(diào)用文字處理程序不涉及打印過程調(diào)用在服務(wù)器上執(zhí)行的代碼的事實(shí)。對(duì)本地應(yīng)用程序,看來似乎過程完全在本地計(jì)算機(jī)上運(yùn)行。RPC提供聯(lián)網(wǎng)操作的過程瀏覽而不是以傳送為中心的瀏覽,因此,簡化分布式應(yīng)用程序的開發(fā)和配置。用在Windows操作系統(tǒng)中的RPC過程與開放軟件基礎(chǔ)(Open Software Foundation)分布式計(jì)算環(huán)境兼容。
聯(lián)網(wǎng)軟件傳統(tǒng)上在處理的輸入輸出模型周圍結(jié)構(gòu)化。在例如Windows 2000中,當(dāng)應(yīng)用程序發(fā)出遠(yuǎn)程輸入輸出請(qǐng)求時(shí),啟動(dòng)網(wǎng)絡(luò)操作。操作系統(tǒng)處理通過將請(qǐng)求轉(zhuǎn)發(fā)到充當(dāng)遠(yuǎn)程文件系統(tǒng)的重定向器來處理該請(qǐng)求,以便客戶機(jī)與對(duì)客戶機(jī)來說不可見的遠(yuǎn)程文件系統(tǒng)交互作用。
遠(yuǎn)程過程調(diào)用(RPC)實(shí)現(xiàn)稍有不同方法。RPC應(yīng)用與其他的結(jié)構(gòu)化應(yīng)用類似,它們調(diào)用過程和過程庫來執(zhí)行特定的任務(wù)。然而,不同在于通過到應(yīng)用程序的接口暴露的程序可以調(diào)用在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行的過程。遠(yuǎn)程客戶機(jī)通過網(wǎng)絡(luò)與服務(wù)器通信。這完全不同于與在相同的計(jì)算機(jī)上的服務(wù)器通信的本地客戶機(jī)。
計(jì)算機(jī)系統(tǒng) 圖1描述例如能表示網(wǎng)絡(luò)10上的工作站11或者服務(wù)器12的結(jié)構(gòu)的示例性數(shù)據(jù)處理系統(tǒng)。該系統(tǒng)包括傳統(tǒng)計(jì)算機(jī)20形式的通用計(jì)算裝置,包括一個(gè)或多個(gè)處理單元21,系統(tǒng)存儲(chǔ)器22,以及將包括系統(tǒng)存儲(chǔ)器的各種系統(tǒng)部件耦合到處理單元21的系統(tǒng)總線23。系統(tǒng)總線23可以是任何幾種類型的總線結(jié)構(gòu),包括存儲(chǔ)器總線或存儲(chǔ)控制器、外圍總線,以及使用各種總線結(jié)構(gòu)的任何一種的本地總線。
系統(tǒng)存儲(chǔ)器包括只讀存儲(chǔ)器(ROM)24,以及隨機(jī)存取存儲(chǔ)器(RAM)25。包含諸如在啟動(dòng)期間,有助于在計(jì)算機(jī)20中的元件間傳送信息的基本例程的基本輸入/輸出系統(tǒng)26(BIOS)存儲(chǔ)在ROM 24中。
計(jì)算機(jī)20進(jìn)一步包括硬盤驅(qū)動(dòng)器27,用于從未示出的硬盤讀取或?qū)懭胗脖P、用于從可拆卸磁盤29讀取或?qū)懭肟刹鹦洞疟P29的磁盤驅(qū)動(dòng)器、以及用于從可拆卸光盤31(諸如CD ROM或其他光學(xué)介質(zhì))讀取或?qū)懭氲墓獗P機(jī)30。分別通過硬盤驅(qū)動(dòng)器接口32、磁盤驅(qū)動(dòng)接口33和光驅(qū)接口34,使硬盤驅(qū)動(dòng)器27、磁盤驅(qū)動(dòng)28和光盤機(jī)30連接到系統(tǒng)總線23上。驅(qū)動(dòng)器和它們的相關(guān)的計(jì)算機(jī)可讀介質(zhì)提供用于計(jì)算機(jī)20的計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其他數(shù)據(jù)的非易失存儲(chǔ)器。盡管在此所述的示例性環(huán)境采用硬盤、可拆卸磁盤29和可拆卸光盤31,但是本領(lǐng)域的技術(shù)人員應(yīng)意識(shí)到能存儲(chǔ)可由計(jì)算機(jī)訪問的數(shù)據(jù)的其他的類型的計(jì)算機(jī)可讀介質(zhì),諸如磁帶盒、閃存卡、數(shù)字視頻盤、Bernoulli盒式磁帶機(jī)、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)等等也可以用在該示例性操作環(huán)境中。
多個(gè)程序模塊可以存儲(chǔ)在硬盤、磁盤29、光盤31、ROM 24或RAM 25上,包括操作系統(tǒng)35、一個(gè)或多個(gè)應(yīng)用程序36、其他程序模塊37和程序數(shù)據(jù)38。用戶可以通過輸入裝置,諸如鍵盤40和指示裝置42將命令和信息輸入計(jì)算機(jī)20中。其他輸入裝置(未示出)可以包括麥克風(fēng)、游戲桿、游戲墊、衛(wèi)星反射器、掃描器等等。這些和其他輸入裝置通常通過與系統(tǒng)總線耦合的串行端口接口46連接到處理單元21上,但可以通過其他接口,諸如并行端口、游戲端口或通用串行總線(USB)連接。監(jiān)視器47或其他類型顯示設(shè)備也經(jīng)接口,諸如視頻適配器48連接到系統(tǒng)總線23上。除監(jiān)視器以外,個(gè)人計(jì)算機(jī)(PC)通常包括其他外圍輸出設(shè)備(未示出),諸如揚(yáng)聲器和打印機(jī)。
在圖1中所述的計(jì)算機(jī)20通常使用到一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī),諸如遠(yuǎn)程計(jì)算機(jī)49的邏輯連接,在聯(lián)網(wǎng)環(huán)境中操作。遠(yuǎn)程計(jì)算機(jī)49可以是另一PC、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對(duì)等設(shè)備或其他公用網(wǎng)絡(luò)節(jié)點(diǎn),以及通常包括相對(duì)于計(jì)算機(jī)20,如上所述的許多或所有元件,盡管僅在圖1中示例說明存儲(chǔ)器存儲(chǔ)設(shè)備50。圖1所述的邏輯連接包括局域網(wǎng)(LAN)51和廣域網(wǎng)(WAN)52。這種聯(lián)網(wǎng)環(huán)境在辦公室、企業(yè)廣泛的計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)和互聯(lián)網(wǎng)中很常見。
當(dāng)用在局域網(wǎng)聯(lián)網(wǎng)環(huán)境中時(shí),計(jì)算機(jī)20通過網(wǎng)絡(luò)接口或適配器53連接到局部網(wǎng)51。當(dāng)用在WAN聯(lián)網(wǎng)環(huán)境中時(shí),計(jì)算機(jī)20通常包括調(diào)制解調(diào)器54和用于在WAN 52,諸如互聯(lián)網(wǎng)上確立通信的其他裝置??梢允莾?nèi)置或外置的調(diào)制解調(diào)器54通過串行端口接口46連接到系統(tǒng)總線23上。在聯(lián)網(wǎng)環(huán)境中,相對(duì)于計(jì)算機(jī)20所述的程序模塊或其一部分可以存儲(chǔ)在遠(yuǎn)程存儲(chǔ)器存儲(chǔ)裝置中。將理解到所示的網(wǎng)絡(luò)連接是示例性的以及可以使用在計(jì)算機(jī)間建立通信鏈路的其他裝置。
在Windows 2000(以及稍后版本)操作系統(tǒng)環(huán)境中,為編寫RPC應(yīng)用程序,操作系統(tǒng)程序員決定哪些過程將本地執(zhí)行以及哪些將遠(yuǎn)程執(zhí)行。當(dāng)應(yīng)用程序運(yùn)行時(shí),它調(diào)用本地過程以及不存在于本地計(jì)算機(jī)上的過程。為處理后一情況,應(yīng)用程序鏈接到包含存根(stub)過程的本地靜態(tài)鏈接庫或DLL,一個(gè)存根過程用于每個(gè)遠(yuǎn)程過程。存根過程具有與遠(yuǎn)程過程相同的名稱和使用相同的接口,但除了執(zhí)行所要求的操作,存根采用傳遞給它的參數(shù)和編排它們,用于在網(wǎng)絡(luò)上傳輸。編排參數(shù)的過程指的是以特殊的方式排序和封裝參數(shù)以便適合網(wǎng)絡(luò)鏈路,諸如解析基準(zhǔn)和采集指示器所指的任何數(shù)據(jù)結(jié)構(gòu)的副本。
然后存根調(diào)用駐留遠(yuǎn)程過程的計(jì)算機(jī)的RPC運(yùn)行時(shí)間過程,確定使用哪一個(gè)傳送機(jī)制,以及將請(qǐng)求發(fā)送到本地傳送軟件,用于傳輸給遠(yuǎn)程服務(wù)器。當(dāng)遠(yuǎn)程服務(wù)器接收該RPC請(qǐng)求時(shí),它去編排(unmarshal)這些參數(shù),重構(gòu)原始過程調(diào)用以及調(diào)用該過程。當(dāng)服務(wù)器結(jié)束服務(wù)客戶機(jī)調(diào)用時(shí),執(zhí)行逆順序以及將結(jié)果返回給調(diào)用程序。在Windows操作系統(tǒng)環(huán)境中,通過Microsoft接口定義語言編譯程序簡化創(chuàng)建RPC應(yīng)用的過程。編譯IDL文件以及生成客戶機(jī)端和服務(wù)器端的存根例程,而且,主文件將包括在應(yīng)用程序中。希望調(diào)用現(xiàn)有RPC應(yīng)用程序的程序員僅需要編寫軟件的客戶機(jī)端和將應(yīng)用程序鏈接到本地RPC運(yùn)行時(shí)間設(shè)備上。
Windows 2000網(wǎng)絡(luò)服務(wù)目前包括RPC應(yīng)用程序,該RPC應(yīng)用程序包括命名管的網(wǎng)絡(luò)傳輸供應(yīng)商DLLs、NetBIOS和TCP/IP。服務(wù)客戶機(jī)的請(qǐng)求的網(wǎng)絡(luò)10上的服務(wù)器,諸如服務(wù)器12通過現(xiàn)用目錄(TM),使得它們的存在在網(wǎng)絡(luò)上已知。
服務(wù)器線程池 (在服務(wù)器12上執(zhí)行的軟件中實(shí)現(xiàn)的)打印假脫機(jī)系統(tǒng)100通過維護(hù)用于服務(wù)那些請(qǐng)求的線程池202,響應(yīng)多個(gè)客戶機(jī)請(qǐng)求(潛在地,同時(shí)數(shù)千的這種請(qǐng)求)。不同于為每個(gè)客戶機(jī)打印請(qǐng)求分配服務(wù)器線程的現(xiàn)有技術(shù),根據(jù)本發(fā)明的示例性實(shí)施例,以高效的方式,維護(hù)能響應(yīng)多個(gè)客戶機(jī)打印請(qǐng)求的線程池,而沒有對(duì)服務(wù)器資源的不合理要求。
基于示例性RPC的打印假脫機(jī)系統(tǒng)包括從第一線程池202a提取作業(yè)的調(diào)度程序204并實(shí)現(xiàn)基于服務(wù)器上結(jié)束端口210的第二線程池202b。結(jié)束端口是等待端口的一組重疊的處理和線程。使用單個(gè)Win32接口函數(shù)CreateIOCompletionPort來創(chuàng)建端口和將處理增加到端口上。
對(duì)每個(gè)呼入異步打印機(jī)函數(shù),假脫機(jī)系統(tǒng)100’將一項(xiàng)增加到由線程服務(wù)的隊(duì)列中。然后,異步打印機(jī)函數(shù)將立即返回到客戶機(jī)。假脫機(jī)系統(tǒng)100’具有多個(gè)工作線程來服務(wù)來自調(diào)度程序204的排隊(duì)等候的要求,當(dāng)一個(gè)線程結(jié)束請(qǐng)求隊(duì)列中一個(gè)請(qǐng)求的處理時(shí),通過異步RPC完成調(diào)用函數(shù)將結(jié)果發(fā)送給客戶機(jī)。然后,那個(gè)線程將從該隊(duì)列拾取下一項(xiàng)和處理其請(qǐng)求。取決于隊(duì)列的大小,在該線程池中的線程的數(shù)量可以增減來管理該負(fù)載。
實(shí)現(xiàn)高性能的服務(wù)器打印假脫機(jī)系統(tǒng)要求實(shí)現(xiàn)高效的線程模型。具有或太少或太多打印假脫機(jī)系統(tǒng)線程來處理客戶機(jī)請(qǐng)求會(huì)導(dǎo)致性能問題。打印假脫機(jī)系統(tǒng)的示例性實(shí)施例的目的是通過使其線程避免不必要阻塞,同時(shí)最大化多個(gè)有效線程中的并行性,盡可能少地發(fā)生上下文切換。
通過各種請(qǐng)求打印服務(wù)的客戶機(jī)處理,示例性打印假脫機(jī)系統(tǒng)100’使用I/O結(jié)束執(zhí)行對(duì)象210,其輸出到Win32作為結(jié)束端口,作為用于傳遞到假脫機(jī)系統(tǒng)100的打印作業(yè)完成的焦點(diǎn)。
令人遺憾地,由于各種原因,沒有快速地結(jié)束由該打印假脫機(jī)系統(tǒng)100實(shí)現(xiàn)的一些函數(shù)。這些包括全局注冊(cè)鎖定和調(diào)用其他緩慢的函數(shù)。當(dāng)那些函數(shù)阻塞時(shí),維護(hù)線程池106的RPC運(yùn)行時(shí)間將創(chuàng)建另一線程來服務(wù)由調(diào)度程序發(fā)送的新的呼入客戶機(jī)。
根據(jù)本發(fā)明,識(shí)別由服務(wù)器費(fèi)很長時(shí)間服務(wù)的函數(shù)和改變它們以在客戶機(jī)處異步地執(zhí)行?,F(xiàn)有技術(shù)系統(tǒng)的分析提供了來自源自于花費(fèi)很長時(shí)間結(jié)束的假脫機(jī)系統(tǒng)本身的函數(shù)NOT的數(shù)據(jù)。識(shí)別這些函數(shù)是在客戶機(jī)處選擇哪些函數(shù)實(shí)現(xiàn)為異步接口方法的一種方式。
在該示例性系統(tǒng)中,與現(xiàn)有技術(shù)winspool接口并行實(shí)現(xiàn)新的接口。在實(shí)現(xiàn)該新的接口中,一些函數(shù)是異步的,以及一些函數(shù)是同步的。新接口具有異步和同步函數(shù)以及與將命名管用作它的傳輸協(xié)議的舊同步接口并排運(yùn)行。使用不同的方法名稱來避免名稱沖突。
TCP/IP傳輸和安全模型 在現(xiàn)有技術(shù)打印假脫機(jī)系統(tǒng)中用作傳輸協(xié)議的命名管具有靜態(tài)端點(diǎn)。本發(fā)明的示例性實(shí)施例不使用命名管,相反依賴于TCP/IP傳輸協(xié)議,用于在不同機(jī)器,諸如圖2的工作站11和服務(wù)器12上運(yùn)行的客戶機(jī)和服務(wù)器間傳送。盡管目前本發(fā)明優(yōu)選實(shí)施例使用TCP/IP,其他實(shí)施例能使用其他的傳輸協(xié)議,諸如超級(jí)文本傳輸協(xié)議(http)等等。
對(duì)TCP/IP,示例性系統(tǒng)使用動(dòng)態(tài)端點(diǎn)。服務(wù)器端寄存協(xié)議序列,然后獲得綁定向量(binding vector)。最后,服務(wù)器記錄端點(diǎn)。
為確保過程僅在特定的協(xié)議序列上調(diào)用,示例性系統(tǒng)寄存安全性回調(diào)函數(shù),和在那個(gè)函數(shù)中,檢查調(diào)用哪個(gè)協(xié)議序列。
目前Windows RPC提供基于SSPI(安全性支持供應(yīng)商接口)的安全模型,它提供高級(jí)安全性并由本發(fā)明的示例性實(shí)施例使用。
示例性系統(tǒng)在服務(wù)器打印假脫機(jī)系統(tǒng)中創(chuàng)建線程池。每個(gè)呼入異步函數(shù)調(diào)用使假脫機(jī)系統(tǒng)將工作項(xiàng)放入線程池202a中并立即返回到客戶機(jī)。稍后由第二線程池202b安排和執(zhí)行該工作項(xiàng)。打印假脫機(jī)系統(tǒng)排隊(duì)該線程池中的工作項(xiàng)。
客戶機(jī)調(diào)用異步方法 本地客戶機(jī)調(diào)用新的異步接口方法,由此使異步公共API暴露于應(yīng)用程序,諸如文字處理程序。假脫機(jī)系統(tǒng)客戶機(jī)也調(diào)用該新的異步方法,因此使一些異步方法API暴露于應(yīng)用程序。例如,文字處理程序能調(diào)用示例性異步方法,諸如GetPrinterData的異步版本,以檢驗(yàn)?zāi)骋淮蛴C(jī)的狀態(tài)。該函數(shù)將通過本地計(jì)算機(jī)中的假脫機(jī)系統(tǒng)和遠(yuǎn)程服務(wù)器中的假脫機(jī)系統(tǒng)。在該服務(wù)器假脫機(jī)系統(tǒng)中,實(shí)質(zhì)上在假脫機(jī)系統(tǒng)工作池202a中添加服務(wù)請(qǐng)求以及立即返回給文字處理程序。然后文字處理程序進(jìn)入進(jìn)行到執(zhí)行其他任務(wù),以及當(dāng)準(zhǔn)備拾取打印機(jī)數(shù)據(jù)時(shí)被告知。
現(xiàn)有技術(shù)打印機(jī)通知很復(fù)雜。如果例如,應(yīng)用程序希望監(jiān)視打印機(jī)狀態(tài)改變來確定例如作業(yè)是否結(jié)束,它調(diào)用函數(shù)Find First Printer ChangeNotification(在此稱為FFPCN)。該函數(shù)將調(diào)用假脫機(jī)系統(tǒng)以及假脫機(jī)系統(tǒng)與服務(wù)器建立通信信道。稍后,當(dāng)文字處理程序感興趣的事件發(fā)生時(shí),服務(wù)器假脫機(jī)系統(tǒng)將事件改變通知發(fā)送回假脫機(jī)系統(tǒng)客戶機(jī)。建立和維護(hù)該通信信道浪費(fèi)服務(wù)器中的大量資源以及阻止服務(wù)器假脫機(jī)系統(tǒng)有效地同時(shí)處理大量客戶機(jī)。
在現(xiàn)有技術(shù)設(shè)計(jì)中,服務(wù)器通過反向信道連續(xù)地將改變數(shù)據(jù)發(fā)送到客戶機(jī)。winspool客戶機(jī)高速緩存改變數(shù)據(jù)直到對(duì)函數(shù)FFPCN的下一調(diào)用為止。如果使用異步RPC,改變數(shù)據(jù)封裝在異步調(diào)用完成數(shù)據(jù)中,以及當(dāng)先前的異步RPC調(diào)用完成時(shí),客戶機(jī)將向打印機(jī)發(fā)出用于更多通知數(shù)據(jù)的另一異步RPC調(diào)用。
圖4概述FFPCN函數(shù)的現(xiàn)有技術(shù)版本。
步驟111客戶應(yīng)用程序104調(diào)用函數(shù)RpcClientFindFirstPrinterChangeNotification。
步驟112客戶機(jī)假脫機(jī)系統(tǒng)路由器105運(yùn)行函數(shù)RouterFindFirstPrinterChangeNotification,調(diào)用win32供應(yīng)商106的函數(shù)RemoteFindFirstPrinterChangeNotification。
步驟113Win32供應(yīng)商調(diào)用路由器函數(shù)CallRouterFindFirstPrinterChangeNotification。
步驟114客戶機(jī)假脫機(jī)系統(tǒng)路由器調(diào)用遠(yuǎn)程假脫機(jī)系統(tǒng)100上的RpcRemoteFindFirstPrinterChangeNotificationEx。
步驟115遠(yuǎn)程假脫機(jī)系統(tǒng)107函數(shù)RemoteFindFirstPrinterChangeNotification調(diào)用localspl供應(yīng)商108的LocalFindFirstPrinterChangeNotification。
步驟116localspl調(diào)用路由器函數(shù)SetupReplyNotification 步驟117路由器函數(shù)SetupReplyNotification調(diào)用客戶機(jī)假脫機(jī)系統(tǒng)上的RpcReplyOpenPrinter來設(shè)置用于通知的反向信道。
如果在本地假脫機(jī)系統(tǒng)上有改變,本地假脫機(jī)系統(tǒng)告知客戶機(jī),如圖4A中所概述的 步驟121localspl調(diào)用將調(diào)用遠(yuǎn)程假脫機(jī)系統(tǒng)路由器函數(shù)PartialReplyPrinterChangeNotification的SetPrinterChange步驟122PartialReplyPrinterChangeNotification將累積改變,另一線程ThreadNotifyProcessJob將調(diào)用RpcRouterReplyPrinter到客戶機(jī)假脫機(jī)系統(tǒng)。
步驟123RpcRouterReplyPrinter的客戶機(jī)假脫機(jī)系統(tǒng)將調(diào)用路由器函數(shù)RouterReplyPrinter->ReplyPrinterChangeNotificationWorker-->ThreadNotify。ReplyPrinterChangeNotificationWorker將調(diào)用SetEvent(pChange->hEvent)來喚醒客戶機(jī)。
步驟124客戶應(yīng)用程序?qū)⒄{(diào)用RpcFindNextPrinterChangeNotification。
步驟125調(diào)用將填充通知數(shù)據(jù)到客戶機(jī)以及復(fù)位到監(jiān)聽狀態(tài)的路由器函數(shù)RouterFindNextPrinterChangeNotification。
現(xiàn)有技術(shù)打印假脫機(jī)系統(tǒng)的概括有助于識(shí)別具有函數(shù)FFPCN的現(xiàn)有技術(shù)實(shí)現(xiàn)方式的問題。服務(wù)器100需要設(shè)置用于任何一種監(jiān)聽客戶機(jī)的信道。這有可擴(kuò)展性擔(dān)心,因?yàn)槊總€(gè)信道將浪費(fèi)服務(wù)器打印假脫機(jī)系統(tǒng)100上的一定量核心存儲(chǔ)器。服務(wù)器將使用SYSTEM首先試圖連接到客戶機(jī),然后試圖使用該客戶機(jī)網(wǎng)絡(luò)證書。在Windows NT4中,SYSTEM是網(wǎng)絡(luò)上的空(NULL)證書,在Windows 2000及以上中,它是域\機(jī)器原理證書??蛻魴C(jī)網(wǎng)絡(luò)證書是空證書,除非允許授權(quán)。為能夠進(jìn)行該反向信道工作,當(dāng)創(chuàng)建命名管時(shí),準(zhǔn)予對(duì)所有匿名用戶的寫入許可。
本發(fā)明的示例性實(shí)施例的異步RPC在圖5中概述。該步驟是 步驟151客戶應(yīng)用程序104’調(diào)用151函數(shù)RpcClientFindFirstPrinterChangeNotification()。
步驟152客戶機(jī)假脫機(jī)系統(tǒng)中的路由器160將創(chuàng)建事件、將該調(diào)用發(fā)送到win32spl供應(yīng)商161。
步驟153win32spl供應(yīng)商161將進(jìn)行到遠(yuǎn)程假脫機(jī)系統(tǒng)100’的異步RpcAsyncFindFirstPrinterChangeNotification()調(diào)用。
步驟154遠(yuǎn)程假脫機(jī)系統(tǒng)中的localspl 162監(jiān)視該改變。
步驟155只要檢測(cè)到改變,在步驟153中,將調(diào)用RpcAsyncCompleteCall來結(jié)束異步調(diào)用。
步驟156在win32spl供應(yīng)商中,當(dāng)接收該結(jié)束調(diào)用時(shí),設(shè)置事件并重復(fù)步驟153至步驟155。
步驟157當(dāng)客戶機(jī)調(diào)用RpcFindNextPrinterChangeNotification()時(shí),本地假脫機(jī)系統(tǒng)將送回超高速緩存改變信息。
使用用于打印機(jī)通知的異步RPC,極大地簡化將改變數(shù)據(jù)發(fā)送至客戶應(yīng)用程序的過程。文字處理程序能調(diào)用新改變通知API。該調(diào)用是異步的,意味著快速返回到應(yīng)用程序。當(dāng)出現(xiàn)文字處理程序感興趣的事件時(shí),服務(wù)器打印假脫機(jī)系統(tǒng)100’將結(jié)束那個(gè)未決異步方法調(diào)用。假脫機(jī)系統(tǒng)客戶機(jī)將從完成異步調(diào)用獲取通知數(shù)據(jù)并遞送到處理程序,以及將調(diào)用具有相同函數(shù)的服務(wù)器假脫機(jī)系統(tǒng),再次獲取更多改變數(shù)據(jù)?;旧希褂卯惒椒椒ǖ慕Y(jié)束階段來傳送改變通知數(shù)據(jù)和使異步方法調(diào)用的循環(huán)連續(xù)地監(jiān)視打印機(jī)對(duì)象改變。
端口線程可擴(kuò)展性改進(jìn) 在服務(wù)器打印假脫機(jī)系統(tǒng)100’,當(dāng)結(jié)束端口接收第一作業(yè)時(shí),在函數(shù)CreatePortThread中創(chuàng)建結(jié)束端口線程210,以及當(dāng)沒有未決作業(yè)時(shí),由DestroyPortThread破壞結(jié)束端口線程210。當(dāng)準(zhǔn)備打印新作業(yè)時(shí),由SetEvent(pIniPort->Semaphore)喚醒。端口線程將調(diào)用打印處理器,打印處理器反過來加載GDI和打印機(jī)驅(qū)動(dòng)程序來提供打印作業(yè)(將它們轉(zhuǎn)換成打印機(jī)語言)。此步驟是CPU密集的。
在服務(wù)器打印假脫機(jī)系統(tǒng)100’處,用于打印作業(yè)的序列如下 1.開始打印作業(yè),調(diào)用StartDocPrinter-->localspl!LocalStartDocPrinter-->tcpmon!StartDocPort 2.開始每個(gè)頁面,調(diào)用StartPagePrinter。
3.將數(shù)據(jù)寫入頁,調(diào)用WritePrinter。
4.結(jié)束每頁,調(diào)用EndPagePrinter。-->localspl!LocalWritePrinter--->tcpmon!WritePort 根據(jù)需要,對(duì)多頁重復(fù)2、3和4。
結(jié)束該打印作業(yè),調(diào)用EndDocPrinter。-->tcpmon!WritePort andtcpmon!EndDocPort 減少線程--使用線程池來安排打印作業(yè) 打印假脫機(jī)系統(tǒng)100’實(shí)現(xiàn)開始新作業(yè)的調(diào)度程序204。調(diào)度程序調(diào)用函數(shù)QueueUserWorkItem來將作業(yè)(工作項(xiàng))放入第二端口線程池206中(參見圖7)。
tcpip監(jiān)視器連接到打印機(jī)13,用于服務(wù)作業(yè)。Tcpmon!StartDocPort當(dāng)連接失敗時(shí),返回特定錯(cuò)誤。如果StartDocPort失敗,調(diào)度程序204再循環(huán)工作項(xiàng),以及稍后嘗試該工作項(xiàng)(重啟該作業(yè))。
用于連接的另一優(yōu)化是如果存在另一未決作業(yè),打印假脫機(jī)系統(tǒng)能再使用服務(wù)器和打印機(jī)間的已建立的連接。
本發(fā)明的示例性實(shí)施例所提出的擔(dān)心是在線程池206中的長打印機(jī)作業(yè)花費(fèi)很長時(shí)間來結(jié)束以及將有力地阻塞該線程池206中的其他打印機(jī)。如果運(yùn)行線程費(fèi)時(shí)太久來解決這一擔(dān)心,線程池實(shí)現(xiàn)方式創(chuàng)建附加工作線程。
避免I/O阻塞 如上所述,假脫機(jī)系統(tǒng)為每個(gè)就緒作業(yè)創(chuàng)建工作項(xiàng)。如果服務(wù)器與1000臺(tái)打印機(jī)相連,將有最大1000個(gè)工作項(xiàng),轉(zhuǎn)化為非常少的線程來服務(wù)端口線程池206中的工作項(xiàng)。
至于每個(gè)工作項(xiàng),以簡單明了的方式,將線程池206實(shí)現(xiàn)為 PortThreadWorker(){ProcessJobData();SendDatatoPrinter(Printer1Address,data1,overlapped1);ProcessJobData();SendDatatoPrinter(Printer1Address,data1,overlapped2);ProcessJobData();SendDatatoPrinter(Printer1Address,data1,overlapped3);ProcessJobData();SendDatatoPrinter(Printer1Address,data1,overlapped4);ProcessJobData();} 對(duì)示例性tcpip監(jiān)視器,對(duì)每個(gè)tcpmon!WritePort,假脫機(jī)系統(tǒng)將返回直到完成重疊的SendDatatoPrinter函數(shù)為止。
ProcessJobData()意指一些CPU密集的再現(xiàn)工作。為改進(jìn)網(wǎng)絡(luò)吞吐量,示例性實(shí)施例使用IO結(jié)束端口210來拾取異常IO通知。這導(dǎo)致有關(guān)每工作項(xiàng)的未完成的異步IO的數(shù)量的閾值。當(dāng)?shù)竭_(dá)那個(gè)閾值時(shí),線程進(jìn)入等待狀態(tài)。通過執(zhí)行該操作,在端口池206中的線程工作項(xiàng)繼續(xù)再現(xiàn)頁,沒有任何阻塞直到到達(dá)該閾值為止。
示例性系統(tǒng)使用窗口套接函數(shù)TransmitFile,用于原始數(shù)據(jù)傳送。I/O結(jié)束端口將拾取重疊的TransmitFile調(diào)用的通知。
PortThreadWorker() { TransmitFile(mysocket1,RawSpoolFile,overlapped); } 創(chuàng)建I/O結(jié)束端口線程基礎(chǔ)結(jié)構(gòu) I/O結(jié)束端口線程管理重疊調(diào)用狀態(tài)的所有工作項(xiàng)。
當(dāng)localspl初始化(或其他時(shí)間)時(shí),將創(chuàng)建IOCompletion端口。它還開始AsyncIoNotifyThread線程。示例性實(shí)施例使用每服務(wù)器的CPU的一種并行的工作線程。
I/O結(jié)束端口線程執(zhí)行這些功能1.從異步WSASend/TransmitFiles接受通知。2.如果WSASend/TransmitFile成功或失敗,空閑或再發(fā)。3.監(jiān)視用于每個(gè)端口的未完成的異步IO。
當(dāng)服務(wù)器準(zhǔn)備開始打印調(diào)度作業(yè)時(shí),localspl 162(圖5)調(diào)用tpcmon!StartDocPort以及在結(jié)束端口中傳遞。在tcpip監(jiān)視內(nèi),將創(chuàng)建套接并與結(jié)束端口相關(guān)聯(lián)。tcpip監(jiān)視將套接與I/O結(jié)束端口關(guān)聯(lián)。
使用重疊TransmitFile來發(fā)送原始作業(yè) 示例性實(shí)施例包括在服務(wù)器中的tcpip監(jiān)督程序、打印處理器程序和localspl 162程序中的變化。處理原始數(shù)據(jù)的現(xiàn)有技術(shù)方法具有較大開銷。示例性實(shí)施例調(diào)用重疊的TransmitFile來發(fā)送原始作業(yè)。
這避免重復(fù)地讀取文件、寫入存儲(chǔ)器和將數(shù)據(jù)發(fā)送到打印機(jī)的開銷。同時(shí),將期待改善吞吐量,特別是客戶機(jī)端再現(xiàn)。
需要一種另外的方法 TransmitRawJob(HANDLE hRawFile,LPWSAOVERLAPPED lpOverlapped) 使用重疊的WSASend來發(fā)送其他作業(yè) 在tcpipmon!WritePort中,調(diào)度程序204將通過每一輸入輸出數(shù)據(jù)調(diào)用WSASend。
perIoData包括用于WSASend序列的計(jì)數(shù)器。同時(shí),當(dāng)調(diào)用EndDocPort()時(shí),能將WSASend調(diào)用的數(shù)量返回到假脫機(jī)系統(tǒng)100’。假脫機(jī)系統(tǒng)能使用該數(shù)量來跟蹤是否完全發(fā)送作業(yè)。
當(dāng)在一個(gè)端口上完成一個(gè)作業(yè)時(shí),在該端口上發(fā)送下一作業(yè)以前,調(diào)度程序204需要確定成功地結(jié)束所有未完成的重疊的I/O。否則,需要重啟該作業(yè)。此外,在localspl!localwritePrinter中,在調(diào)用tcpip!writeport以前,調(diào)度程序204必須保證未決作業(yè)的數(shù)量不超過閾值。
另外,調(diào)度程序保存用在異步輸入/輸出中的空閑存儲(chǔ)器和鎖定存儲(chǔ)器的列表。
調(diào)度程序需要增加調(diào)用WritePortEx的附加方法。它具有調(diào)用LPWSAOVERLAPPED lpOverlapped的附加參數(shù)以便localspl 162能在每個(gè)IO數(shù)據(jù)(例如,WSASend的序列號(hào))中傳遞。
在端口線程206中,發(fā)現(xiàn)用于未完成的異步輸入/輸出請(qǐng)求的閾值的適合數(shù)值是可調(diào)參數(shù)。這取決于許多因素。如果閾值設(shè)置過低,線程池206會(huì)總是阻塞并等待發(fā)送數(shù)據(jù)。如果閾值設(shè)置過高,再現(xiàn)代碼能保持運(yùn)行,沒有任何阻塞,但需要更多存儲(chǔ)器來保存未決I/O數(shù)據(jù),以及將分配更多未分頁的(non-paged)池來跟蹤未決的輸入/輸出操作。用于這閾值的2-8的值是所建議的數(shù)量以便使用,以及最佳結(jié)果將根據(jù)LAN速度、數(shù)據(jù)生成速度、數(shù)據(jù)消耗速度等等改變。
為避免太多未決輸入輸出請(qǐng)求,還可以與其偽碼如下的以下最佳化結(jié)合。
PortThreadWorker(){dosomethingWSASend(mysocket1,data1,overlapped1);dosomething;<!-- SIPO <DP n="14"> --><dp n="d14"/>if(HasOverlappedloCompleted(lastoverlapped))WSASend(mysocket1,data2,overlapped2);ElseAccumulateData();dosomething;if(HasOverlappedloCompleted(lastoverlapped))WSASend(mysocket1,data3(+data2,overlapped3);ElseAccumulateData();dosomething;} 該技術(shù)不能完全替代I/O結(jié)束端口,因?yàn)樵贗/O數(shù)據(jù)消耗的情況下,不能趕上數(shù)據(jù)產(chǎn)生(這就是為什么需要重疊的多個(gè)I/O),它在I/O中具有未被未決數(shù)據(jù)充滿的間隙。
應(yīng)理解到,盡管已經(jīng)一定精確度地描述本發(fā)明,意圖本發(fā)明包括屬于未決權(quán)利要求書的精神或范圍的所公開的設(shè)計(jì)中的所有改進(jìn)和變化。
權(quán)利要求
1.一種用于在打印機(jī)上打印數(shù)據(jù)的系統(tǒng),其特征在于,包括
a)一個(gè)或多個(gè)客戶機(jī),包括具有打印能力的應(yīng)用程序;
b)服務(wù)器,實(shí)現(xiàn)用于協(xié)調(diào)通過一個(gè)或多個(gè)客戶機(jī)傳送到所述服務(wù)器的數(shù)據(jù)的打印的服務(wù)器打印假脫機(jī)系統(tǒng);以及
c)與服務(wù)器耦合的一個(gè)或多個(gè)打印機(jī),用于在服務(wù)器打印假脫機(jī)系統(tǒng)的指導(dǎo)下打?。黄渲?br>
d)客戶機(jī)包括通過到服務(wù)器打印假脫機(jī)系統(tǒng)的異步遠(yuǎn)程過程調(diào)用,與所述一個(gè)或多個(gè)打印機(jī)的至少一個(gè)通信的客戶機(jī)打印假脫機(jī)系統(tǒng)運(yùn)行。
2.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述服務(wù)器打印假脫機(jī)系統(tǒng)包括線程管理器,用于通過將數(shù)據(jù)傳送到多個(gè)打印機(jī),維護(hù)用于服務(wù)未決客戶端打印請(qǐng)求的線程池。
3.如權(quán)利要求1所述的系統(tǒng),其特征在于,服務(wù)器打印假脫機(jī)系統(tǒng)實(shí)現(xiàn)結(jié)束端口,其中來自客戶機(jī)呼入打印請(qǐng)求添加到結(jié)束端口。
4.如權(quán)利要求1所述的系統(tǒng),其特征在于,服務(wù)器打印假脫機(jī)系統(tǒng)維護(hù)等待服務(wù)的打印請(qǐng)求列表,以及打印請(qǐng)求的列表添加到共享服務(wù)器的處理器時(shí)間的線程池。
5.如權(quán)利要求4所述的系統(tǒng),其特征在于,創(chuàng)建多個(gè)線程池以便服務(wù)打印請(qǐng)求,以及通過單個(gè)處理器線程服務(wù)每個(gè)線程池。
6.如權(quán)利要求1所述的系統(tǒng),其特征在于,客戶機(jī)打印假脫機(jī)系統(tǒng)異步地實(shí)現(xiàn)某些過程,以及以同步方式實(shí)現(xiàn)一些所述過程。
7.如權(quán)利要求1所述的系統(tǒng),其特征在于,客戶機(jī)在多個(gè)異步請(qǐng)求中將數(shù)據(jù)發(fā)送到服務(wù)器打印假脫機(jī)系統(tǒng)直到完成整個(gè)打印作業(yè)為止。
8.如權(quán)利要求1所述的系統(tǒng),其特征在于,另外包括調(diào)度器,用于將打印請(qǐng)求發(fā)送到線程池以便處理。
9.如權(quán)利要求8所述的系統(tǒng),其特征在于,調(diào)度器從第一打印處理線程池選擇打印請(qǐng)求以及添加到第二打印處理線程池。
10.如權(quán)利要求8所述的系統(tǒng),其特征在于,調(diào)度器以重疊方式將原始數(shù)據(jù)發(fā)送到線程池。
11.一種在多個(gè)打印機(jī)上打印源自多個(gè)客戶機(jī)的數(shù)據(jù)的方法,其特征在于,包括
a)提供用于應(yīng)用程序的打印假脫機(jī)系統(tǒng)接口以便與客戶機(jī)通信,客戶機(jī)反過來與打印服務(wù)器通信;所述打印假脫機(jī)系統(tǒng)接口通過由一個(gè)或多個(gè)應(yīng)用程序發(fā)起的異步遠(yuǎn)程過程調(diào)用,允許一個(gè)或多個(gè)應(yīng)用程序調(diào)用打印服務(wù)器上的服務(wù)例程;以及
b)在打印服務(wù)器計(jì)算機(jī)上實(shí)現(xiàn)調(diào)度器,它通過一個(gè)或多個(gè)計(jì)算機(jī)應(yīng)用程序在發(fā)送到服務(wù)器的打印請(qǐng)求之間分配打印服務(wù)器運(yùn)行時(shí)間,響應(yīng)來自客戶機(jī)、用于打印服務(wù)的請(qǐng)求。
12.如權(quán)利要求11所述的方法,其特征在于,調(diào)度器實(shí)現(xiàn)一個(gè)或多個(gè)線程池來服務(wù)來自多個(gè)計(jì)算機(jī)應(yīng)用程序的打印請(qǐng)求。
13.如權(quán)利要求12所述的方法,其特征在于,通過結(jié)束端口實(shí)現(xiàn)一個(gè)或多個(gè)線程池,其中來自客戶端計(jì)算機(jī)的呼入打印請(qǐng)求添加到結(jié)束端口。
14.如權(quán)利要求11所述的方法,其特征在于,打印服務(wù)器維護(hù)等待服務(wù)的打印請(qǐng)求列表,以及打印請(qǐng)求的列表添加到共享一個(gè)打印服務(wù)器計(jì)算機(jī)的處理器時(shí)間的線程池。
15.如權(quán)利要求14所述的方法,其特征在于,創(chuàng)建多個(gè)線程池以便服務(wù)打印請(qǐng)求,以及通過單個(gè)處理器線程服務(wù)每個(gè)線程池。
16.如權(quán)利要求11所述的方法,其特征在于,客戶機(jī)打印假脫機(jī)系統(tǒng)接口異步地實(shí)現(xiàn)某些過程,以及以同步方式實(shí)現(xiàn)一些所述過程。
17.如權(quán)利要求11所述的方法,其特征在于,客戶機(jī)請(qǐng)求由在多個(gè)異步遠(yuǎn)程過程調(diào)用中順序地傳送到打印服務(wù)器計(jì)算機(jī)的多個(gè)打印請(qǐng)求組成的打印作業(yè)。
18.如權(quán)利要求11所述的方法,其特征在于,調(diào)度器將打印請(qǐng)求發(fā)送到線程池以便處理。
19.如權(quán)利要求18所述的方法,其特征在于,調(diào)度器從第一打印處理線程池選擇打印請(qǐng)求以及將請(qǐng)求添加到第二打印處理線程池。
20.一種在客戶機(jī)/服務(wù)器計(jì)算系統(tǒng)中用于實(shí)現(xiàn)服務(wù)器打印假脫機(jī)系統(tǒng)的方法,包括
a)通過將打印請(qǐng)求傳送到服務(wù)器打印假脫機(jī)系統(tǒng)的通信信道,接收異步客戶機(jī)打印請(qǐng)求;
b)將客戶機(jī)打印請(qǐng)求放入所述打印請(qǐng)求的隊(duì)列中;以及
c)通過將所述打印請(qǐng)求的子集放在線程池中,該線程池由在服務(wù)線程池中的打印請(qǐng)求間切換的處理器線程提供服務(wù),在所選擇的打印位置處從所述打印請(qǐng)求的子集安排打印輸出。
21.一種計(jì)算機(jī)可讀介質(zhì),用于實(shí)現(xiàn)用于在多個(gè)打印機(jī)上打印源自多個(gè)客戶機(jī)的數(shù)據(jù)的打印假脫機(jī)系統(tǒng),包括下述指令
a)提供用于計(jì)算機(jī)應(yīng)用程序的打印假脫機(jī)系統(tǒng)接口來與服務(wù)器通信;所述打印假脫機(jī)系統(tǒng)接口允許一個(gè)或多個(gè)應(yīng)用程序通過由所述應(yīng)用程序發(fā)起的異步遠(yuǎn)程過程調(diào)用來調(diào)用打印服務(wù)器上的服務(wù)例程;以及
b)在打印服務(wù)器上實(shí)現(xiàn)調(diào)度器,響應(yīng)來自客戶機(jī)、用于打印服務(wù)的請(qǐng)求以便通過多個(gè)計(jì)算機(jī)應(yīng)用程序在發(fā)送到服務(wù)器的打印請(qǐng)求之間分配服務(wù)器運(yùn)行時(shí)間。
22.如權(quán)利要求21所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,通過結(jié)束端口實(shí)現(xiàn)線程池,其中來自客戶機(jī)的呼入打印請(qǐng)求添加到結(jié)束端口。
23.如權(quán)利要求21所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,打印服務(wù)器維護(hù)等待服務(wù)的打印請(qǐng)求列表,以及打印請(qǐng)求的列表添加到共享服務(wù)器的處理器時(shí)間的線程池。
24.如權(quán)利要求23所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,創(chuàng)建多個(gè)線程池以便服務(wù)打印請(qǐng)求,以及通過單個(gè)處理器線程服務(wù)每個(gè)線程池。
25.如權(quán)利要求21所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,打印假脫機(jī)系統(tǒng)接口異步地實(shí)現(xiàn)某些過程,以及以同步方式實(shí)現(xiàn)一些所述過程。
26.如權(quán)利要求21所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,由在多個(gè)異步遠(yuǎn)程過程調(diào)用中順序地傳送到打印服務(wù)器的多個(gè)打印請(qǐng)求組成打印作業(yè)。
27.如權(quán)利要求21所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,調(diào)度器將打印請(qǐng)求發(fā)送到線程池以便處理。
28.如權(quán)利要求27所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,調(diào)度器從第一打印處理線程池選擇打印請(qǐng)求以及將請(qǐng)求添加到第二打印處理線程池。
全文摘要
示例性可升級(jí)打印假脫機(jī)系統(tǒng)有效地在打印機(jī)上打印數(shù)據(jù)以及與專用打印服務(wù)器一起使用最有效。本發(fā)明的一種用途是與服務(wù)具有需要打印數(shù)據(jù)的應(yīng)用程序的大量客戶端計(jì)算機(jī)的打印服務(wù)器一起。這些能包括但不局限于字處理應(yīng)用程序。服務(wù)器計(jì)算機(jī)具有實(shí)現(xiàn)用于協(xié)調(diào)由客戶端計(jì)算機(jī)發(fā)送給打印服務(wù)器的數(shù)據(jù)打印的服務(wù)器打印假脫機(jī)系統(tǒng)的軟件。多個(gè)打印機(jī)與服務(wù)器計(jì)算機(jī)耦合,用于在服務(wù)器打印假脫機(jī)系統(tǒng)的指導(dǎo)下打印。通過經(jīng)遠(yuǎn)程過程調(diào)用信道通信的異步過程,實(shí)現(xiàn)客戶機(jī)調(diào)用打印假脫機(jī)系統(tǒng)。在打印服務(wù)器處的線程池服務(wù)這些調(diào)用,而無需客戶機(jī)請(qǐng)求間不合理的上下文切換。
文檔編號(hào)G06F3/12GK1658145SQ20051000949
公開日2005年8月24日 申請(qǐng)日期2005年2月16日 優(yōu)先權(quán)日2004年2月13日
發(fā)明者A·M·特魯弗尼斯庫, K·S·西德基, M·劉 申請(qǐng)人:微軟公司