青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

cc

  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  38 隨筆 :: 14 文章 :: 21 評(píng)論 :: 0 Trackbacks
Eric?Bergman-Terrell?
.NET?Remoting?使您可以跨多臺(tái)計(jì)算機(jī)輕松進(jìn)行分布計(jì)算,只需完成非常少的編程工作。在本文中,Eric?Bergman-Terrell?創(chuàng)建了一個(gè)名為?Digits?of?Pi?的應(yīng)用程序,它使用并行的多臺(tái)計(jì)算機(jī)以不可思議的精度計(jì)算?p?值。他設(shè)法在?12?小時(shí)內(nèi)完成了?10,000?位數(shù)的計(jì)算,卻只使用了相當(dāng)少的計(jì)算資源。這比用一臺(tái)計(jì)算機(jī)單獨(dú)完成計(jì)算快了?300%。

單擊下載文件下載示例應(yīng)用程序源代碼后,打開(kāi)?Everything.sln?解決方案。此解決方案包含運(yùn)行“Digits?of?Pi”應(yīng)用程序所需的三個(gè)項(xiàng)目(Client、Server?和?ServerLoader)。還包含一個(gè)名為?SimpleClient?的項(xiàng)目,我們稍后再討論它。加載?Everything.sln?之后,請(qǐng)選擇?Build(編譯)|?Batch?Build...(批編譯...)。單擊?Select?All(全部選定)按鈕,然后單擊?Build(編譯)。編譯所有內(nèi)容后,請(qǐng)?jiān)诒镜赜?jì)算機(jī)以及您的?LAN?中的遠(yuǎn)程計(jì)算機(jī)上安裝該軟件。

在本地計(jì)算機(jī)上,創(chuàng)建一個(gè)文件夾并將以下文件復(fù)制到其中:

Server\bin\Release\Plouffe_Bellard.dll
Client\bin\Release\DigitsOfPi.exe

在每個(gè)遠(yuǎn)程計(jì)算機(jī)和本地計(jì)算機(jī)上,創(chuàng)建一個(gè)文件夾并將以下文件復(fù)制到其中:

Server\bin\Release\Plouffe_Bellard.dll
ServerLoader\bin\Release\ServerLoader.exe
ServerLoader\ServerLoader.exe.config

然后運(yùn)行?ServerLoader.exe?程序。當(dāng)然,運(yùn)行?ServerLoader?和?Digits?of?Pi?程序之前,需要在每臺(tái)計(jì)算機(jī)上安裝?.NET?Framework。

在所有遠(yuǎn)程計(jì)算機(jī)和本地計(jì)算機(jī)上運(yùn)行?ServerLoader?程序后,請(qǐng)運(yùn)行?Digits?of?Pi?程序。單擊?Configure...(配置...)(參見(jiàn)圖?1),添加本地計(jì)算機(jī)名和遠(yuǎn)程計(jì)算機(jī)名。如果不確定某臺(tái)計(jì)算機(jī)的名稱,請(qǐng)查看?ServerLoader?程序,它在表中顯示其計(jì)算機(jī)名。如果您很幸運(yùn)地?fù)碛幸粋€(gè)多?CPU?系統(tǒng),您只需為所有?CPU?輸入一次計(jì)算機(jī)名。只需在計(jì)算機(jī)名后鍵入?@?符號(hào)和一個(gè)編號(hào)。例如,如果您擁有一個(gè)名為“Brainiac”的雙?CPU?系統(tǒng),則鍵入以下計(jì)算機(jī)名:“Brainiac@1”和“Brainiac@2”。不必為多個(gè)?CPU?系統(tǒng)輸入多個(gè)計(jì)算機(jī)名,但是這樣做可以確保所有計(jì)算機(jī)的?CPU?都用于計(jì)算?p?值。輸入所有計(jì)算機(jī)名后,單擊?OK(確定)。

然后指定要計(jì)算的位數(shù)(參見(jiàn)圖?2)并單擊?Calculate(計(jì)算)。請(qǐng)從較少的位數(shù)開(kāi)始,p?值小數(shù)點(diǎn)后面的位數(shù)越多,程序所需的時(shí)間就越長(zhǎng)。

