.NetCore之基礎


.NetCore幾大特點

    這篇文章主要從.NetCore全面開源、依賴注入、包引入、跨平台、應用服務器的特點來入手。大約需要10分鍾的閱讀時間。

 

與.Net的區別

    在.Net與.NetCore在代碼編寫上並無太大的區別,都使用C#作為編程語言。主要體現在.NetCore更加擁抱開源、與世界共同發展。

 

開源的重要性

    一般公司使用的框架是開源的。開源的框架能帶給我們效率上的提高,無需浪費更多的時間對付底層,讓出更多的時間去接觸業務。

    .net core已進行全面的開源化,微軟也逐步面向開源。哪個熱門框架不是開源的?前端大佬們的Angular、React、Vue哪個不是開源的。

    再說為何微軟要開源?微軟一直沉迷於閉源不可開交。這與他們的領頭羊有關,這也是微軟.NET這方面一直頹勢的原因。轉折點就在微軟新任 CEO 薩蒂亞·納德拉,他希望通過軟件驅動微軟這艘大船。

 

依賴注入&控制反轉

    相信很多人都懂得依賴注入。這里主要說一下.net core中的依賴注入與控制反轉。

    主要參考之前寫過的文章

1)大話DI依賴注入+IOC控制反轉(一) 之 定義

2)大話DI依賴注入+IOC控制反轉(二) 之 淺析.Net Core中的DI與IOC

 

包引入

    在.net中,包引用看起來①層次不明顯 ②不知道這個包詳細依賴 ③項目依賴多容易導致包依賴問題。

    而.net core出來后,第一解決的就是包顯示與依賴的問題。.net core的包依賴看起來是可以無限延伸直至沒有依賴。很容易地就能看出包的問題,以及避免了雙向依賴的問題。

    其實包的引入在.net core中,只是解決了顯示的問題。整個包,在編譯的時候還是所有的dll在同一層文件夾。希望在以后,代碼編譯后,可以做到不同包不同文件夾這樣能更好地區分。

 

跨平台

.net core為何誕生?其實微軟為了跨平台而推出了.net core。跨平台是.net core最重要的特性。.net core可以很簡單地在任何平台上運行。當然.net也可以通過mono在linux上運行,但是很麻煩,也可能報各種天生的錯誤,支持性太差。但是.net core的跨平台是零成本。

在跨平台來說,.net core封裝了底層,可以編譯成特定的代碼在linux上運行。

 

應用服務器

    眾所周知,為何.net core能在linux上運行?最大得益於Kertrel服務器。如果沒有Kertrel,是運行不起來一個web應用的。iis當然不行,它是天生的臃腫的且只支持windows系統。

    據性能測試,Kertrel服務器是iis性能的2-5倍左右。

 

簡單介紹kestrel

    kestrel是一個輕量級的web服務器。因為輕量,所以一般不直接對外提供服務。一般部署在nginx、traefix、iis后面。以下是微軟官方的圖:

    如果是內部網絡的請求,可以直接使用Kestrel:

clipboard1

 

    如果是公網,建議在nginx、iis等反代后面:

clipboard2

 

Kestrel幾個比較重要的特點:

    1)Kestrel是基於事件驅動的異步I/O服務器,並且是事件循環模型。Kestrel通過libuv來實現事件循環模型。而libuv在linux是通過epoll實現異步,且epoll使用I/O多路復用,這也是在linux線程中效率很高的。而一直以效率著稱的Redis也是使用此模型。

    簡單一點來說,Kestrel接收請求是這樣進化的,從排隊買票的例子來說:一開始只有一個售票員,后面的隊伍越來越長。經理說,增加售票窗口。但是增加窗口的時候有些隊伍很長,有些隊伍很短。這是因為有些人處理的時間長,導致隊伍過長。這時經理想到了一個方法,讓售票員同時處理幾個人。慢的人繼續等待,快的人快速完成。

    2)Kestrel的事件循環隊列是根據系統CPU核數/2來確定的。當然這個值可以設置,最小是1,最大是16。因為適當的事件循環隊列數才能提高更大的I/O吞吐能力,不是越高越好。在事件循環隊列中,每次處理8個事件。

 

可以關注本人的公眾號,多年經驗的原創文章共享給大家。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM