新四季網

可升級列印假脫機系統的製作方法

2023-05-03 06:40:41 4

專利名稱:可升級列印假脫機系統的製作方法
技術領域:
該公開系統涉及用在客戶機/伺服器計算應用程式中的改進的列印假脫機系統。

背景技術:
大規模商業機構的趨勢是將多個列印伺服器合併成單個伺服器。日益地,單個列印伺服器服務更多用戶以及連接到更多印表機上是一種趨勢。Windows2003伺服器對可擴展性加以改進,例如Windows2000伺服器可擴展性。本發明涉及對Windows 2003伺服器結構採用的、充當列印伺服器的技術的改進。
可擴展性問題的共通原因是在伺服器上具有競爭處理器時間的太多線程(或過程)。單個中央處理單元每次只能執行一個指令。如果工作交給後臺線程,當主線程或其他線程繼續運行時它不執行。當在鎖定或時間片分配上阻塞線程時,當線程激起時上下文切換浪費CPU資源。時常,為線程分配時間片,沒想到發現它被阻塞,然後再次立即睡眠。這一現象導致超高速緩存系統顛簸以及在上下文切換中花費的低效周期。
為給出說明,在服務800臺印表機和5000臺客戶機的伺服器(或多個伺服器)上運行測試。產生大約5000個並行線程。每當在過程中創建線程時,伺服器作業系統為線程的堆棧預留地址空間區域以及向該預留區域指定一些物理存儲器。對在Windows伺服器2003下運行的列印假脫機系統來說,這些參數可以是用於堆棧的262,144位元組以及x86處理器上每線程存儲器的32,768位元組。對5000個線程,將佔用5000×32768=164m的存儲器。5000個並行線程主要集中在2個位置,來自客戶機的RPC呼入呼叫和埠線程功能。本發明涉及降低由這兩個原因引起的伺服器資源消耗的努力。在名為「Win32 SystemsProgramming」的正文,Copyright 2001 Addison Wesley的第14章(Asynchronous Input/Output and Completion ports)中也論述了資源分配的這一問題。
Windows 2000和Windows XP中的當前客戶機列印假脫機系統使用遠程過程調用,該調用使用命名管(named pipe)端點與伺服器通信。使用命名管產生與可擴展性和安全性有關的問題。
·為支持到客戶機的列印通知,通過允許到客戶機的匿名連接,用於通知的反向信道(從伺服器到客戶機的通信)才是可能的。伺服器還需要維護到所有註冊客戶機的那些同時連接,這不利地影響伺服器的可擴展性。
·不期望在伺服器上允許大量空閒未決調用。通過命名管,等待應答的每個客戶機將具有在伺服器上運行的未決命名管,每個要求一定量核心存儲器。
假脫機系統接口具有以下問題 ·接口主要是同步接口,在伺服器端防止任何線程池。還影響在客戶機端執行任何異步操作的能力和影響我們的應用程式響應時間。
名為Inside Microsoft Windows 2000(Solomon等人Microsoft Press,版權2000)的正文具有與聯網有關的章節。The Solomon等人的正文提到「除在此所述的基於接口的同步功能調用外,Windows 2000 RPC還支持異步的RPC。異步RPC讓RPC應用程式執行功能而不是等待直到功能完成以便繼續處理為止。相反,應用程式能執行其他代碼以及稍後,當來自伺服器的響應已經到達時,RPC運行時間發事件對象信號,客戶機與異步調用關聯。客戶機能使用一套Win32功能,諸如WaitForSingleObject,來獲悉功能結束」。


發明內容
一種示例性系統可用於在印表機上有效地列印數據以及結合專用列印伺服器使用。本發明的一個用途支持服務具有需要同時列印數據的應用程式的大量客戶端計算機的列印伺服器。這些應用程式包括但不局限於字處理應用程式。伺服器計算機具有實現伺服器列印假脫機系統的軟體,用於協調客戶端計算機發送給列印伺服器的數據的列印。多個印表機通常通過網絡與伺服器耦合,用於在伺服器列印假脫機系統的指導下列印。
根據示例性系統,客戶端計算機包括在客戶端計算機上運行的客戶機列印假脫機系統,通過到伺服器列印假脫機系統的異步遠程過程調用,將數據發送到其中一個印表機。伺服器列印假脫機系統包括線程管理器,用於通過將數據傳送到多個印表機,維護用於服務未決客戶端計算機請求的線程池。
在客戶端計算機處的異步遠程過程調用減少伺服器性能的掛起或等待的應用程式的實例。如果列印伺服器處於重負載,客戶應用程式看起來具有故障,儘管它僅是等待來自列印伺服器的響應。
在伺服器處使用線程池勢必降低現有技術列印假脫機系統中出現的低效上下文切換。這種上下文切換請求伺服器資源以及導致低效使用列印伺服器處理器時間。
示例性系統使用TCP作為客戶機和伺服器間的傳送協議。TCP更快、具有豐富的功能、更可升級和穩固以及通常比命名管浪費較少資源。TCP在域和其他非標準環境上工作良好。TCP對防火牆更友好以及它在處理其通信量方面包含更少部件。
在結合附圖描述的系統的下述示例性實施例中更全面地描述本發明的這些和其他目的、優點和特徵。