圖?3?顯示了?Digits?of?Pi?程序如何在本地計(jì)算機(jī)和遠(yuǎn)程計(jì)算機(jī)中分配工作量,它使用?TCP/IP?端口?9000?發(fā)送請(qǐng)求并接收結(jié)果。接下來(lái),我們將詳細(xì)探討?Remoting、Plouffe_Bellard?服務(wù)器對(duì)象、ServerLoader?程序、SimpleClient?程序和?Digits?of?Pi?程序。

Remoting?基礎(chǔ)
.NET?Remoting?使對(duì)象可以與其他對(duì)象通信,無(wú)論它們運(yùn)行在同一臺(tái)計(jì)算機(jī)上還是運(yùn)行在遠(yuǎn)程計(jì)算機(jī)上。.NET?Remoting?與?Web?服務(wù)非常類似,但是?.NET?Remoting?技術(shù)更適于?Digits?of?Pi?這種完全以?.NET?編程語(yǔ)言編寫(xiě)的應(yīng)用程序,并且只能在運(yùn)行?.NET?Framework?的計(jì)算機(jī)上運(yùn)行。請(qǐng)參閱本文末尾“其他資源”中的“ASP.NET?Web?Services?or?.NET?Remoting:?How?to?Choose”,對(duì)兩種技術(shù)進(jìn)行比較。?

您可以通過(guò)以下步驟使用?.NET?Remoting?訪問(wèn)遠(yuǎn)程對(duì)象:

創(chuàng)建從?System.MarshalByRefObject?繼承的?.NET?服務(wù)器對(duì)象?(DLL)。該服務(wù)器對(duì)象將在遠(yuǎn)程計(jì)算機(jī)和本地計(jì)算機(jī)上運(yùn)行。?
創(chuàng)建通過(guò)調(diào)用?RemotingConfiguration.Configure?加載服務(wù)器對(duì)象的服務(wù)器加載器程序。服務(wù)器加載器程序也將在遠(yuǎn)程計(jì)算機(jī)和本地計(jì)算機(jī)上運(yùn)行。?
創(chuàng)建使用?Activator.GetObject?訪問(wèn)服務(wù)器對(duì)象的客戶端程序。您需要添加對(duì)服務(wù)器對(duì)象的引用以編譯此程序。此客戶端程序只在本地計(jì)算機(jī)上運(yùn)行。?
服務(wù)器對(duì)象
服務(wù)器對(duì)象將計(jì)算指定的九位?p?值。它被命名為?Plouffe_Bellard,因?yàn)樗褂?Fabrice?Bellard?的增強(qiáng)的?Simon?Plouffe?算法。雖然存在更快的算法,但?Plouffe-Bellard?算法非常簡(jiǎn)單(少于?300?行源代碼),它使用少量的內(nèi)存,并且由于九位數(shù)字可以單獨(dú)計(jì)算,因此更適于并行執(zhí)行。Plouffe_Bellard.CalculatePiDigits?方法將計(jì)算在指定位置開(kāi)始的九位?p?值。例如,CalculatePiDigits(1)?從第一位開(kāi)始返回九位數(shù)字:141592653。CalculatePiDigits(10)?從第十位開(kāi)始返回九位數(shù)字,依此類推。?

ServerLoader
ServerLoader?程序?qū)⒓虞d服務(wù)器對(duì)象,指定通過(guò)?LAN?訪問(wèn)服務(wù)器對(duì)象的協(xié)議和端口,偵聽(tīng)來(lái)自客戶端程序的傳入調(diào)用,處理調(diào)用并返回結(jié)果。特別值得注意的是,所有這些只需一行代碼便可完成,只需通過(guò)使用配置文件的路徑調(diào)用?RemotingConfiguration.Configure?方法。ServerLoader?程序?qū)⒓虞d名為?ServerLoader.exe.config?的配置文件(參見(jiàn)表?1)。此配置文件指定以?SingleCall?模式加載服務(wù)器對(duì)象,即每個(gè)傳入調(diào)用都由服務(wù)器對(duì)象的一個(gè)新實(shí)例處理。如果服務(wù)器對(duì)象以?Singleton?模式加載,每個(gè)傳入調(diào)用都將由同一個(gè)實(shí)例處理。類型屬性指定服務(wù)器對(duì)象的完整類型名稱(包括?PB?命名空間)及其程序集的名稱。objectUri?屬性指定對(duì)象的統(tǒng)一資源標(biāo)識(shí)符?(URI)?的端點(diǎn)。<channel>?元素指定使用?TCP?協(xié)議,端口?9000?訪問(wèn)服務(wù)器對(duì)象。?

表?1:ServerLoader.exe.config。

<configuration>?
??<system.runtime.remoting>??
????<application?name?=?"ServerLoader">??
??????<service>?
????????<wellknown?
??????????mode="SingleCall"?
??????????type="PB.Plouffe_Bellard,Plouffe_Bellard"
??????????objectUri="Plouffe_Bellard"/>?
??????</service>?
??????<channels>?
????????<channel?ref="tcp?server"?port="9000"/>
??????</channels>?
????</application>?
??</system.runtime.remoting>
</configuration>?

SimpleClient
我創(chuàng)建了一個(gè)名為?SimpleClient?的程序,以說(shuō)明客戶端程序訪問(wèn)遠(yuǎn)程計(jì)算機(jī)上的服務(wù)器對(duì)象是多么容易。要運(yùn)行?SimpleClient,首先在遠(yuǎn)程計(jì)算機(jī)上運(yùn)行?ServerLoader,然后在本地計(jì)算機(jī)上運(yùn)行?SimpleClient.exe?程序。在?Remote?Machine(遠(yuǎn)程計(jì)算機(jī))文本框中輸入遠(yuǎn)程計(jì)算機(jī)的名稱,然后單擊?Calculate(計(jì)算)按鈕開(kāi)始計(jì)算第一個(gè)九位?p?值。SimpleClient?的?CalculateButton_Click?方法包含客戶端訪問(wèn)遠(yuǎn)程服務(wù)器所需的所有代碼(參見(jiàn)表?2)。可以使用由遠(yuǎn)程計(jì)算機(jī)名、協(xié)議?(TCP)?和端口號(hào)?(9000)?組成的?URL?訪問(wèn)遠(yuǎn)程服務(wù)器。例如,要訪問(wèn)我的“Pentium?200”計(jì)算機(jī),則?URL?為?tcp://Pentium?200:9000/ServerLoader/Plouffe_Bellard。創(chuàng)建?URL?后,將使用服務(wù)器的類型?(Plouffe_Bellard)?和?URL?調(diào)用?Activator.GetObject。然后,返回的值被轉(zhuǎn)換為?Plouffe_Bellard?對(duì)象以備使用。調(diào)用其?CalculatePiDigits?方法時(shí),請(qǐng)求被發(fā)送到遠(yuǎn)程計(jì)算機(jī)上的?ServerLoader。然后,服務(wù)器對(duì)象計(jì)算小數(shù)位。最后,在一個(gè)文本框中顯示返回客戶端程序的結(jié)果。?

表?2:用于訪問(wèn)遠(yuǎn)程服務(wù)器的?SimpleClient?代碼。

private?void?CalculateButton_Click(object?sender,?
??????????????????????????????System.EventArgs?e)
{
??Cursor.Current?=?Cursors.WaitCursor;

??Plouffe_Bellard?PiCalculator?=?null;

??String?MachineName?=?RemoteMachineTextBox.Text;

??try
??{
????int?port?=?9000;

????String?URL?=?"tcp://"?+?MachineName?+?":"?+?
???????port?+?"/ServerLoader/Plouffe_Bellard";
????PiCalculator?=?(Plouffe_Bellard)?
???????Activator.GetObject(typeof(Plouffe_Bellard),?URL);
????ResultsTextBox.Text?=?"3."?+?
???????PiCalculator.CalculatePiDigits(1);
??}
??catch(Exception)
??{
????MessageBox.Show(
???????"需要在計(jì)算機(jī)?"?+
???????MachineName,?"Simple?Client?上運(yùn)行?ServerLoader.exe",?
???????MessageBoxButtons.OK,?MessageBoxIcon.Error);
??}

??Cursor.Current?=?Cursors.Arrow;
}

