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