圖1是用於實現本發明的示例性實施例的計算機系統的示意圖描述; 圖2是表示一起聯網的多個計算機的示意性描述,其中至少一個計算機包括用於實現根據本發明構造的列印假脫機系統的軟體; 圖3是根據本發明實現基於遠程過程調用的列印假脫機系統的分層軟體部件的示意性描述; 圖4和4A是用於客戶機和伺服器間的印表機通知的過程內通信如何工作的現有技術描述; 圖5是依照本發明的示範性實施例,客戶機和伺服器列印假脫機系統間的過程內通信的描述; 圖6是依照本發明的示例性實施例,用於服務客戶機請求的線程池的操作的描述;以及 圖7是用於將列印作業增加到用於服務列印請求的線程池的調度程序的示意性描述。

具體實施例方式 圖2是具有通過網絡通信與伺服器12通信的多個工作站11的網絡10的描述。伺服器在網絡上與多個印表機13通信用於服務列印請求,以及還包括通過並行接口與印表機13a耦合的接口。網絡上的通信是通過安裝在工作站和伺服器中的傳統乙太網交換機和乙太網卡的有線以及通過實現已知無線通信標準的無線路由器的無線。因此例如,膝上型計算機14能夠在沒有物理連接到網絡硬體的情況下,與伺服器12通信。工作站(或膝上型電腦)能通信和控制在伺服器上實現的列印假脫機系統以便應在工作站上執行的應用程式之一的請求來列印。例如,字處理應用軟體通過作業系統暴露於應用程式的Win32應用程式接口傳送它的請求。儘管Win32是目前用於Windows商標作業系統的優選應用接口,但是本發明設想將請求發送到伺服器12的其他裝置。
本發明的示例性實施例使用過程內通信的客戶機/伺服器模型,用於實現列印假脫機系統。更具體地說,在一個示範性的實施例中,工作站11上的在客戶機過程通過網絡10與一個或多個列印伺服器12通信以便以比現有技術列印系統有效和穩定的方式列印。圖3是在列印假脫機系統處實現基於遠程過程調用(在此稱為RPC)的隊列作業過程的伺服器和客戶機的交互作用的示意性描述。在圖3中,看到客戶機15通過網絡(諸如圖2的網絡)與伺服器16交互作用。在一個例子中,客戶機是在工作站上運行的軟體,伺服器軟體是在伺服器計算機12上運行的軟體。儘管伺服器軟體是在專用列印伺服器上運行的軟體,但是依照本發明的示範性實施例,工作站也實現充當伺服器的列印假脫機系統。因此,在另一應用中,依照客戶機/伺服器模型,客戶機和伺服器在相同的計算機上執行。例如,工作站上的列印假脫機系統使用異步過程調用直接將列印請求傳送到本地印表機。
利用RPC過程內通信允許在本地機器(諸如工作站11之一)上執行的應用程式調用遠程機器(諸如圖2中的伺服器12)上的過程。調用文字處理程序不涉及列印過程調用在伺服器上執行的代碼的事實。對本地應用程式,看來似乎過程完全在本地計算機上運行。RPC提供聯網操作的過程瀏覽而不是以傳送為中心的瀏覽,因此,簡化分布式應用程式的開發和配置。用在Windows作業系統中的RPC過程與開放軟體基礎(Open Software Foundation)分布式計算環境兼容。
聯網軟體傳統上在處理的輸入輸出模型周圍結構化。在例如Windows 2000中,當應用程式發出遠程輸入輸出請求時,啟動網絡操作。作業系統處理通過將請求轉發到充當遠程文件系統的重定向器來處理該請求,以便客戶機與對客戶機來說不可見的遠程文件系統交互作用。
遠程過程調用(RPC)實現稍有不同方法。RPC應用與其他的結構化應用類似,它們調用過程和過程庫來執行特定的任務。然而,不同在於通過到應用程式的接口暴露的程序可以調用在遠程計算機上執行的過程。遠程客戶機通過網絡與伺服器通信。這完全不同於與在相同的計算機上的伺服器通信的本地客戶機。
計算機系統 圖1描述例如能表示網絡10上的工作站11或者伺服器12的結構的示例性數據處理系統。該系統包括傳統計算機20形式的通用計算裝置,包括一個或多個處理單元21,系統存儲器22,以及將包括系統存儲器的各種系統部件耦合到處理單元21的系統總線23。系統總線23可以是任何幾種類型的總線結構,包括存儲器總線或存儲控制器、外圍總線,以及使用各種總線結構的任何一種的本地總線。
系統存儲器包括只讀存儲器(ROM)24,以及隨機存取存儲器(RAM)25。包含諸如在啟動期間,有助於在計算機20中的元件間傳送信息的基本例程的基本輸入/輸出系統26(BIOS)存儲在ROM 24中。
計算機20進一步包括硬碟驅動器27,用於從未示出的硬碟讀取或寫入硬碟、用於從可拆卸磁碟29讀取或寫入可拆卸磁碟29的磁碟驅動器、以及用於從可拆卸光碟31(諸如CD ROM或其他光學介質)讀取或寫入的光碟機30。分別通過硬碟驅動器接口32、磁碟驅動接口33和光碟機接口34,使硬碟驅動器27、磁碟驅動28和光碟機30連接到系統總線23上。驅動器和它們的相關的計算機可讀介質提供用於計算機20的計算機可讀指令、數據結構、程序模塊和其他數據的非易失存儲器。儘管在此所述的示例性環境採用硬碟、可拆卸磁碟29和可拆卸光碟31,但是本領域的技術人員應意識到能存儲可由計算機訪問的數據的其他的類型的計算機可讀介質,諸如磁帶盒、快閃記憶體卡、數字視頻盤、Bernoulli盒式磁帶機、隨機存取存儲器(RAM)、只讀存儲器(ROM)等等也可以用在該示例性操作環境中。
多個程序模塊可以存儲在硬碟、磁碟29、光碟31、ROM 24或RAM 25上,包括作業系統35、一個或多個應用程式36、其他程序模塊37和程序數據38。用戶可以通過輸入裝置,諸如鍵盤40和指示裝置42將命令和信息輸入計算機20中。其他輸入裝置(未示出)可以包括麥克風、遊戲杆、遊戲墊、衛星反射器、掃描器等等。這些和其他輸入裝置通常通過與系統總線耦合的串行埠接口46連接到處理單元21上,但可以通過其他接口,諸如並行埠、遊戲埠或通用串行總線(USB)連接。監視器47或其他類型顯示設備也經接口,諸如視頻適配器48連接到系統總線23上。除監視器以外,個人計算機(PC)通常包括其他外圍輸出設備(未示出),諸如揚聲器和印表機。
在圖1中所述的計算機20通常使用到一個或多個遠程計算機,諸如遠程計算機49的邏輯連接,在聯網環境中操作。遠程計算機49可以是另一PC、伺服器、路由器、網絡PC、對等設備或其他公用網絡節點,以及通常包括相對於計算機20,如上所述的許多或所有元件,儘管僅在圖1中示例說明存儲器存儲設備50。圖1所述的邏輯連接包括區域網(LAN)51和廣域網(WAN)52。這種聯網環境在辦公室、企業廣泛的計算機網絡、內聯網和網際網路中很常見。
當用在區域網聯網環境中時,計算機20通過網絡接口或適配器53連接到局部網51。當用在WAN聯網環境中時,計算機20通常包括數據機54和用於在WAN 52,諸如網際網路上確立通信的其他裝置。可以是內置或外置的數據機54通過串行埠接口46連接到系統總線23上。在聯網環境中,相對於計算機20所述的程序模塊或其一部分可以存儲在遠程存儲器存儲裝置中。將理解到所示的網絡連接是示例性的以及可以使用在計算機間建立通信鏈路的其他裝置。
在Windows 2000(以及稍後版本)作業系統環境中,為編寫RPC應用程式,作業系統程式設計師決定哪些過程將本地執行以及哪些將遠程執行。當應用程式運行時,它調用本地過程以及不存在於本地計算機上的過程。為處理後一情況,應用程式連結到包含存根(stub)過程的本地靜態連結庫或DLL,一個存根過程用於每個遠程過程。存根過程具有與遠程過程相同的名稱和使用相同的接口,但除了執行所要求的操作,存根採用傳遞給它的參數和編排它們,用於在網絡上傳輸。編排參數的過程指的是以特殊的方式排序和封裝參數以便適合網絡鏈路,諸如解析基準和採集指示器所指的任何數據結構的副本。
然後存根調用駐留遠程過程的計算機的RPC運行時間過程,確定使用哪一個傳送機制,以及將請求發送到本地傳送軟體,用於傳輸給遠程伺服器。當遠程伺服器接收該RPC請求時,它去編排(unmarshal)這些參數,重構原始過程調用以及調用該過程。當伺服器結束服務客戶機調用時,執行逆順序以及將結果返回給調用程序。在Windows作業系統環境中,通過Microsoft接口定義語言編譯程序簡化創建RPC應用的過程。編譯IDL文件以及生成客戶機端和伺服器端的存根例程,而且,主文件將包括在應用程式中。希望調用現有RPC應用程式的程式設計師僅需要編寫軟體的客戶機端和將應用程式連結到本地RPC運行時間設備上。
Windows 2000網絡服務目前包括RPC應用程式,該RPC應用程式包括命名管的網絡傳輸供應商DLLs、NetBIOS和TCP/IP。服務客戶機的請求的網絡10上的伺服器,諸如伺服器12通過現用目錄(TM),使得它們的存在在網絡上已知。
伺服器線程池 (在伺服器12上執行的軟體中實現的)列印假脫機系統100通過維護用於服務那些請求的線程池202,響應多個客戶機請求(潛在地,同時數千的這種請求)。不同於為每個客戶機列印請求分配伺服器線程的現有技術,根據本發明的示例性實施例,以高效的方式,維護能響應多個客戶機列印請求的線程池,而沒有對伺服器資源的不合理要求。
基於示例性RPC的列印假脫機系統包括從第一線程池202a提取作業的調度程序204並實現基於伺服器上結束埠210的第二線程池202b。結束埠是等待埠的一組重疊的處理和線程。使用單個Win32接口函數CreateIOCompletionPort來創建埠和將處理增加到埠上。
對每個呼入異步印表機函數,假脫機系統100』將一項增加到由線程服務的隊列中。然後,異步印表機函數將立即返回到客戶機。假脫機系統100』具有多個工作線程來服務來自調度程序204的排隊等候的要求,當一個線程結束請求隊列中一個請求的處理時,通過異步RPC完成調用函數將結果發送給客戶機。然後,那個線程將從該隊列拾取下一項和處理其請求。取決於隊列的大小,在該線程池中的線程的數量可以增減來管理該負載。
實現高性能的伺服器列印假脫機系統要求實現高效的線程模型。具有或太少或太多列印假脫機系統線程來處理客戶機請求會導致性能問題。列印假脫機系統的示例性實施例的目的是通過使其線程避免不必要阻塞,同時最大化多個有效線程中的並行性,儘可能少地發生上下文切換。
通過各種請求列印服務的客戶機處理,示例性列印假脫機系統100』使用I/O結束執行對象210,其輸出到Win32作為結束埠,作為用於傳遞到假脫機系統100的列印作業完成的焦點。
令人遺憾地,由於各種原因,沒有快速地結束由該列印假脫機系統100實現的一些函數。這些包括全局註冊鎖定和調用其他緩慢的函數。當那些函數阻塞時,維護線程池106的RPC運行時間將創建另一線程來服務由調度程序發送的新的呼入客戶機。
根據本發明,識別由伺服器費很長時間服務的函數和改變它們以在客戶機處異步地執行。現有技術系統的分析提供了來自源自於花費很長時間結束的假脫機系統本身的函數NOT的數據。識別這些函數是在客戶機處選擇哪些函數實現為異步接口方法的一種方式。
在該示例性系統中,與現有技術winspool接口並行實現新的接口。在實現該新的接口中,一些函數是異步的,以及一些函數是同步的。新接口具有異步和同步函數以及與將命名管用作它的傳輸協議的舊同步接口並排運行。使用不同的方法名稱來避免名稱衝突。
TCP/IP傳輸和安全模型 在現有技術列印假脫機系統中用作傳輸協議的命名管具有靜態端點。本發明的示例性實施例不使用命名管,相反依賴於TCP/IP傳輸協議,用於在不同機器,諸如圖2的工作站11和伺服器12上運行的客戶機和伺服器間傳送。儘管目前本發明優選實施例使用TCP/IP,其他實施例能使用其他的傳輸協議,諸如超級文本傳輸協議(http)等等。
對TCP/IP,示例性系統使用動態端點。伺服器端寄存協議序列,然後獲得綁定向量(binding vector)。最後,伺服器記錄端點。
為確保過程僅在特定的協議序列上調用,示例性系統寄存安全性回調函數,和在那個函數中,檢查調用哪個協議序列。
目前Windows  RPC提供基於SSPI(安全性支持供應商接口)的安全模型,它提供高級安全性並由本發明的示例性實施例使用。
示例性系統在伺服器列印假脫機系統中創建線程池。每個呼入異步函數調用使假脫機系統將工作項放入線程池202a中並立即返回到客戶機。稍後由第二線程池202b安排和執行該工作項。列印假脫機系統排隊該線程池中的工作項。
客戶機調用異步方法 本地客戶機調用新的異步接口方法,由此使異步公共API暴露於應用程式,諸如文字處理程序。假脫機系統客戶機也調用該新的異步方法,因此使一些異步方法API暴露於應用程式。例如,文字處理程序能調用示例性異步方法,諸如GetPrinterData的異步版本,以檢驗某一印表機的狀態。該函數將通過本地計算機中的假脫機系統和遠程伺服器中的假脫機系統。在該伺服器假脫機系統中,實質上在假脫機系統工作池202a中添加服務請求以及立即返回給文字處理程序。然後文字處理程序進入進行到執行其他任務,以及當準備拾取印表機數據時被告知。
現有技術印表機通知很複雜。如果例如,應用程式希望監視印表機狀態改變來確定例如作業是否結束,它調用函數Find First Printer ChangeNotification(在此稱為FFPCN)。該函數將調用假脫機系統以及假脫機系統與伺服器建立通信信道。稍後,當文字處理程序感興趣的事件發生時,伺服器假脫機系統將事件改變通知發送回假脫機系統客戶機。建立和維護該通信信道浪費伺服器中的大量資源以及阻止伺服器假脫機系統有效地同時處理大量客戶機。
在現有技術設計中,伺服器通過反向信道連續地將改變數據發送到客戶機。winspool客戶機高速緩存改變數據直到對函數FFPCN的下一調用為止。如果使用異步RPC,改變數據封裝在異步調用完成數據中,以及當先前的異步RPC調用完成時,客戶機將向印表機發出用於更多通知數據的另一異步RPC調用。
圖4概述FFPCN函數的現有技術版本。
步驟111客戶應用程式104調用函數RpcClientFindFirstPrinterChangeNotification。
步驟112客戶機假脫機系統路由器105運行函數RouterFindFirstPrinterChangeNotification,調用win32供應商106的函數RemoteFindFirstPrinterChangeNotification。
步驟113Win32供應商調用路由器函數CallRouterFindFirstPrinterChangeNotification。
步驟114客戶機假脫機系統路由器調用遠程假脫機系統100上的RpcRemoteFindFirstPrinterChangeNotificationEx。
步驟115遠程假脫機系統107函數RemoteFindFirstPrinterChangeNotification調用localspl供應商108的LocalFindFirstPrinterChangeNotification。
步驟116localspl調用路由器函數SetupReplyNotification 步驟117路由器函數SetupReplyNotification調用客戶機假脫機系統上的RpcReplyOpenPrinter來設置用於通知的反向信道。
如果在本地假脫機系統上有改變,本地假脫機系統告知客戶機,如圖4A中所概述的 步驟121localspl調用將調用遠程假脫機系統路由器函數PartialReplyPrinterChangeNotification的SetPrinterChange步驟122PartialReplyPrinterChangeNotification將累積改變,另一線程ThreadNotifyProcessJob將調用RpcRouterReplyPrinter到客戶機假脫機系統。
步驟123RpcRouterReplyPrinter的客戶機假脫機系統將調用路由器函數RouterReplyPrinter->ReplyPrinterChangeNotificationWorker-->ThreadNotify。ReplyPrinterChangeNotificationWorker將調用SetEvent(pChange->hEvent)來喚醒客戶機。
步驟124客戶應用程式將調用RpcFindNextPrinterChangeNotification。
步驟125調用將填充通知數據到客戶機以及復位到監聽狀態的路由器函數RouterFindNextPrinterChangeNotification。
現有技術列印假脫機系統的概括有助於識別具有函數FFPCN的現有技術實現方式的問題。伺服器100需要設置用於任何一種監聽客戶機的信道。這有可擴展性擔心,因為每個信道將浪費伺服器列印假脫機系統100上的一定量核心存儲器。伺服器將使用SYSTEM首先試圖連接到客戶機,然後試圖使用該客戶機網絡證書。在Windows NT4中,SYSTEM是網絡上的空(NULL)證書,在Windows 2000及以上中,它是域\機器原理證書。客戶機網絡證書是空證書,除非允許授權。為能夠進行該反向信道工作,當創建命名管時,準予對所有匿名用戶的寫入許可。
本發明的示例性實施例的異步RPC在圖5中概述。該步驟是 步驟151客戶應用程式104』調用151函數RpcClientFindFirstPrinterChangeNotification。
步驟152客戶機假脫機系統中的路由器160將創建事件、將該調用發送到win32spl供應商161。
步驟153win32spl供應商161將進行到遠程假脫機系統100』的異步RpcAsyncFindFirstPrinterChangeNotification調用。
步驟154遠程假脫機系統中的localspl 162監視該改變。
步驟155隻要檢測到改變,在步驟153中,將調用RpcAsyncCompleteCall來結束異步調用。
步驟156在win32spl供應商中,當接收該結束調用時,設置事件並重複步驟153至步驟155。
步驟157當客戶機調用RpcFindNextPrinterChangeNotification時,本地假脫機系統將送回超高速緩存改變信息。
使用用於印表機通知的異步RPC,極大地簡化將改變數據發送至客戶應用程式的過程。文字處理程序能調用新改變通知API。該調用是異步的,意味著快速返回到應用程式。當出現文字處理程序感興趣的事件時,伺服器列印假脫機系統100』將結束那個未決異步方法調用。假脫機系統客戶機將從完成異步調用獲取通知數據並遞送到處理程序,以及將調用具有相同函數的伺服器假脫機系統,再次獲取更多改變數據。基本上,使用異步方法的結束階段來傳送改變通知數據和使異步方法調用的循環連續地監視印表機對象改變。
埠線程可擴展性改進 在伺服器列印假脫機系統100』,當結束埠接收第一作業時,在函數CreatePortThread中創建結束埠線程210,以及當沒有未決作業時,由DestroyPortThread破壞結束埠線程210。當準備列印新作業時,由SetEvent(pIniPort->Semaphore)喚醒。埠線程將調用列印處理器,列印處理器反過來加載GDI和印表機驅動程序來提供列印作業(將它們轉換成印表機語言)。此步驟是CPU密集的。
在伺服器列印假脫機系統100』處,用於列印作業的序列如下 1.開始列印作業,調用StartDocPrinter-->localspl!LocalStartDocPrinter-->tcpmon!StartDocPort 2.開始每個頁面,調用StartPagePrinter。
3.將數據寫入頁,調用WritePrinter。
4.結束每頁,調用EndPagePrinter。-->localspl!LocalWritePrinter--->tcpmon!WritePort 根據需要,對多頁重複2、3和4。
結束該列印作業,調用EndDocPrinter。-->tcpmon!WritePort andtcpmon!EndDocPort 減少線程--使用線程池來安排列印作業 列印假脫機系統100』實現開始新作業的調度程序204。調度程序調用函數QueueUserWorkItem來將作業(工作項)放入第二埠線程池206中(參見圖7)。
tcpip監視器連接到印表機13,用於服務作業。Tcpmon!StartDocPort當連接失敗時,返回特定錯誤。如果StartDocPort失敗,調度程序204再循環工作項,以及稍後嘗試該工作項(重啟該作業)。
用於連接的另一優化是如果存在另一未決作業,列印假脫機系統能再使用伺服器和印表機間的已建立的連接。
本發明的示例性實施例所提出的擔心是在線程池206中的長印表機作業花費很長時間來結束以及將有力地阻塞該線程池206中的其他印表機。如果運行線程費時太久來解決這一擔心,線程池實現方式創建附加工作線程。
避免I/O阻塞 如上所述,假脫機系統為每個就緒作業創建工作項。如果伺服器與1000臺印表機相連,將有最大1000個工作項,轉化為非常少的線程來服務埠線程池206中的工作項。
至於每個工作項,以簡單明了的方式,將線程池206實現為 PortThreadWorker{ProcessJobData;SendDatatoPrinter(Printer1Address,data1,overlapped1);ProcessJobData;SendDatatoPrinter(Printer1Address,data1,overlapped2);ProcessJobData;SendDatatoPrinter(Printer1Address,data1,overlapped3);ProcessJobData;SendDatatoPrinter(Printer1Address,data1,overlapped4);ProcessJobData;} 對示例性tcpip監視器,對每個tcpmon!WritePort,假脫機系統將返回直到完成重疊的SendDatatoPrinter函數為止。
ProcessJobData意指一些CPU密集的再現工作。為改進網絡吞吐量,示例性實施例使用IO結束埠210來拾取異常IO通知。這導致有關每工作項的未完成的異步IO的數量的閾值。當到達那個閾值時,線程進入等待狀態。通過執行該操作,在埠池206中的線程工作項繼續再現頁,沒有任何阻塞直到到達該閾值為止。
示例性系統使用窗口套接函數TransmitFile,用於原始數據傳送。I/O結束埠將拾取重疊的TransmitFile調用的通知。
PortThreadWorker { TransmitFile(mysocket1,RawSpoolFile,overlapped); } 創建I/O結束埠線程基礎結構 I/O結束埠線程管理重疊調用狀態的所有工作項。
當localspl初始化(或其他時間)時,將創建IOCompletion埠。它還開始AsyncIoNotifyThread線程。示例性實施例使用每伺服器的CPU的一種並行的工作線程。
I/O結束埠線程執行這些功能1.從異步WSASend/TransmitFiles接受通知。2.如果WSASend/TransmitFile成功或失敗,空閒或再發。3.監視用於每個埠的未完成的異步IO。
當伺服器準備開始列印調度作業時,localspl 162(圖5)調用tpcmon!StartDocPort以及在結束埠中傳遞。在tcpip監視內,將創建套接並與結束埠相關聯。tcpip監視將套接與I/O結束埠關聯。
使用重疊TransmitFile來發送原始作業 示例性實施例包括在伺服器中的tcpip監督程序、列印處理器程序和localspl 162程序中的變化。處理原始數據的現有技術方法具有較大開銷。示例性實施例調用重疊的TransmitFile來發送原始作業。
這避免重複地讀取文件、寫入存儲器和將數據發送到印表機的開銷。同時,將期待改善吞吐量,特別是客戶機端再現。
需要一種另外的方法 TransmitRawJob(HANDLE hRawFile,LPWSAOVERLAPPED lpOverlapped) 使用重疊的WSASend來發送其他作業 在tcpipmon!WritePort中,調度程序204將通過每一輸入輸出數據調用WSASend。
perIoData包括用於WSASend序列的計數器。同時,當調用EndDocPort時,能將WSASend調用的數量返回到假脫機系統100』。假脫機系統能使用該數量來跟蹤是否完全發送作業。
當在一個埠上完成一個作業時,在該埠上發送下一作業以前,調度程序204需要確定成功地結束所有未完成的重疊的I/O。否則,需要重啟該作業。此外,在localspl!localwritePrinter中,在調用tcpip!writeport以前,調度程序204必須保證未決作業的數量不超過閾值。
另外,調度程序保存用在異步輸入/輸出中的空閒存儲器和鎖定存儲器的列表。
調度程序需要增加調用WritePortEx的附加方法。它具有調用LPWSAOVERLAPPED lpOverlapped的附加參數以便localspl 162能在每個IO數據(例如,WSASend的序列號)中傳遞。
在埠線程206中,發現用於未完成的異步輸入/輸出請求的閾值的適合數值是可調參數。這取決於許多因素。如果閾值設置過低,線程池206會總是阻塞並等待發送數據。如果閾值設置過高,再現代碼能保持運行,沒有任何阻塞,但需要更多存儲器來保存未決I/O數據,以及將分配更多未分頁的(non-paged)池來跟蹤未決的輸入/輸出操作。用於這閾值的2-8的值是所建議的數量以便使用,以及最佳結果將根據LAN速度、數據生成速度、數據消耗速度等等改變。
為避免太多未決輸入輸出請求,還可以與其偽碼如下的以下最佳化結合。
PortThreadWorker{dosomethingWSASend(mysocket1,data1,overlapped1);dosomething;<!-- SIPO -->if(HasOverlappedloCompleted(lastoverlapped))WSASend(mysocket1,data2,overlapped2);ElseAccumulateData;dosomething;if(HasOverlappedloCompleted(lastoverlapped))WSASend(mysocket1,data3(+data2,overlapped3);ElseAccumulateData;dosomething;} 該技術不能完全替代I/O結束埠,因為在I/O數據消耗的情況下,不能趕上數據產生(這就是為什麼需要重疊的多個I/O),它在I/O中具有未被未決數據充滿的間隙。
應理解到,儘管已經一定精確度地描述本發明,意圖本發明包括屬於未決權利要求書的精神或範圍的所公開的設計中的所有改進和變化。
權利要求
1.一種用於在印表機上列印數據的系統,其特徵在於,包括
a)一個或多個客戶機,包括具有列印能力的應用程式;
b)伺服器,實現用於協調通過一個或多個客戶機傳送到所述伺服器的數據的列印的伺服器列印假脫機系統;以及
c)與伺服器耦合的一個或多個印表機,用於在伺服器列印假脫機系統的指導下列印;其中
d)客戶機包括通過到伺服器列印假脫機系統的異步遠程過程調用,與所述一個或多個印表機的至少一個通信的客戶機列印假脫機系統運行。
2.如權利要求1所述的系統,其特徵在於,所述伺服器列印假脫機系統包括線程管理器,用於通過將數據傳送到多個印表機,維護用於服務未決客戶端列印請求的線程池。
3.如權利要求1所述的系統,其特徵在於,伺服器列印假脫機系統實現結束埠,其中來自客戶機呼入列印請求添加到結束埠。
4.如權利要求1所述的系統,其特徵在於,伺服器列印假脫機系統維護等待服務的列印請求列表,以及列印請求的列表添加到共享伺服器的處理器時間的線程池。
5.如權利要求4所述的系統,其特徵在於,創建多個線程池以便服務列印請求,以及通過單個處理器線程服務每個線程池。
6.如權利要求1所述的系統,其特徵在於,客戶機列印假脫機系統異步地實現某些過程,以及以同步方式實現一些所述過程。
7.如權利要求1所述的系統,其特徵在於,客戶機在多個異步請求中將數據發送到伺服器列印假脫機系統直到完成整個列印作業為止。
8.如權利要求1所述的系統,其特徵在於,另外包括調度器,用於將列印請求發送到線程池以便處理。
9.如權利要求8所述的系統,其特徵在於,調度器從第一列印處理線程池選擇列印請求以及添加到第二列印處理線程池。
10.如權利要求8所述的系統,其特徵在於,調度器以重疊方式將原始數據發送到線程池。
11.一種在多個印表機上列印源自多個客戶機的數據的方法,其特徵在於,包括
a)提供用於應用程式的列印假脫機系統接口以便與客戶機通信,客戶機反過來與列印伺服器通信;所述列印假脫機系統接口通過由一個或多個應用程式發起的異步遠程過程調用,允許一個或多個應用程式調用列印伺服器上的服務例程;以及
b)在列印伺服器計算機上實現調度器,它通過一個或多個計算機應用程式在發送到伺服器的列印請求之間分配列印伺服器運行時間,響應來自客戶機、用於列印服務的請求。
12.如權利要求11所述的方法,其特徵在於,調度器實現一個或多個線程池來服務來自多個計算機應用程式的列印請求。
13.如權利要求12所述的方法,其特徵在於,通過結束埠實現一個或多個線程池,其中來自客戶端計算機的呼入列印請求添加到結束埠。
14.如權利要求11所述的方法,其特徵在於,列印伺服器維護等待服務的列印請求列表,以及列印請求的列表添加到共享一個列印伺服器計算機的處理器時間的線程池。
15.如權利要求14所述的方法,其特徵在於,創建多個線程池以便服務列印請求,以及通過單個處理器線程服務每個線程池。
16.如權利要求11所述的方法,其特徵在於,客戶機列印假脫機系統接口異步地實現某些過程,以及以同步方式實現一些所述過程。
17.如權利要求11所述的方法,其特徵在於,客戶機請求由在多個異步遠程過程調用中順序地傳送到列印伺服器計算機的多個列印請求組成的列印作業。
18.如權利要求11所述的方法,其特徵在於,調度器將列印請求發送到線程池以便處理。
19.如權利要求18所述的方法,其特徵在於,調度器從第一列印處理線程池選擇列印請求以及將請求添加到第二列印處理線程池。
20.一種在客戶機/伺服器計算系統中用於實現伺服器列印假脫機系統的方法,包括
a)通過將列印請求傳送到伺服器列印假脫機系統的通信信道,接收異步客戶機列印請求;
b)將客戶機列印請求放入所述列印請求的隊列中;以及
c)通過將所述列印請求的子集放在線程池中,該線程池由在服務線程池中的列印請求間切換的處理器線程提供服務,在所選擇的列印位置處從所述列印請求的子集安排列印輸出。
21.一種計算機可讀介質,用於實現用於在多個印表機上列印源自多個客戶機的數據的列印假脫機系統,包括下述指令
a)提供用於計算機應用程式的列印假脫機系統接口來與伺服器通信;所述列印假脫機系統接口允許一個或多個應用程式通過由所述應用程式發起的異步遠程過程調用來調用列印伺服器上的服務例程;以及
b)在列印伺服器上實現調度器,響應來自客戶機、用於列印服務的請求以便通過多個計算機應用程式在發送到伺服器的列印請求之間分配伺服器運行時間。
22.如權利要求21所述的計算機可讀介質,其特徵在於,通過結束埠實現線程池,其中來自客戶機的呼入列印請求添加到結束埠。
23.如權利要求21所述的計算機可讀介質,其特徵在於,列印伺服器維護等待服務的列印請求列表,以及列印請求的列表添加到共享伺服器的處理器時間的線程池。
24.如權利要求23所述的計算機可讀介質,其特徵在於,創建多個線程池以便服務列印請求,以及通過單個處理器線程服務每個線程池。
25.如權利要求21所述的計算機可讀介質,其特徵在於,列印假脫機系統接口異步地實現某些過程,以及以同步方式實現一些所述過程。
26.如權利要求21所述的計算機可讀介質,其特徵在於,由在多個異步遠程過程調用中順序地傳送到列印伺服器的多個列印請求組成列印作業。
27.如權利要求21所述的計算機可讀介質,其特徵在於,調度器將列印請求發送到線程池以便處理。
28.如權利要求27所述的計算機可讀介質,其特徵在於,調度器從第一列印處理線程池選擇列印請求以及將請求添加到第二列印處理線程池。
全文摘要
示例性可升級列印假脫機系統有效地在印表機上列印數據以及與專用列印伺服器一起使用最有效。本發明的一種用途是與服務具有需要列印數據的應用程式的大量客戶端計算機的列印伺服器一起。這些能包括但不局限於字處理應用程式。伺服器計算機具有實現用於協調由客戶端計算機發送給列印伺服器的數據列印的伺服器列印假脫機系統的軟體。多個印表機與伺服器計算機耦合,用於在伺服器列印假脫機系統的指導下列印。通過經遠程過程調用信道通信的異步過程,實現客戶機調用列印假脫機系統。在列印伺服器處的線程池服務這些調用,而無需客戶機請求間不合理的上下文切換。
文檔編號G06F3/12GK1658145SQ20051000949
公開日2005年8月24日 申請日期2005年2月16日 優先權日2004年2月13日
發明者A·M·特魯弗尼斯庫, K·S·西德基, M·劉 申請人:微軟公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