To record my study for the queueing theory, and wish these articles can help you while you are learning this subject. Besides, I write this blog to deeply appreciate my teacher(Prof. Wang,Yung-Chung).
2009年4月21日 星期二
Multithreading in Windows Forms
當你寫一個Windows Forms的Application時候,如果再用上Thread的功能,這時候可能就會發生:跨執行緒作業無效: 存取控制項 'controls_name' 時所使用的執行緒與建立控制項的執行緒不同。哇!我也是第一次遇到,程式寫的少了...還好有解,並得到建德兄的幫助來解決。
標籤:
tool
2009年4月19日 星期日
TPC-W基準
TPC-W是TPC所制定的一個基準(benchmark),主要是用在交易型網路電子商務(transactional web e-Commerce)上面,目的為測試系統的效能並給予量化(給出數據)。
TPC-W所測量出來的數據單位為WIPS(Web Interaction Per Second),以表示效能(performance)的程度,這就是throughput的多寡。2.0版本之後,是用SIPS(Service Interaction Per Second)的單位,不過,目前的資料多以WIPS為單位就是了,可能是2.0版本還未實際應用。
除了WIPS之外,也有將總體成本除以throughput的方式,用以評斷設備是不是划算(即Cost/Performance, CP值)!其單位為$/WIPS。
TPC-W的量測以一個應用伺服器(application server)為主,避免cluster的問題使得benchmark的數據有所差異。也就是說在TPC-W個規範當中,你是不能用來測量cluster的架構!
TPC-W中有些專有名詞,其定義如下:
- Emulated Browser (EB), Emulated Business (EB)
模擬的瀏覽器,功能是向SUT發送工作量(workload)。2.0版的文件改用Emulated Business 表示。 - Remote Browser Emulator (RBE), Remote Business Emulator (RBE)
這是用來管理和控制EB的軟體。 - Business Session Length (BSL)
交易的數量,也就是REB和SUT之間的交易數量。 - System Under Test (SUT)
欲測試的系統,可能包含多個server和router。 - Payment Gateway Emulator (PGE)
模擬SUT外面的付費授權機制的服務,提供帳務處理功能。
目前網路上已有實作的程式碼,有需要研究的人可以參考,分別如下:
- 威斯康辛大學(最初發展版本)
http://www.ece.wisc.edu/~pharm/ - 紐約大學(改進版,使用J2EE)
http://www.cs.nyu.edu/totok/ - 維吉尼亞大學(上兩個的綜合版,使用J2EE)
http://www.cs.virginia.edu/~th8k/
根據我最近的研究,2.0版本似乎不夠完全,1.8版的benchmark比較正常一點!而且實做的程式目前只到1.8版。另外,2.0個好像跟1.x完全不一樣。
標籤:
tool
2009年4月13日 星期一
Benchmark
今天談談Benchmark,Benchmark的中文是基準,也有人說是標竿測試(應該用benchmark test)、測試基準,中文的意思實在很難照字面解釋。Benchmark的意思是:一些基本的方法來量測系統的效能(這是一個活動,所以英文用benchmarking)。而Benchmark通常指的是測試用的軟體工具。
在量測系統效能當中,有兩項數據重要:時間(time)、比率(rate)。時間指的是反應時間(response time);比率指的是工作處理量,通常是單位時間的交易量、單位時間的回應次數,或者說是throughput。其實一個是從使用者的角度來觀看,另一個是從管理者的角度來觀看。
比率的量測中以MIPS為單位,什麼是MIPS?MIPS即Millions of instructions per second,每秒條百萬指令,通常是用來測試CPU(而CPU不太會用頻率Hz為基準比較)。要注意的是MIPS也不一定準確,因為CPU有區分RISC和CISC兩種,所以用一件工作來比較,有可能產生不同效能結果。
系統效能(System Performance)是一件很複雜的事情,因為系統包含多個軟體與硬體,要量測更是困難(使用benchmark),就算我們得到其結果,要解釋其效能結果更不是一件容易的事情。
Benchmark從量測的性質來看,可以分為兩大類:粗糙基準(coarse-grain benchmark),細微基準(fine-grain benchmark)。另外,以系統角度來看可以分為四個階層(hierarchy),由內而外分別是。
常用的benchmark有下列單位制訂:(中文看看就好,沒有官方的中文名字,而且翻譯也怪怪的)
在量測系統效能當中,有兩項數據重要:時間(time)、比率(rate)。時間指的是反應時間(response time);比率指的是工作處理量,通常是單位時間的交易量、單位時間的回應次數,或者說是throughput。其實一個是從使用者的角度來觀看,另一個是從管理者的角度來觀看。
比率的量測中以MIPS為單位,什麼是MIPS?MIPS即Millions of instructions per second,每秒條百萬指令,通常是用來測試CPU(而CPU不太會用頻率Hz為基準比較)。要注意的是MIPS也不一定準確,因為CPU有區分RISC和CISC兩種,所以用一件工作來比較,有可能產生不同效能結果。
系統效能(System Performance)是一件很複雜的事情,因為系統包含多個軟體與硬體,要量測更是困難(使用benchmark),就算我們得到其結果,要解釋其效能結果更不是一件容易的事情。
Benchmark從量測的性質來看,可以分為兩大類:粗糙基準(coarse-grain benchmark),細微基準(fine-grain benchmark)。另外,以系統角度來看可以分為四個階層(hierarchy),由內而外分別是。
- Basic Operations(最內層)
加減法運算,測量CPU之類。對系統效能量測實用性低。 - Toy Benchmark
用一些難解的問題(puzzle)計算。 - Kernels
主要是一些程式的片段,或者函數之類。測量系統某部分的效能。 - Real Programs(最外層)
最趨於真實程式的測量,也是對系統的效能量測實用性最高的。(有點廢話...)
常用的benchmark有下列單位制訂:(中文看看就好,沒有官方的中文名字,而且翻譯也怪怪的)
- Transaction Processing Performance Council (交易處理效能機構),簡稱TPC。
有TPC-C, TPC-H, TPC-R, TPC-W - Standard Performance Evaluation Corporation(標準性能評估機構),簡稱SPEC。
有SPECxxxx, SPECweb
- Load Testing(負載測試)
模擬實際的使用情形,取得測試結果,看看是不是符合要求。 - Stress Testing(壓力測試)
在最糟的情況下,對服務施加最大負載量。看看是不是能正常運作。 - Spike Testing(突波測試)
施加比平均負載高出好幾倍的量,通常施加的時間為一段小週期。
標籤:
tool
HttpWebRequest and HttpWebResponse
之前有介紹.NET Framework的WebClient這個類別,用了用了發現我還需要更多功能,只好往下一層類別來找答案。WebClient用起來真的很容易,程式沒有幾行就可以做到一個功能,所以學習的時候,建議先用這個類別來玩玩看,先從簡單的開始,這是解決問題的第一步。
HttpWebRequest和HttpWebResponse兩個類別,是從另外兩個抽象類別繼承而來,各分別WebRequest和WebResponse兩個,你待會看程式的時候,就會發現比起WebClient要多幾個步驟才能做一件事。
在開始使用HttpWebRequest和HttpWebResponse之前,我們先來看看HTTP(Hypertext Transfer Protocol)這個通訊協定,似乎HTTP隨著WWW的發展越來越顯得重要,太多地方都用了!HTTP所傳送的message有兩種格式,一個是request message,另一個是response message。(這不是廢話,client-server的架構大概都是這樣。下面列出message的大概格式,主要是給個view,要詳細的資料請google)
Request Message
HttpWebRequest和HttpWebResponse兩個類別,是從另外兩個抽象類別繼承而來,各分別WebRequest和WebResponse兩個,你待會看程式的時候,就會發現比起WebClient要多幾個步驟才能做一件事。
在開始使用HttpWebRequest和HttpWebResponse之前,我們先來看看HTTP(Hypertext Transfer Protocol)這個通訊協定,似乎HTTP隨著WWW的發展越來越顯得重要,太多地方都用了!HTTP所傳送的message有兩種格式,一個是request message,另一個是response message。(這不是廢話,client-server的架構大概都是這樣。下面列出message的大概格式,主要是給個view,要詳細的資料請google)
Request Message
- Request Line
method+sp+URL+sp+Version+cr+lf - Header Lines
header field name:+sp+value+cr+lf
header field name:+sp+value+cr+lf
... - Blank Line
cr+lf - Entity Body
要求的上傳資料
- Status Line
version+sp+status code+sp+phrase+cr+lf - Header Lines
header field name:+sp+value+cr+lf
header field name:+sp+value+cr+lf
... - Blank Line
cr+lf - Entity Body
回傳的資料(網頁內容)
- cr= carriage return(回到最前面)
- lf=line feed(換行)
- sp=space(空白)
接下來看看程式,用同步(Synchronous)的方式:
//取得URI識別
Uri thisUri = new Uri(requestTextBox.Text);
HttpWebRequest thisHttpWebRequest = (HttpWebRequest)WebRequest.Create(thisUri);
//設定快取原則
HttpRequestCachePolicy thisHttpRequestCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
thisHttpWebRequest.CachePolicy = thisHttpRequestCachePolicy;
//提出同步要求,並且傳回包含回應的HttpWebResponse物件
HttpWebResponse thisHttpWebResponse = (HttpWebResponse)thisHttpWebRequest.GetResponse();
//取得回應的header相關資料
messageTextBox.Text += thisHttpWebResponse.IsFromCache.ToString() + Environment.NewLine;
messageTextBox.Text += thisHttpWebResponse.StatusCode.ToString() + Environment.NewLine;
//將多行的TextBox移到最後一列
messageTextBox.Select(messageTextBox.Text.Length, 0);
messageTextBox.ScrollToCaret();//將控制項的內容捲動到目前插入號的位置
//關閉資料流,並釋放連線以重複使用
thisHttpWebResponse.Close();
標籤:
tool
2009年4月11日 星期六
System Properties系統特性
系統特性(System Properties)當中有下列幾項定義,這邊介紹主要是用在效能評估上面,因為排隊理論通常就是用來解決這樣的問題,我們先定義,之後才有辦法討論。(這是參考Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications, 2nd Edition)
- Performance:(效能)
The degree to which a system or component accomplishes its designated functions within given constraints, such as speed, accuracy, or memory usage. - Reliability:(可靠性)
The probability that the software will not cause the failure of the system for a specified time under specified condition. - Availability:(可利用性)
The ability of a system to perform its required function at a stated instant or over a stated period of time. - Dependability:(可依賴性)
The dependability of a computer system is the ability to deliver a service that can justifiably be trusted. - Performability:(可執行性)
The probability that the system reaches an accomplishment level y over a utilization interval (0,t).
標籤:
tool
2009年4月10日 星期五
Computer Simulation電腦模擬
在工程和科學的領域當中,除了實際測量或是試驗之外,我們還可以模擬自然或人為(man-made)的現象。其中所模擬的對象是系統(system),什麼是系統呢?一個系統可以視為元件的集合,組織這些元件使得它們可以完成一件目的。好比說一台電腦就是一個系統,包含無數個元件(CPU、記憶體、硬碟、主機板、鍵盤...),這些元件可以完成你要的一個目的,比方說上網、玩遊戲、看電影...。
所謂的模擬(simulation)是根據以往經驗(empirically)來決定系統特性(characteristics)的一個實驗,主要方式為產生(generation)與觀察(observation)系統的資料,於是就能夠知道系統的一些結論(inference)。
為何說是根據經驗呢?因為人類所知有限,根據人類的觀察和所推討的理論,盡可能來推測真實的發生情形。例如我們都知道東西會往下掉,推導出萬有引力的理論,那是不是全宇宙都是符合這個定律?我們不曉得,根據以往經驗來看是這樣的(東西會往下掉)。同樣的道理,模擬也是基於這樣的觀念,模擬必須有個模型(model),而此模型則是基於經驗與理論的基礎,並且要盡可能模仿(mimic)或仿真(emulate)系統的行為。
一個模型中的狀態以狀態變數(state variable)來表示,電腦上則是程式的變數(variable),一個模擬軟體事實上就是改變這些狀態變數,最後來觀測這些變數的數值,那要怎麼改變呢?則依照系統的模型(數學關係)。
模擬所需的模型有下列幾種分類方法:
所謂的模擬(simulation)是根據以往經驗(empirically)來決定系統特性(characteristics)的一個實驗,主要方式為產生(generation)與觀察(observation)系統的資料,於是就能夠知道系統的一些結論(inference)。
為何說是根據經驗呢?因為人類所知有限,根據人類的觀察和所推討的理論,盡可能來推測真實的發生情形。例如我們都知道東西會往下掉,推導出萬有引力的理論,那是不是全宇宙都是符合這個定律?我們不曉得,根據以往經驗來看是這樣的(東西會往下掉)。同樣的道理,模擬也是基於這樣的觀念,模擬必須有個模型(model),而此模型則是基於經驗與理論的基礎,並且要盡可能模仿(mimic)或仿真(emulate)系統的行為。
一個模型中的狀態以狀態變數(state variable)來表示,電腦上則是程式的變數(variable),一個模擬軟體事實上就是改變這些狀態變數,最後來觀測這些變數的數值,那要怎麼改變呢?則依照系統的模型(數學關係)。
模擬所需的模型有下列幾種分類方法:
- Continuous/Discrete
- Deterministic/Stochastic
- Terminating/Steady-State
- Synthetic(Distribution-Driven)/Trace-Driven
- Sequential/Distributed
- Symbolic
- Event-Oriented/Process-Oriented
標籤:
tool
2009年4月9日 星期四
WebClient Class
MSDN
英:http://msdn.microsoft.com/en-us/library/system.net.webclient.aspx
中:http://msdn.microsoft.com/zh-tw/library/system.net.webclient.aspx
先做個簡單的程式來學學網路應用程式,System.Net內的類別當中,我先用最高層次的類別來玩玩看,這個類別是WebClient,只能讓你當作client來使用。
控制項
上述是同步(Synchronous)的方式,程式需等待下載命令執行完之後,才能繼續run,你的成是有可能會當掉鎖住,解決方式就是使用非同步(Asynchronous )方式,非同步方法不會封鎖呼叫執行緒。
英:http://msdn.microsoft.com/en-us/library/system.net.webclient.aspx
中:http://msdn.microsoft.com/zh-tw/library/system.net.webclient.aspx
先做個簡單的程式來學學網路應用程式,System.Net內的類別當中,我先用最高層次的類別來玩玩看,這個類別是WebClient,只能讓你當作client來使用。
控制項
- requestTextBox=輸入的網址
- messageTextBox=訊息輸出
try
{
//取得URI識別
Uri thisUri = new Uri(requestTextBox.Text);
WebClient thisWebClient = new WebClient();
//設定快取原則
thisWebClient.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
//設定用於上載和下載字串的Encoding
thisWebClient.Encoding = Encoding.UTF8;
//下載回應的body資料為string,呼叫DownloadString這會開始執行下載動作
String thisDownloadString = thisWebClient.DownloadString(thisUri);
//取得回應的header資料
messageTextBox.Text += thisWebClient.ResponseHeaders.ToString() + Environment.NewLine;
messageTextBox.Text += thisDownloadString + Environment.NewLine;
//將多行的TextBox移到最後一列
messageTextBox.Select(messageTextBox.Text.Length, 0);
messageTextBox.ScrollToCaret();//將控制項的內容捲動到目前插入號的位置
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
//clean up
}
上述是同步(Synchronous)的方式,程式需等待下載命令執行完之後,才能繼續run,你的成是有可能會當掉鎖住,解決方式就是使用非同步(Asynchronous )方式,非同步方法不會封鎖呼叫執行緒。
try
{
//取得URI識別
Uri thisUri = new Uri(requestTextBox.Text);
WebClient thisWebClient = new WebClient();
//設定快取原則
thisWebClient.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
//設定用於上載和下載字串的Encoding
thisWebClient.Encoding = Encoding.UTF8;
//委派處理WebClient的DownloadStringCompleted 事件的方法
thisWebClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(thisWebClient_DownloadStringCompleted);
//呼叫DownloadString這會開始執行下載動作
thisWebClient.DownloadStringAsync(thisUri);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
//clean up
}
void thisWebClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
//throw new NotImplementedException();
try
{
//取得回應的body資料
String thisDownloadString = e.Result.ToString() + Environment.NewLine;
//取得回應的header資料
messageTextBox.Text += ((WebClient)sender).ResponseHeaders.ToString() + Environment.NewLine;
messageTextBox.Text += thisDownloadString + Environment.NewLine;
//將多行的TextBox移到最後一列
messageTextBox.Select(messageTextBox.Text.Length, 0);
messageTextBox.ScrollToCaret();//將控制項的內容捲動到目前插入號的位置
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
//clean up
}
}
標籤:
tool
2009年4月6日 星期一
Networking Programming網路程式設計
本篇文章介紹使用.NET Framework來撰寫網路應用程式,參考書籍可以看「Visual C# 2008網路程式設計之道」(真的是一本參考書),基峯資訊出版,黃嘉輝著,訂價台幣550元整。如果不想買的話,可以參考MSDN的網站,書裡面的內容和MSDN是差不多的,可以省下一些錢。
黃嘉輝(2008),Visual C# 2008網路程式設計之道,台北:碁峰。
要寫網路程式的話,最主要利用兩個namespace的類別(class),一個是System.Net,另一個是System.Net.Sockets。
其中,建德兄說網路程式的設計與撰寫,可以利用非同步程式設計模式,參考http://msdn.microsoft.com/zh-tw/library/ms228969.aspx,這會是比較優秀的方法,避免視窗程式鎖住當機。
首先介紹OSI七層,貼在這裡當作參考(關鍵字);
以WebClient類別來說,WebClient使用下層的WebRequest和WebResponse製作,避免讓我們接觸下層的複雜功能,也因此限制了一些!所以使用上要注意,進階功能還是要使用下層的類別。另外,WebClient類別僅支援HTTP、FTP、file的通訊協定,這可能是因為WebRequest和WebResponse的繼承類別只有這三類,所以僅支援HTTP、FTP、file囉!
如果要操作TCP和UDP的話,就使用System.Net.TcpClient ,System.Net.UdpClient, System.Net.TcpListner, System.Net.UdpListner這些類別。如果不要通訊協定的話,那就用最底層的System.Net.Sockets類別,Sockets類別跟任何通訊協定沒有關係。
另外,由於抽象類別WebRequest和WebResponse有其他類別繼承,所謂的抽象類別(Abstract Class)是僅可以讓其他類別繼承(inherit),不能產生實體,你不能直接拿WebRequest和WebResponse來用,記住抽象類別這個特性。其關係為:
System.Net.WebRequest的子類別:
System.Net.WebResponse的子類別:
要寫網路程式的話,最主要利用兩個namespace的類別(class),一個是System.Net,另一個是System.Net.Sockets。
其中,建德兄說網路程式的設計與撰寫,可以利用非同步程式設計模式,參考http://msdn.microsoft.com/zh-tw/library/ms228969.aspx,這會是比較優秀的方法,避免視窗程式鎖住當機。
首先介紹OSI七層,貼在這裡當作參考(關鍵字);
- Application
- Presentation
- Session
- Transport
- Network
- Data Link
- Physical
- Application Layer(HTTP, FTP, SMTP, DNS...)
- Transport Layer(TCP, UDP)
- Network Layer(IP)
- Data Link Layer(Ethernet)
- Physical Layer
- System.Net.WebClient||無
- System.Net.WebRequest, System.Net.WebResponse||無
- System.Net.TcpClient,System.Net.UdpClient||System.Net.TcpListner,System.Net.UdpListner
- System.Net.Sockets(沒有區分client-server)
以WebClient類別來說,WebClient使用下層的WebRequest和WebResponse製作,避免讓我們接觸下層的複雜功能,也因此限制了一些!所以使用上要注意,進階功能還是要使用下層的類別。另外,WebClient類別僅支援HTTP、FTP、file的通訊協定,這可能是因為WebRequest和WebResponse的繼承類別只有這三類,所以僅支援HTTP、FTP、file囉!
如果要操作TCP和UDP的話,就使用System.Net.TcpClient ,System.Net.UdpClient, System.Net.TcpListner, System.Net.UdpListner這些類別。如果不要通訊協定的話,那就用最底層的System.Net.Sockets類別,Sockets類別跟任何通訊協定沒有關係。
另外,由於抽象類別WebRequest和WebResponse有其他類別繼承,所謂的抽象類別(Abstract Class)是僅可以讓其他類別繼承(inherit),不能產生實體,你不能直接拿WebRequest和WebResponse來用,記住抽象類別這個特性。其關係為:
System.Net.WebRequest的子類別:
- HttpWebRequest
- FtpWebRequest
- FileWebRequest
System.Net.WebResponse的子類別:
- HttpWebResponse
- FtpWebResponse
- FileWebResponse
標籤:
tool
訂閱:
文章 (Atom)