這篇文章主要從.NetCore全面開源、依賴注入、包引入、跨平臺、應用服務器的特色來入手。大約須要10分鐘的閱讀時間。 前端
在.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是一個輕量級的web服務器。由於輕量,因此通常不直接對外提供服務。通常部署在nginx、traefix、iis後面。如下是微軟官方的圖:
若是是內部網絡的請求,能夠直接使用Kestrel:
若是是公網,建議在nginx、iis等反代後面:
1)Kestrel是基於事件驅動的異步I/O服務器,而且是事件循環模型。Kestrel經過libuv來實現事件循環模型。而libuv在linux是經過epoll實現異步,且epoll使用I/O多路複用,這也是在linux線程中效率很高的。而一直以效率著稱的Redis也是使用此模型。
簡單一點來講,Kestrel接收請求是這樣進化的,從排隊買票的例子來講:一開始只有一個售票員,後面的隊伍愈來愈長。經理說,增長售票窗口。可是增長窗口的時候有些隊伍很長,有些隊伍很短。這是由於有些人處理的時間長,致使隊伍過長。這時經理想到了一個方法,讓售票員同時處理幾我的。慢的人繼續等待,快的人快速完成。
2)Kestrel的事件循環隊列是根據系統CPU核數/2來肯定的。固然這個值能夠設置,最小是1,最大是16。由於適當的事件循環隊列數才能提升更大的I/O吞吐能力,不是越高越好。在事件循環隊列中,每次處理8個事件。
能夠關注本人的公衆號,多年經驗的原創文章共享給你們。