.NET软件开发, 你应该知道 (整)
1. 線程與進(jìn)程的區(qū)別?
??????多線程共存于應(yīng)用程序中是現(xiàn)代操作系統(tǒng)中的基本特征和 重要標(biāo)志。用過UNIX操作系統(tǒng)的讀者知道進(jìn)程,在UNIX操作系統(tǒng)中,每個應(yīng)用程序的執(zhí)行都在操作系統(tǒng)內(nèi)核
中登記一個進(jìn)程標(biāo)志,操作系統(tǒng)根據(jù)分配的標(biāo)志 對應(yīng)用程序的執(zhí)行進(jìn)行調(diào)度和系統(tǒng)資源分配,但進(jìn)程和線程有什么區(qū)別呢?
??????進(jìn)程和線程都是由操作系統(tǒng)所體會的程序運行的基本單元,系統(tǒng)利用該基本單元實現(xiàn)系統(tǒng)對應(yīng)用的并發(fā)性。
????? 進(jìn)程和線程的區(qū)別在于:
??????線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高。
??????另外,進(jìn)程在執(zhí)行過程中擁有獨立的內(nèi)存單元,而多個線程共享內(nèi)存,從而極大地提高了程序的運行效率。
??????線程在執(zhí)行過程中與進(jìn)程還是有區(qū)別的。每個獨立的線程有一個程序運行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個線程執(zhí)行控制。
??????從邏輯角度來看,多線程的意義在于一個應(yīng)用程序中,有多個執(zhí)行部分可以同時執(zhí)行。但操作系統(tǒng)并沒有將多個線程看做多個獨立的應(yīng)用,來實現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配。這就是進(jìn)程和線程的重要區(qū)別。
??????進(jìn) 程:(Process)是最初定義在Unix等多用戶、多任務(wù)操作系統(tǒng)環(huán)境下用于表示應(yīng)用程序在內(nèi)存環(huán)境中基本執(zhí)行單元的概念。以Unix操作系統(tǒng)為例,進(jìn)程是Unix操作系統(tǒng)環(huán)境中的基本成分、是系統(tǒng)資源分配的基本單位。Unix操作系統(tǒng)中完成的幾乎所有用戶管理和資源分配等工作都是通過操作系統(tǒng)對應(yīng)用程 序進(jìn)程的控制來實現(xiàn)的。?
??????C、C++、Java等語言編寫的源程序經(jīng)相應(yīng)的編譯器編譯成可執(zhí)行文件后,提交給計算機處理器運行。這時, 處在可執(zhí)行狀態(tài)中的應(yīng)用程序稱為進(jìn)程。從用戶角度來看,進(jìn)程是應(yīng)用程序的一個執(zhí)行過程。從操作系統(tǒng)核心角度來看,進(jìn)程代表的是操作系統(tǒng)分配的內(nèi)存、CPU 時間片等資源的基本單位,是為正在運行的程序提供的運行環(huán)境。進(jìn)程與應(yīng)用程序的區(qū)別在于應(yīng)用程序作為一個靜態(tài)文件存儲在計算機系統(tǒng)的硬盤等存儲空間中,而 進(jìn)程則是處于動態(tài)條件下由操作系統(tǒng)維護(hù)的系統(tǒng)資源管理實體。多任務(wù)環(huán)境下應(yīng)用程序進(jìn)程的主要特點包括:
●進(jìn)程在執(zhí)行過程中有內(nèi)存單元的初始入口點,并且進(jìn)程存活過程中始終擁有獨立的內(nèi)存地址空間;
●進(jìn)程的生存期狀態(tài)包括創(chuàng)建、就緒、運行、阻塞和死亡等類型;
●從應(yīng)用程序進(jìn)程在執(zhí)行過程中向CPU發(fā)出的運行指令形式不同,可以將進(jìn)程的狀態(tài)分為用戶態(tài)和核心態(tài)。處于用戶態(tài)下的進(jìn)程執(zhí)行的是應(yīng)用程序指令、處于核心態(tài)下的應(yīng)用程序進(jìn)程執(zhí)行的是操作系統(tǒng)指令。
在Unix操作系統(tǒng)啟動過程中,系統(tǒng)自動創(chuàng)建swapper、init等系統(tǒng)進(jìn)程,用于管理內(nèi)存資源以及對用戶進(jìn)程進(jìn)行調(diào)度等。在Unix環(huán)境下無論是由操作系統(tǒng)創(chuàng)建的進(jìn)程還要由應(yīng)用程序執(zhí)行創(chuàng)建的進(jìn)程,均擁有唯一的進(jìn)程標(biāo)識(PID)。
2. Windows服務(wù)? 它的生命周期與標(biāo)準(zhǔn)的EXE程序有什么不同?
Winndows Service 是一種可隨 Windows 操作系統(tǒng)啟動而啟動的,在后臺運行的,通常不和用戶產(chǎn)生交互的程序。它無法通過雙擊來運行,類似于 Unix 守護(hù)進(jìn)程(daemon processes),當(dāng)用戶注銷時它也不會停止。
Windows 服務(wù)由三部分組成:1.一個服務(wù)可執(zhí)行文件;2.一個服務(wù)控制程序(SCP);3.服務(wù)控制管理器(SCM),負(fù)責(zé)在 HKLM"SYSTEM"CurrentControlSet"Services 下創(chuàng)建服務(wù)鍵值。用戶可通過 SCP 控制服務(wù)的啟動、停止、暫停等,SCP 會通過 SCM 調(diào)用服務(wù)程序。
Window 標(biāo)準(zhǔn)的exe可執(zhí)行程序通常有一個用戶界面,Console或GUI,通常由用戶來啟動或停止。
3. Windows上的單個進(jìn)程所能訪問的最大內(nèi)存量是多少?
Windows使用一個系統(tǒng):虛擬尋址系統(tǒng)。該系統(tǒng)把程序可用的內(nèi)存地址映射到硬件內(nèi)存中的實際地址上,這些任務(wù)完全有Windows后臺管理,其實際結(jié) 果是32位處理器上的每個進(jìn)程都可以使用4GB的內(nèi)存------無論計算機上有多少硬盤空間(在64位處理器上這個數(shù)值會更大)。這個4GB內(nèi)存實際上 包含了程序的所有部分------包括可執(zhí)行代碼,代碼加載的所有dll,以及程序
運行時使用的所有變量的內(nèi)容。這個4GB內(nèi)存稱為虛擬地址空間,或虛擬 內(nèi)存。
4. EXE與DLL之間的區(qū)別?
現(xiàn)在的Windows中,exe 和 dll 都是基于PE格式,exe 是通常的可執(zhí)行文件,包含數(shù)據(jù)和代碼,而 dll 是動態(tài)鏈接文件,也有可能是純資源文件,只包含數(shù)據(jù),不含程序代碼。ddl 的目的之一就是提供能被許多不同的應(yīng)用程序所使用的函數(shù)和資源。dll 中的函數(shù)和資源為軟件開發(fā)提供了復(fù)用。它們是在運行時由磁盤物理映像載入被調(diào)用者的內(nèi)存空間或共享內(nèi)存空間執(zhí)行。
5.什么是強類型,什么是弱類型?哪種更好些?為什么?
弱類型語言允許將一塊內(nèi)存看做多種類型。比如直接將整型變量與字符變量相加。C and C++ 是靜態(tài)語言,也是弱類型語言;Perl and PHP 是動態(tài)語言,但也是弱類型語言。
強類型語言在沒有強制類型轉(zhuǎn)化前,不允許兩種不同類型的變量相互操作。Java、C# 和 Python 等都是強類型語言。
使用哪種語言還是要按需而定。編寫簡單小應(yīng)用,使用弱類型語言可節(jié)省很多代碼量,有更高的開發(fā)效率。而對于構(gòu)建大型項目,使用強類型語言可能會比使用弱類型更加規(guī)范可靠。
6. PID是什么?在做系統(tǒng)的故障排除時如何使用它?
PID = Process Identifier, 是一個全局唯一的用來標(biāo)識進(jìn)程的整數(shù)。在多任務(wù)系統(tǒng)中,可用來診斷系統(tǒng)中發(fā)生錯誤的進(jìn)程。
7. 單個TCP/IP端口上能夠偵聽多少個進(jìn)程?
可能只有一個。如果你需要創(chuàng)建另一個TCP/IP監(jiān)聽,你必須建立另一個不同的端口
8.什么是GAC?它解決了什么問題?
每一個CLR(Common Language Runtime)所在的計算機都有一個全局程序集緩存(Global Assembly Cache,GAC)。部署在GAC上的程序集必須有一個強名稱。一種由.net framework sdk提供的名叫 "Global Assembly Cache tool" (Gacutil.exe)的開發(fā)工具,可以把程序集部署到GAC上。GAC存儲專門指定的程序集以供計算機上多個應(yīng)用程序共享。它也為我們提供了克服"DLL地獄"的問題。
如果相對強命名 有更過學(xué)習(xí),參見:強名稱程序集de構(gòu)建和引用http://www.cnblogs.com/Dlonghow/archive/2008/08/08/1263935.html
轉(zhuǎn)載于:https://www.cnblogs.com/Dlonghow/archive/2009/07/19/1526617.html
總結(jié)
以上是生活随笔為你收集整理的.NET软件开发, 你应该知道 (整)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PL/SQL学习笔记-循环控制与顺序控制
- 下一篇: Hashtable:仅有两列的表