.NetCore之基础

摘要:
这主要体现在。NetCore更加拥抱开源,与世界共同发展NetCore已经完全开源,微软也逐渐面向开源。这里我们主要讨论中的依赖注入和控制反转。netcore。之后netcore问世,首先要解决的问题是包显示和依赖性。netcore的包依赖性似乎可以无限扩展,直到没有依赖性为止。事实上,微软推出了。用于跨平台的netcore。跨平台是的最重要特征。netcore netcore可以简单地在任何平台上运行。最大的好处来自Kertrel服务器。Kestrel通过libuv实现了事件循环模型。

.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个事件。

 

可以关注本人的公众号,多年经验的原创文章共享给大家。

.NetCore之基础第3张

免责声明:文章转载自《.NetCore之基础》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇HTTP 499状态码 nginx下499错误详解-乾颐堂MongoDB 状态监控、备份复制及自动分片下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ASP.NET Core开发者路线指南(转)

先决条件 C# Entity Framework ASP.NET Core SQL基础知识 通用开发技能 学习GIT, 在GitHub中创建开源项目 掌握HTTP(S)协议, 及其请求方法(GET, POST, PUT, PATCH, DELETE, OPTIONS) 不要害怕使用 Google,Google搜索技巧 学习dotnet CL...

如何为你的代码选择一个开源协议

快速选择 目前流行的开源协议有很多,并且同一款协议有很多变种,比如你或许看到过' CC Attribution-NoDerivs',' CC Attribution-NonCommercial'同属CC协议(后面会有介绍)。如此纷繁的协议该如何选择?协议太宽松会导致作者丧失对作品的很多权利,太严格又不便于使用者使用及作品的传播。所以除了协议多之外,你还要考...

ASP.NET Core开发-使用Nancy框架

ASP.NET Core开发-使用Nancy框架  Nancy简介 Nancy是一个轻量级的独立的框架,下面是官网的一些介绍: Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台,框架的目标是保持尽可能多的方式,并提供一个super-duper-happy-path所有交互。 Nancy 设计用于处理...

基于第三方开源库的OPC服务器开发指南(3)——OPC客户端

本篇将讲解如何编写一个OPC客户端程序测试我们在前文《基于第三方开源库的OPC服务器开发指南(2)——LightOPC的编译及部署》一篇建立的服务器。本指南的目的是熟悉OPC服务器的开发流程,所以客户端部分我就不做过多描述,只是简单讲解几个关键技术细节及其实现函数,完整工程源码请从如下地址获取: https://github.com/Neo-T/OPCDA...

蚂蚁金服开源机器学习工具SQLFlow,机器学习比SQL还简单

来自:开源最前线(ID:OpenSourceTop) 综合自:AI前线、https://github.com/sql-machine-learning/sqlflow 5月6日,蚂蚁金服副 CTO 胡喜正式宣布开源机器学习工具 SQLFlow:“未来三年,AI 能力会成为每一位技术人员的基本能力。我们希望通过开源 SQLFlow,降低人工智能应用的技术...

开源中文分词工具探析(四):THULAC

THULAC是一款相当不错的中文分词工具,准确率高、分词速度蛮快的;并且在工程上做了很多优化,比如:用DAT存储训练特征(压缩训练模型),加入了标点符号的特征(提高分词准确率)等。 【开源中文分词工具探析】系列: 开源中文分词工具探析(一):ICTCLAS (NLPIR) 开源中文分词工具探析(二):Jieba 开源中文分词工具探析(三):Ansj 开...