?? document8s.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<style><!--
body,table {font-family:"宋體"; font-size: 9pt; line-height:11pt;}
a {text-decoration:none} a:hover {color:red;text-decoration:underline}
--></style>
<title>進程和線程的理解(1)——多任務</title>
</head>
<body link="#FF0000" vlink="#FF0000" alink="#FF0000" bgcolor="#FFC8C8">
<table border="0" width="100%" cellspacing="4" cellpadding="6">
<tr>
<td width="100%" bgcolor="#336699"><font color="#FFFFFF">進程和線程的理解(1)——多任務</font></td>
</tr>
</table>
<p>
多任務定義了一個操作系統同時運行多個程序的能力。但事實是,理想的多任務系統可以在幾個應用程序之間如此快的切換,以至于用戶可以認為所有的程序就象同時運行一樣(多處理器系統除外)。考慮下面的簡單程序。創建一個新的VB項目并在窗體上放一個按鈕和一個標簽控件,然后在窗體的Click事件中加入代碼:</p>
<p>Private Sub Command1_Click()<br>
Dim cnt&<br>
For cnt& = 1 To 2500<br>
Label1.Caption = cnt&<br>
Label1.Refresh<br>
Next cnt&<br>
End Sub</p>
<p> 單擊按鈕時,標簽計數器會顯示從1到2500的漸増數。將此程序編譯成可執行程序,然后運行該程序的兩個實例,并把它們并排。現單擊一個程序讓它運行,在它計數時,試著單擊另一個程序的按鈕。此試驗的結果和正在運行的操作系統以及用的是16位還是32位的VB有關。這說明了操作系統間在多任務方面的關鍵性差異。Windows3.x支持一種被稱為“非搶先式”也叫“協作式”多任務。在這種多任務中,應用程序盡力與另一個程序進行協作。操作系統分配給CPU一個程序,這個程序完全占用CPU直到它想讓給其它的程序為止。在我們示例中的固定循環牢牢占用CPU,阻止了其它程序的運行。如果Windows3.x或Win95(或Windows
NT)上使用16位的VB(只要這兩個計數器沒有被設成在獨立的內存空間運行),當一個計數器計數時另一個計數器就會被凍結。它不會計數并且也不能單擊它的命令按鈕。如果在使用16位VB的Windows95或Windows
NT上運行這個計數器程序的示例,同時點擊某個32位的應用程序,如開始菜單,會發現那些32位的程序并沒有被凍結。如果使用32位的VB來進行這個示例,會出現完全不同的結果。當一個計數器計數的同時點擊第二個計數器,第二個計數器會開始全速工作,而第一個計數器會慢下來(但它不會停止,它速度的降低程度與系統給前臺應用程序優先權大小有關)。</p>
<p> 在示例中的程序保持狀態不變,沒有退出Click事件或執行了DoEvents命令而釋放CPU,那顯然地,應有某些另外的機制使應用程序能釋放CPU資源。其實,釋放CPU資源并不是一件麻煩的事,操作系統會完成這項工作。這是一種稱為“搶先式多任務”的多任務形式。在該形式中,CPU的時間是由操作系統專門分配的。當操作系統認為一個應用程序已用完它的時間額度時,它會掛起該程序并保存所有的處理器內部寄存器狀態,然后轉向下一個程序。應用程序也有能力在任何它不需要CPU的時間時掛起它自身。</p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -