.net進階:線程與進程的區別、什麼是Windows服務?

來源:互聯網
上載者:User

描述線程與進程的區別?
線程是比進程更小的處理模組。
進程和線程都是由作業系統所體會的程式啟動並執行基本單元,系統利用該基本單元實現系統對應用的並發性。進程和線程的區別在於:

簡而言之,一個程式至少有一個進程,一個進程至少有一個線程.
線程的劃分尺度小於進程,使得多線程程式的並發性高。
另外,進程在執行過程中擁有獨立的記憶體單元,而多個線程共用記憶體,從而極大地提高了程式的運行效率。
線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程式啟動並執行入口、順序執行序列和程式的出口。但是線程不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個線程執行控制。
從邏輯角度來看,多線程的意義在於一個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分派。這就是進程和線程的重要區別。

進程是具有一定獨立功能的程式關於某個資料集合上的一次運行活動,進程是系統進行資源分派和調度的一個獨立單位.
線程是進程的一個實體,是CPU調度和指派的基本單位,它是比進程更小的能獨立啟動並執行基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程式計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共用進程所擁有的全部資源.
一個線程可以建立和撤銷另一個線程;同一個進程中的多個線程之間可以並發執行.
 
線程的引入:例如,有一個Web伺服器要進程的方式並發地處理來自不同使用者的網頁訪問請求的話,可以建立父進程和多個子進程的方式來進行處理,但是建立一個進程要花費較大的系統開銷和佔用較多的資源。除外,這些不同的使用者子進程在執行的時候涉及到進程環境切換,環境切換是一個複雜的過程。所以,為了減少進程切換和建立的開銷,提高執行效率和節省資源,人們在作業系統中引入了"線程(thread)"的概念。
 進程的作用和定義:進程是為了提高CPU的執行效率,減少因為程式等待帶來的CPU空轉以及其他電腦軟硬體資源的浪費而提出來的。進程是為了完成使用者任務所需要的程式的一次執行過程和為其分配資源的一個基本單位,是一個具有獨立功能的程式段對某個資料集的一次執行活動。
線程和進程的區別:
      1、線程是進程的一部分,所以線程有的時候被稱為是輕權進程或者輕量級進程。
      2、一個沒有線程的進程是可以被看作單線程的,如果一個進程內擁有多個進程,進程的執行過程不是一條線(線程)的,而是多條線(線程)共同完成的。
      3、系統在啟動並執行時候會為每個進程分配不同的記憶體地區,但是不會為線程分配記憶體(線程所使用的資源是它所屬的進程的資源),線程組只能共用資源。那就是說,出了CPU之外(線程在啟動並執行時候要佔用CPU資源),電腦內部的軟硬體資源的分配與線程無關,線程只能共用它所屬進程的資源。
      4、與進程的控製表PCB相似,線程也有自己的控製表TCB,但是TCB中所儲存的線程狀態比PCB表中少多了。
      5、進程是系統所有資源分派時候的一個基本單位,擁有一個完整的虛擬空間地址,並不依賴線程而獨立存在。
          進程與程式的區別:
      程式是一組指令的集合,它是靜態實體,沒有執行的含義。而進程是一個動態實體,有自己的生命週期。一般說來,一個進程肯定與一個程式相對應,並且只有一個,但是一個程式可以有多個進程,或者一個進程都沒有。除此之外,進程還有並發性和交往性。簡單地說,進程是程式的一部分,程式啟動並執行時候會產生進程。
總結:
      線程是進程的一部分,進程是程式的一部分。

 

什麼是Windows服務,它的生命週期與標準的EXE程式有什麼不同
 
Windows Service 是主要用於伺服器環境而長期啟動並執行應用程式, 這類程式不需要有使用者介面或者任何類比輸出。 任何的使用者訊息通常都是記錄在Windows 事件記錄裡。Windows Service可以在作業系統啟動的時候開始,一直在後台運行,當有需要時也可以手動啟動,我們可以通過管理工具裡面的服務進行統一管理。
當系統啟動完畢後,Windows服務並不需要通過登陸頁面後才能啟動,而我們啟動一般的exe檔案卻要先登陸Windows後才能啟動它。
 
Windows Service 是一種可隨 Windows 作業系統啟動而啟動的,在後台啟動並執行,通常不和使用者產生互動的程式。它無法通過雙擊來運行,類似於 Unix 守護進程(daemon processes),當使用者登出時它也不會停止。
Windows 服務由三部分組成:1.一個服務可執行檔;2.一個服務控製程序(SCP);3.服務控制管理員(SCM),負責在 HKLM\SYSTEM\CurrentControlSet\Services 下建立服務索引值。使用者可通過 SCP 控制服務的啟動、停止、暫停等,SCP 會通過 SCM 調用服務程式。
Window 標準的exe可執行程式通常有一個使用者介面,Console或GUI,通常由使用者來啟動或停止
Windows服務是運行在windows後台指定使用者下(預設System)的應用程式,它沒有標準的UI介面,想比標準的EXE程式,Windows服務是在服務開始的時候建立,而在服務結束的時候銷毀,而且可以設定服務是否與作業系統一起啟動,一起關閉。它支援三種方式:1)自動方式 2)手動方式 3)禁用 。自動方式的時候,windows服務將在OS啟動後自動啟動運行,而手動方式則必須手工啟動服務,禁用的情況下服務將不能被啟動。另外標準的EXE預設使用的當前登入的使用者,而windows服務則預設使用System使用者,這在對系統資源訪問的時候特別需要注意。
Windows上的單個進程所能訪問的最大記憶體量是多少?它與系統的最大虛擬記憶體一樣嗎?這對於系統設計有什麼影響?
32 位Windows上單個進程所能訪問的最大記憶體量是4G,單由於作業系統需要給系統核心分配2G的空間,所以一般使用者程式的進程可使用的最大記憶體為2G。
不一定一樣,32位的作業系統的進程可訪問的最大記憶體量是4G,這4G包含了虛擬記憶體,而一個進程可訪問的最大記憶體量也是4G,所以進程記憶體訪問量在實體記憶體大於等於4G的時候跟虛擬記憶體無關,而當實體記憶體小於4G時,進程訪問的記憶體量隨著虛擬記憶體的增加而增加,直到4G
Windows使用一個系統:虛擬定址系統。該系統把程式可用的記憶體位址映射到硬體記憶體中的實際地址上,這些任務完全有Windows後台管理,其實際結 果是32位處理器上的每個進程都可以使用4GB的記憶體------無論電腦上有多少硬碟空間(在64位處理器上這個數值會更大)。這個4GB記憶體實際上 包含了程式的所有部分------包括可執行代碼,代碼載入的所有dll,以及程式運行時使用的所有變數的內容。這個4GB記憶體稱為虛擬位址空間,或虛擬 記憶體。
EXE和DLL之間的區別是什嗎?
EXE就是可執行檔,你可要雙擊它, 它就可以運行,而DLL是一個動態連結程式庫檔案,就是說,它不可以自己運行,它是須要一個程式的其它功能啟動並執行時候,它才能運行,打個比方,如果你的QQ要升級,那QQ裡面有關升級的DLL檔案它就會運行.
EXE是帶有程式入口(Main)的能被終端使用者直接執行的應用程式,隨著它的啟動系統會產生一個相應的進程。
DLL是動態連結程式庫,不包含程式執行入口,不能被終端使用者直接執行,本身需要附加到現有的進程中才可以運行。
但兩者都是基於PE格式,運行時由磁碟中的映像載入被調用者的記憶體或者共用空間中執行,包含程式的資料資訊,只是EXE還包括程式的代碼資訊。
DLL可被多個程式共用,而EXE則不行,只能單獨執行。

 

什麼是強型別,什麼是弱類型?哪種更好些?為什麼?
弱類型語言允許將一塊記憶體看做多種類型。比如直接將整型變數與字元變數相加。C and C++ 是靜態語言,也是弱類型語言;Perl and PHP 是動態語言,但也是弱類型語言。
強型別語言在沒有強制類型轉化前,不允許兩種不同類型的變數相互操作。Java、C# 和 Python 等都是強型別語言。
使用哪種語言還是要按需而定。編寫簡單小應用,使用弱類型語言可節省很多代碼量,有更高的開發效率。而對於構建大型項目,使用強型別語言可能會比使用弱類型更加規範可靠。
強型別是指使用記憶體中的資料時必須做類型轉化,否則不能使用,弱類型不需要程式轉化,運行時系統自動處理資料直接的類型。
使用強型別的好處:支援智能輸入提示、編譯時間檢測出潛在的運行問題、介面中避免資料不一致問題,並且使用強型別可以加快程式的開發速率和程式的運行速度。
PID是什嗎?在做系統的故障排除時如何使用它?
PID是系統進程的全域唯一標誌符,在排除系統故障時可以根據PID找到對應的進程進而找到對應的程式。
PID = Process Identifier, 是一個全域唯一的用來標識進程的整數。在多任務系統中,可用來診斷系統中發生錯誤的進程。 
單個TCP/IP連接埠上能夠偵聽多少個進程?
可能只有一個。如果你需要建立另一個TCP/IP監聽,你必須建立另一個不同的連接埠
什麼是GAC?它解決了什麼問題?
Gloal Assembly Cache,全域應用程式集緩衝。它解決了幾個程式共用某一個程式集的問題。不必再將那個被共用的程式集拷貝到應用程式目錄了,其實這道理很簡單,.net應用程式在載入的時候,會首先查看全域應用程式集緩衝,如果有就可以直接使用,沒有再到應用程式目錄進行尋找。
每一個CLR(Common Language Runtime)所在的電腦都有一個全域組件快取(Global Assembly Cache,GAC)。部署在GAC上的程式集必須有一個強式名稱。一種由.net framework sdk提供的名叫 "Global Assembly Cache tool" (Gacutil.exe)的開發工具,可以把程式集部署到GAC上。GAC儲存專門指定的程式集以供電腦上多個應用程式共用。它也為我們提供了克服"DLL地獄"的問題。
百度百科上的解釋:
GAC全稱是Global Assembly Cache
作用是可以存放一些有很多程式都要用 到的公用Assembly,例如System.Data、System.Windows.Forms等等。這樣,很多程式就可以從GAC裡面取得 Assembly,而不需要再把所有要用到的Assembly都拷貝到應用程式的執行目錄下面。舉例而言,如果沒有GAC,那麼勢必每個WinForm程 序的目錄下就都要從C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705下面拷貝一份 System.Windows.Forms.dll,這樣顯然不如都從GAC裡面取用方便,也有利於Assembly的升級和版本控制。

   除了系統預設放置在GAC中的Assembly如System.Windows.Forms以外,我們也可以添加自己的Assembly:
   1)建立一個strong-name的Assembly,例如ToolbarComponent.dll
   2)運行gacutil -i ToolbarComponent.dll,把這個Assembly添加到GAC
   3)在程式中動態裝載:
   System.Reflection.Assembly ass=Assembly.Load("ToolbarComponent, Version=1.0.934.20434, Culture=neutral, PublicKeyToken=65f45658c8d4927f");
   MessageBox.Show("Is the assembly loaded from GAC? "+ass.GlobalAssemblyCache);
   在 上面的程式中,ToolbarComponent就是從GAC裝載而不是從程式的運行目錄下的dll檔案中裝載,程式目錄下不需要放置 ToolbarComponent.dll程式也能正常運行。另外,Assembly.Load()中的參數可以通過"gacutil -l"查到。

   另外,上面提到了GAC中的Assembly必須是strong-name的。建立strong-name的Assembly的步驟大致如下:
   a) 在命令列運行“sn -k keyPair.snk”建立一個密鑰檔案。這裡的sn.exe也是.NET附帶的一個工具。
   b) 在VS.NET裡面修改“AssemblyInfo.cs”檔案:
   [assembly: AssemblyDelaySign(false)]   
   [assembly: AssemblyKeyFile("..\\..\\keyPair.snk")]   
   c) 編譯項目,就能得到一個strong-name的Assembly。

   MSDN中有一些對GAC的介紹,您可以參考:
   1)《Assembly Cache Viewer (Shfusion.dll)》
   2)《Global Assembly Cache》

   .NET Framework中附帶了一些和GAC有關的工具,其中包括:
   1)Gacutil.exe,一個命令列的工具,用於在GAC中瀏覽、添加、刪除Assembly
   2)Ngen.exe,也是一個命令列的工具,用於在GAC中建立Native Image
   3)mscorcfg.msc,一個MMC終端,可以圖形化完成Gacutil.exe的主要功能。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.