Digits?of?Pi?客戶端
Digits?of?Pi?客戶端程序比?SimpleClient?更復(fù)雜。SimpleClient?僅通過(guò)訪問(wèn)遠(yuǎn)程計(jì)算機(jī)上的服務(wù)器對(duì)象來(lái)計(jì)算前九位?p?值。而?Digits?of?Pi?則同時(shí)使用?Configure(配置)對(duì)話框中指定的遠(yuǎn)程計(jì)算機(jī)和本地計(jì)算機(jī)(如圖?1?所示)并行計(jì)算用戶指定的小數(shù)位。服務(wù)器對(duì)象在單獨(dú)的線程中訪問(wèn),以便在可能需要很長(zhǎng)時(shí)間的計(jì)算過(guò)程中保持?Digits?of?Pi?GUI?對(duì)用戶操作的響應(yīng)性。?

Digits?of?Pi?使用數(shù)組將作業(yè)分為九位數(shù)據(jù)塊,將工作量分配到所有可用的計(jì)算機(jī)上。用戶單擊?Calculate(計(jì)算)按鈕后,將創(chuàng)建?SolutionArray(參見(jiàn)圖?4)。SolutionArray?為要計(jì)算的每組九位?p?值分配一個(gè)?SolutionItem?元素。服務(wù)器對(duì)象計(jì)算?m_Digit?字段指定的九位數(shù)組后,數(shù)位將存儲(chǔ)在?m_Results?成員中。m_MachineName?成員包含運(yùn)行服務(wù)器的計(jì)算機(jī)的名稱。存儲(chǔ)計(jì)算機(jī)名是為了使?Digits?of?Pi?能夠顯示每臺(tái)計(jì)算機(jī)計(jì)算的小數(shù)總數(shù)(參見(jiàn)圖?2)。

為使服務(wù)器對(duì)象并行計(jì)算,Digits?of?Pi?將為每個(gè)服務(wù)器對(duì)象創(chuàng)建一個(gè)線程并啟動(dòng)線程計(jì)算。然后,必須等待所有線程完成計(jì)算后才能顯示最終結(jié)果。WaitHandle?對(duì)于等待多個(gè)線程很有用。Digits?of?Pi?將為每個(gè)線程使用一個(gè)?WaitHandle,以等待所有線程完成計(jì)算。

將調(diào)用?CalculationThread.Calculate(參見(jiàn)表?3)以便為每個(gè)服務(wù)器對(duì)象創(chuàng)建一個(gè)線程。該操作將啟動(dòng)線程運(yùn)行,然后返回一個(gè)?AutoResetEvent(從?WaitHandle?衍生而來(lái))。每個(gè)線程的?AutoResetEvent?都存儲(chǔ)在一個(gè)數(shù)組中,然后數(shù)組被傳遞給?WaitHandle.WaitAll。完成線程計(jì)算后,將對(duì)其?AutoResetEvent?調(diào)用?Set?方法。最后一個(gè)線程調(diào)用?Set?方法后,將返回?WaitAll?調(diào)用,并顯示?p?的值。

表?3:CalculationThread。

public?static?WaitHandle?Calculate(
SolutionArray?solutionArray,?String?machineName)
{
??CalculationThread?calculationThread?=?new?
????CalculationThread(solutionArray,?machineName);
??Thread?thread?=?new?Thread(new?
????ThreadStart(calculationThread.Calculate));
??thread.Start();
??return?calculationThread.calculationDone;
}

每個(gè)線程都使用相同的算法:如果有更多的工作要處理,線程將奪取下一個(gè)?SolutionItem,在?SolutionItem?中存儲(chǔ)服務(wù)器對(duì)象的計(jì)算機(jī)名,計(jì)算指定的九位小數(shù),并將結(jié)果存儲(chǔ)在?SolutionItem?中。此進(jìn)程將一直運(yùn)行,直到所有?SolutionItem?中都填充了結(jié)果。有關(guān)詳細(xì)信息,請(qǐng)參見(jiàn)表?4。

表?4:CalculationThread.Calculate。

public?void?Calculate()
{
??Plouffe_Bellard?PiCalculator?=?
????RemotePiCalculator.GetPiCalculator(
??????GetRealMachineName(machineName));

??if?(PiCalculator?!=?null)
??{
????SolutionItem?Item?=?null;
????bool?Abort;

????do
????{
??????Abort?=?solutionArray.Abort;

??????if?(!Abort)
??????{
????????Item?=?solutionArray.GetNextItem();

????????if?(Item?!=?null)
????????{
??????????Item.MachineName?=?machineName;

??????????try
??????????{
????????????Item.Results?=?
???????????PiCalculator.CalculatePiDigits(Item.Digit);
??????????}
??????????catch?(Exception?e)
??????????{
????????????Abort?=?true;
????????????MessageBox.Show(
??????????????"無(wú)法訪問(wèn)主機(jī)上的遠(yuǎn)程對(duì)象?"?+
??????????????machineName?+?Environment.NewLine?+?
??????????????Environment.NewLine?+?"Message:??"?+?
??????????????e.Message,?Globals.ProgramName,?
??????????????MessageBoxButtons.OK,?
??????????????MessageBoxIcon.Error);
??????????}

??????????UpdateStatisticsDelegate?USD?=?new?
????????????UpdateStatisticsDelegate(
??????????????MF.UpdateStatistics);

??????????MF.Invoke(USD,?new?Object[]?{}?;
????????}
??????}
????}?while?(Item?!=?null?&&?!Abort);

????calculationDone.Set();
??}
}

下面是逐步的說(shuō)明:

GetRealMachineName?從多?CPU?計(jì)算機(jī)名中刪除?@1?模式。例如,GetRealMachineName("Brainiac@1"?返回?"Brainiac"。有關(guān)多?CPU?計(jì)算機(jī)名的解釋,請(qǐng)參見(jiàn)圖?1?對(duì)話框中的文本。?
知道正確的計(jì)算機(jī)名后,將其傳遞給?RemotePiCalculator.GetPiCalculator,這樣才可以通過(guò)?PiCalculator?變量訪問(wèn)該計(jì)算機(jī)上的服務(wù)器對(duì)象。?
如果用戶單擊了?Cancel(取消)按鈕,將設(shè)置?Abort?屬性。如果?Abort?屬性為?true,線程將停止計(jì)算。?
對(duì)?MF.Invoke?的調(diào)用使線程可以安全地更新?ListView?中的統(tǒng)計(jì)數(shù)據(jù)(參見(jiàn)圖?2),即使該?ListView?是由另一個(gè)線程創(chuàng)建的。在?32?位?Windows?編程中,絕不允許在創(chuàng)建某個(gè)控件的線程之外處理該控件。?
完成循環(huán)(即計(jì)算完指定的所有?p?位數(shù)或者用戶單擊?Cancel?[取消]?按鈕)后,將調(diào)用線程的?AutoResetEvent?的?Set?函數(shù)。?
當(dāng)每個(gè)線程都調(diào)用其?AutoResetEvent?的?Set?函數(shù)后,將返回對(duì)?WaitHandle.WaitAll?的調(diào)用并顯示結(jié)果。?
線程同步
如果?Digits?of?Pi?的代碼由多個(gè)線程同時(shí)訪問(wèn),可能會(huì)有多個(gè)地方出現(xiàn)錯(cuò)誤。例如,如果兩個(gè)線程同時(shí)調(diào)用?SolutionArray.GetNextItem,可能會(huì)返回相同的內(nèi)容。這就是在?GetNextItem?方法中設(shè)置?[MethodImpl(MethodImplOptions.Synchronized)]?屬性的原因,該屬性可以確保一次只有一個(gè)線程調(diào)用該方法。如果方法的每一行代碼都不應(yīng)由多個(gè)線程同時(shí)訪問(wèn),則使方法同步是一個(gè)很好的策略。?

由于?MainForm.Calculate?方法只有一行代碼不能同時(shí)被多個(gè)線程訪問(wèn),因此它將在該行代碼之前調(diào)用?Monitor.Enter,并在其后調(diào)用?Monitor.Exit。如果該行代碼已在其他線程上運(yùn)行,Monitor.Enter?將被阻止。如果整個(gè)函數(shù)已實(shí)現(xiàn)同步,那么只保護(hù)需要防止多個(gè)線程訪問(wèn)的代碼行可以提高性能。

從?System.Windows.Forms.Control?衍生的對(duì)象(例如?Button、TextBoxe、RichTextBoxe、Label、ListBoxe、ListView?等等)只應(yīng)由創(chuàng)建它們的線程處理。要從非創(chuàng)建線程中安全處理?Control?衍生對(duì)象,請(qǐng)首先將處理代碼放入一個(gè)方法,然后為該方法聲明一個(gè)代理:

delegate?void?SetResultsTextDelegate(String?Text);

private?void?SetResultsText(String?Text)
{
??ResultsRichTextBox.Text?=?Text;
}

然后使用?Form.Invoke?間接調(diào)用該方法:

SetResultsTextDelegate?SRTD?=?new?
???SetResultsTextDelegate(SetResultsText);

Invoke(SRTD,?new?object[]?{?""?}?;

Invoke?方法將從創(chuàng)建它的線程中調(diào)用該方法,它使用的參數(shù)與對(duì)象數(shù)組中的元素相對(duì)應(yīng)。

小結(jié)
.NET?Remoting?是一種在遠(yuǎn)程(和本地)計(jì)算機(jī)上執(zhí)行代碼的簡(jiǎn)單而有效的機(jī)制。只需將代碼封裝到?.NET?對(duì)象中,編寫(xiě)加載該對(duì)象并偵聽(tīng)請(qǐng)求的程序,然后在客戶端程序中調(diào)用?Activator.GetObject。如果您的?LAN?中有一些閑置的計(jì)算機(jī),可以利用它們輕松地解決并行問(wèn)題。只需記住要使用正確的線程同步機(jī)制,以防止線程之間發(fā)生沖突。?

下載?TERRELL.ZIP

其他資源
“ASP.NET?Web?服務(wù)還是?.NET?Remoting:如何選擇?”(::URL::http://www.microsoft.com/china/msdn/library/dnbda/html/bdadotnetarch16.asp) ?一文很有用,它對(duì)?.NET?Web?Service?和?.NET?Remoting?進(jìn)行了比較。?
Fabrice?Bellard's?Pi?Page?(::URL::http://fabrice.bellard.free.fr/pi/) ?提供了一些用于計(jì)算?p?值的有用公式和源代碼,包括?Digits?of?Pi?程序中使用的算法的?C?語(yǔ)言源代碼。?
有關(guān)遠(yuǎn)程訪問(wèn)程序的源代碼,請(qǐng)?jiān)L問(wèn)?www.personalmicrocosms.com/html/ra.html。此程序使用?.NET?Remoting?顯示遠(yuǎn)程計(jì)算機(jī)的桌面,并使用本地計(jì)算機(jī)的鍵盤和鼠標(biāo)運(yùn)行遠(yuǎn)程計(jì)算機(jī)。?
有關(guān)數(shù)學(xué)化方面的內(nèi)容,請(qǐng)參閱?Petr?Beckmann?著的《History?of?Pi》(St.?Martin's?Press?1971?年出版),這是一本相當(dāng)不錯(cuò)的書(shū),因?yàn)?p?的歷史就是數(shù)學(xué)歷史的微觀反映。Beckmann?的書(shū)涵蓋了?p?的數(shù)學(xué)歷史以及政治歷史。?
Ingo?Rammer?的《Advanced?.NET?Remoting》(Apress?2002?年出版)是有關(guān)?Remoting?的權(quán)威指南。此書(shū)看起來(lái)更適合從頭到尾的詳細(xì)閱讀。我倒是希望此書(shū)能夠適合我的“隨便翻翻”的閱讀習(xí)慣。?
有關(guān)?Hardcore?Visual?Studio?.NET?和?Pinnacle?Publishing?的詳細(xì)信息,請(qǐng)?jiān)L問(wèn)它們的?Web?站點(diǎn)?::URL::http://www.pinpub.com/。

注意:這不是?Microsoft?Corporation?的?Web?站點(diǎn)。Microsoft?對(duì)該站點(diǎn)的內(nèi)容不承擔(dān)責(zé)任。

本文轉(zhuǎn)載自?2003?年?4?月份的?Hardcore?Visual?Studio?.NET。版權(quán)所有?2003?Pinnacle?Publishing,?Inc.(除非另行說(shuō)明)。保留所有權(quán)利。Hardcore?Visual?Studio?.NET?是?Pinnacle?Publishing,?Inc.?獨(dú)立發(fā)行的刊物。未經(jīng)?Pinnacle?Publishing,?Inc.?事先同意,不得以任何形式使用或復(fù)制本文的任何部分(評(píng)論文章中的簡(jiǎn)短引用除外)。如需與?Pinnacle?Publishing,?Inc.聯(lián)系,請(qǐng)致電?1-800-788-1900。
posted on 2006-12-07 15:02 醒目西西 閱讀(2085) 評(píng)論(9)  編輯 收藏 引用 所屬分類: 編程相關(guān)

評(píng)論

# re: 使用 .NET Remoting 實(shí)現(xiàn)并行計(jì)算 [轉(zhuǎn)] 2010-07-09 12:22 ReynaMARSH20
This seems to be very feasible to order thesis samples just about this good post in the <a href="http://www.exclusivethesis.com">thesis writing</a> service peculiarly when scholars do not have time.   回復(fù)  更多評(píng)論
  

# re: 使用 .NET Remoting 實(shí)現(xiàn)并行計(jì)算 [轉(zhuǎn)] 2010-10-07 14:08 essay service
Good post. But how to anticipate comment spamming? Because essays help could fail your degree.  回復(fù)  更多評(píng)論
  

# re: 使用 .NET Remoting 實(shí)現(xiàn)并行計(jì)算 [轉(zhuǎn)] 2013-08-22 18:12 this link
Check out Essays Review company whenever you need to glance over informative college paper writing service reviews.  回復(fù)  更多評(píng)論
  

# re: 使用 .NET Remoting 實(shí)現(xiàn)并行計(jì)算 [轉(zhuǎn)] 2013-08-25 17:55 custom essay writing services reviews
Don’t have the faintest idea which firm to select to get assistance from? Go over QualityEssay testimonials, and make a right decision.  回復(fù)  更多評(píng)論
  

# re: 使用 .NET Remoting 實(shí)現(xiàn)并行計(jì)算 [轉(zhuǎn)] 2013-08-25 20:49 EssaysService rewiew
Don’t have the faintest idea which firm to pick to get assistance from? Look through PremiumQualityEssays testimonials "best-writing-services.com", and arrive at a good decision.  回復(fù)  更多評(píng)論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美影院视频| 美女亚洲精品| 国产精品女主播| 亚洲一二三区视频在线观看| 欧美一区二视频| 韩国成人福利片在线播放| 久久另类ts人妖一区二区| 欧美高清视频免费观看| 夜夜爽99久久国产综合精品女不卡 | 欧美亚洲日本国产| 蜜桃视频一区| 亚洲网站在线| 黑人巨大精品欧美一区二区小视频 | 欧美激情bt| 正在播放日韩| 久久久久免费视频| 亚洲国产精品一区二区三区| 欧美日韩另类在线| 久久狠狠亚洲综合| 99伊人成综合| 麻豆久久婷婷| 亚洲男人第一av网站| 激情av一区| 国产精品初高中精品久久| 久久久www| 9色精品在线| 欧美91精品| 小辣椒精品导航| 亚洲国产综合在线| 国产欧美精品日韩区二区麻豆天美| 久久一区欧美| 亚洲欧美日韩中文在线制服| 亚洲国内精品在线| 欧美专区18| 中日韩美女免费视频网站在线观看| 黄色一区二区在线| 国产精品午夜在线观看| 欧美精品一区二区精品网| 欧美专区亚洲专区| 夜夜嗨av一区二区三区网站四季av| 免费观看在线综合| 欧美一区二区三区四区视频 | 99精品欧美一区二区三区综合在线 | 久久中文久久字幕| 亚洲欧美日韩综合aⅴ视频| 亚洲欧洲在线一区| 韩国女主播一区二区三区| 欧美视频免费在线观看| 欧美激情第一页xxx| 久久久久久亚洲精品不卡4k岛国| 亚洲午夜久久久久久久久电影院| 亚洲国产一成人久久精品| 欧美www在线| 久久久精彩视频| 性欧美1819sex性高清| 亚洲一区激情| 亚洲午夜国产一区99re久久| 亚洲美女视频网| 亚洲激情婷婷| 在线日韩欧美| 在线精品亚洲一区二区| 国内精品亚洲| 国产一区二区激情| 国产丝袜一区二区| 国产精品中文在线| 国产毛片一区二区| 国产精品综合久久久| 国产精品久久久久一区二区三区| 欧美精品免费看| 欧美日韩精品是欧美日韩精品| 欧美精品在线一区| 欧美极品影院| 欧美日韩不卡一区| 欧美日韩色综合| 国产精品99免视看9| 国产精品毛片在线| 国产精品社区| 国产一区二区三区av电影| 国产永久精品大片wwwapp| 国产字幕视频一区二区| 黄色日韩网站视频| 亚洲国产精品www| 亚洲另类视频| 亚洲伊人网站| 久久精品日产第一区二区| 老妇喷水一区二区三区| 欧美国产视频在线| 亚洲毛片在线| 亚洲永久免费精品| 久久久国产精彩视频美女艺术照福利 | 在线综合亚洲| 欧美一区二区三区四区在线观看地址 | 夜夜嗨av一区二区三区四季av | 亚洲国产精品一区二区三区| 日韩视频精品在线| 亚洲在线观看视频网站| 久久精品国产免费| 欧美国产精品一区| 在线亚洲欧美| 久久超碰97人人做人人爱| 欧美成人一区在线| 国产精品网站在线观看| 在线观看国产精品网站| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 欧美小视频在线| 精品不卡在线| 亚洲小视频在线| 久久亚洲综合色| 日韩一级二级三级| 欧美中文字幕在线播放| 欧美精品久久久久久| 国产视频久久| 亚洲精品免费在线播放| 欧美一级播放| 亚洲国产一区二区三区a毛片| 亚洲一卡二卡三卡四卡五卡| 久久全球大尺度高清视频| 欧美日韩综合在线| 尤妮丝一区二区裸体视频| 中文网丁香综合网| 欧美成人高清视频| 午夜欧美精品| 欧美三级精品| 亚洲人体偷拍| 麻豆成人小视频| 亚洲欧美影院| 欧美色综合网| 亚洲人成人99网站| 久久五月激情| 亚洲男人的天堂在线| 欧美日韩成人综合天天影院| 精品成人一区二区三区四区| 午夜精品久久久久久久蜜桃app | 久久久噜噜噜久久人人看| 国产精品99久久久久久白浆小说 | 亚洲欧美在线网| 亚洲国产99| 久久―日本道色综合久久| 国产欧美日韩三级| 亚洲资源在线观看| 亚洲日本va午夜在线电影| 另类专区欧美制服同性| 国产一区二区高清| 欧美一区日韩一区| 一区二区三区|亚洲午夜| 欧美另类女人| 99精品欧美一区| 亚洲日本精品国产第一区| 欧美不卡视频| 最新国产乱人伦偷精品免费网站 | 日韩一级裸体免费视频| 欧美激情亚洲自拍| 亚洲精品日韩综合观看成人91| 欧美成人中文字幕在线| 久久久久九九九| 狠狠色丁香久久婷婷综合丁香| 久久国产精品99国产精| 性做久久久久久久免费看| 国产老肥熟一区二区三区| 午夜日韩在线观看| 亚洲综合社区| 国产欧美精品一区二区三区介绍| 欧美一区二区三区在线播放| 午夜精品免费在线| 国产欧美精品日韩精品| 欧美在线国产精品| 香蕉av福利精品导航| 国产一区二区黄| 美女网站久久| 欧美成人精品激情在线观看| 亚洲免费电影在线观看| 亚洲美女区一区| 国产精品久久久久婷婷| 久久激情五月激情| 久久国产黑丝| 91久久久国产精品| 99国产精品99久久久久久| 国产精品美女午夜av| 久久久久.com| 欧美成人免费播放| 亚洲影音一区| 久久精品91| 亚洲免费成人av| 亚洲视频碰碰| 黄色一区二区在线观看| 亚洲福利免费| 国产精品每日更新| 麻豆精品网站| 欧美色图五月天| 久久精品一区二区三区不卡牛牛| 久久综合亚洲社区| 亚洲午夜伦理| 久久精品毛片| 99视频日韩| 欧美一区二区播放| 日韩亚洲欧美成人| 午夜精品亚洲| 99re8这里有精品热视频免费 | 国产精品美女视频网站| 久久午夜av|