.NetCore之基礎

.NetCore幾大特色

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

 

與.Net的區別

    在.Net與.NetCore在代碼編寫上並沒有太大的區別,都使用C#做爲編程語言。主要體如今.NetCore更加擁抱開源、與世界共同發展。 linux

 

開源的重要性

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

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

    再說爲什麼微軟要開源?微軟一直沉迷於閉源不可開交。這與他們的領頭羊有關,這也是微軟.NET這方面一直頹勢的緣由。轉折點就在微軟新任 CEO 薩蒂亞·納德拉,他但願經過軟件驅動微軟這艘大船。 編程

 

依賴注入&控制反轉

    相信不少人都懂得依賴注入。這裏主要說一下.net core中的依賴注入與控制反轉。 windows

    主要參考以前寫過的文章 服務器

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個事件。

 

能夠關注本人的公衆號,多年經驗的原創文章共享給你們。

相關文章
相關標籤/搜索