?? 28-1.cfm.htm
字號:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<META NAME="Generator" CONTENT="Microsoft Word 97">
<TITLE>線程模型:誰該關心?</TITLE>
</HEAD>
<BODY>
<B><FONT FACE="宋體" LANG="ZH-CN" SIZE=5><P ALIGN="JUSTIFY">線程模型:誰該關心?</P>
</B></FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">當一個訪問者連上你的站點,他事實上真正地注冊成為一個用戶(通常命名為IUSR_MACHINE,在這里MACHINE是你的計算機的名稱)。這提出了一個新挑戰:如果在同一時間有許多訪問者作相同一件事(作為同一用戶),你的軟件將不能設定事件發生的順序)。例如,你不能編寫一個用于更新從數據庫中最近一次讀取記錄的組件,如果兩個人同時訪問這個數據庫,那么你的組件將假定將要被更新的記錄是上次所讀的,錯誤就會發生!</P>
<P ALIGN="JUSTIFY">作為一個組件開發者,你的責任是理解線程模型以及它怎樣影響你的應用程序,你將會看到:Visual Basic的線程同Java的不一樣。</P>
<P ALIGN="JUSTIFY"> Microsoft的組件對象模型引入了線程安全性這個概念。在以前,每個人都用同時只有一人使用的單用戶Windows工作站,Windows NT和Internet改變了這一切。Web服務器可以同時處理多個請求,并且為了得到最優化的服務器效率,代碼和數據連接是以池的形式出現。這意味著Web請求可能執行代碼的一部分,然后Web請求可能請求相同的代碼做別的事。代碼不用考慮誰請求操作這種模型叫做自由線程。</P>
<P ALIGN="JUSTIFY"> 不是所有的對象都是自由線程結構的。例如,Visual Basic和Microsoft Access就不是這樣,VB5使用套間模型(見表28.1),而Access使用的是一種高效率的單線程結構。你必須根據其線程模型來確定如何使用一個組件,但是真正的“不安全”對象可以通過與Microsoft Transactions Server包相綁定來為其提更高級別的隔離,從而實現線程安全性。</P>
<P ALIGN="JUSTIFY">表28.1 線程模型</P></FONT>
<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=552>
<TR><TD WIDTH="15%" VALIGN="TOP">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">模型</FONT></TD>
<TD WIDTH="85%" VALIGN="TOP">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">描述</FONT></TD>
</TR>
<TR><TD WIDTH="15%" VALIGN="TOP">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">單一線程</FONT></TD>
<TD WIDTH="85%" VALIGN="TOP">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">設計成單用戶應用程序,所有的過程以線性方式處理,不要將其用于Web應用中。</FONT></TD>
</TR>
<TR><TD WIDTH="15%" VALIGN="TOP">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">套間線程</FONT></TD>
<TD WIDTH="85%" VALIGN="TOP">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">可以作為一個多用戶使用組件,但在同一時間只能有單一線程,不要將其作為系統端對象使用(例如,用于應用程序級),因為那樣會形成“瓶頸”。VB使用這種模型。</FONT></TD>
</TR>
<TR><TD WIDTH="15%" VALIGN="TOP">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">自由線程</FONT></TD>
<TD WIDTH="85%" VALIGN="TOP">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">作為一個多重使用組件,同一時間允許多個線程運行。J++和C++可以創建這種組件,但編程者需要對線程安全性有根本的了解。</FONT></TD>
</TR>
<TR><TD WIDTH="15%" VALIGN="TOP">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">所有</FONT></TD>
<TD WIDTH="85%" VALIGN="TOP">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">既可以以自由線程也可以以套間線程來操作,這是最理想的。缺省條件下,Java在Microsoft 環境下使用這種模型。</FONT></TD>
</TR>
</TABLE>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 這章的剩余部分將通過三個“烹調書籍”的例子來介紹如何建立一個組件,在這些例子里假定你已經安裝了Visual Basic5或Java編輯器,并且你知道如何在集成開發環境(IDE)中如何操作。</P>
<P ALIGN="JUSTIFY"> 首先我們轉向Java,它比VB復雜的多,同時它功能也更強大。它與C相似,處于Windows API函數更低一級位置。</P>
<P ALIGN="JUSTIFY"> 接下來的兩個例子使用VB,它是創建任何對象最簡單的途徑,但是我們第二個VB 例子將涉及到Windows API函數,以介紹一些高級概念。</P>
<B><P ALIGN="JUSTIFY">技巧</P>
</B><P ALIGN="JUSTIFY"> Microsoft將Visual Basic,Visual C++,Visual J++ 等捆綁在一起,以Visual Studio97 的形式出現,這是在單一軟件里獲得多種開發環境的最值得的途徑。</P>
<P ALIGN="JUSTIFY"> 我們的前兩個例子將用兩種語言來建立相同功能的組件。組件本身并不如典型的產品組件復雜。主要有以下兩個原因:</P>
<P ALIGN="JUSTIFY">■產品組件需要額外的錯誤處理代碼,而例子中不需要。</P>
<P ALIGN="JUSTIFY">■一個真正的強壯的例子閱讀起來很困難,因為代碼復雜性將阻礙我們的學習。</P>
<P ALIGN="JUSTIFY">此組件將一個州的縮寫作為輸入,返回所有州中的滑翔機俱樂部,以表格形式輸出。這難道就不能用VBScript而不通過編寫一個組件來實現嗎?當然是可以的,但編寫組件的優點就在于我們的代碼是編譯過的,從而達到保持你知識產權的目的。</P>
<P ALIGN="JUSTIFY"> 因為這個組件作為一個會話級對象(每個用戶一個局柄),套間線程是比較適用的,Visual Basic和Java都可以創建套間模型對象,所以兩種工具都適用。</P></FONT></BODY>
</HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -