.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:

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


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

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

最新文章

  1. Java程序员的日常—— Arrays工具类的使用
  2. FilterDispatcher已被标注为过时解决办法 >>> FilterDispatcher <<< is deprecated!
  3. SQL Server(三):Select语句
  4. tomcat 7下spring 4.x mvc集成websocket以及sockjs完全参考指南
  5. Unity 插件制作笔记(持续更新)
  6. liunux mysql MySQL表名不区分大小写的设置方法
  7. Python3 基本数据类型注意事项
  8. OE7设置菜单为什么这么少?
  9. Python 核心数据类型
  10. 我的PHP之旅--数据库连接MySQL服务器,添加 删除 查询
  11. ruby编程语言-学习笔记5(第5章 语句和控制结构)
  12. jQuery进行图片预先加载
  13. ZOJ 38727(贪心)
  14. Android:mimeType
  15. jquery序列化serialize()方法空格变为+问题解决参考方法
  16. JAVA集合2--Collection架构
  17. java 文件过滤器
  18. day08文件操作的三步骤,基础的读,基础的写,with...open语法,文件的操作模式,文件的操作编码问题,文件的复制,游标操作
  19. Monkey工具
  20. 三维计算机视觉 — 中层次视觉 — Point Pair Feature

热门文章

  1. c# 第七节 编程规范,vs中的各种设置
  2. ssh config 配置
  3. 【Kafka】Windows环境配置测试
  4. Linux安装docker(ubuntu16.04和centos7.4)
  5. svn服务器端程序安装(二)
  6. Ultimate Chicken Horse GameProject需求规格报告书
  7. Linux性能优化实战学习笔记:第十六讲
  8. 日志模块log4js的配置说明
  9. jmeter和ab的对比
  10. nacos服务注册与发现及服务配置实现