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

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

.NetCore之基础的更多相关文章

  1. netcore入门-基础

    .NETCORE1.0出来了,咦不错,什么开源,跨平台的,观望下等2.0:我擦2.0出来了可以学习了,截止到目前2.1都快出来了,是时候学习一下了. 先建一个webapi项目,从简单的demo开始 l ...

  2. .netCore+Vue 搭建的简捷开发框架 (4)--NetCore 基础 -2

    上节中,我们初步的介绍了一下NetCore的一些基础知识,为了控制篇幅(其实也是因为偷懒),我将NetCore 基础分为两部分来写. 0.WebAPI 项目的建立 1..NetCore 项目执行(加载 ...

  3. netcore实践:跨平台动态加载native组件

    缘起netcore框架下实现基于zmq的应用. 在.net framework时代,我们进行zmq开发由很多的选择,比较常用的有clrzmq4和NetMQ. 其中clrzmq是基于libzmq的Int ...

  4. .NetCore 资料分享

    .NetCore3.0 你还不打算入手么? 这次主要是推荐一些自己学习中遇到的一些好的资料和自己的看法( 我推荐的都是我看过的 Asp.Net Core 不做介绍了,直接分享资料了 资料: .NetC ...

  5. 使用Gitlab-CI 实现NetCore项目Docker化并部署到阿里云K8S

    使用Gitlab-CI 实现NetCore项目Docker化并部署到阿里云K8S 先行条件: 1.了解NetCore项目基础命令,如dotnet publish   等几个常用命令. 2.了解Dock ...

  6. 深入 .NET Core 基础 - 2:共享框架

    深入 .NET Core 基础 - 2:共享框架 原文地址:https://natemcmaster.com/blog/2018/08/29/netcore-primitives-2/ 共享框架从 . ...

  7. 壹佰文章最全总结| 《关于ASP.NETCore的分享之路》

    学习路线图 (关于学习ASP.NET Core需要了解和掌握的知识点图) 一言不合就来图,各位博客园小伙伴大家好,感觉好久没有写文章了,自从春节开始,中间经历种种,慢慢的就开始微信公众号发文了,原因有 ...

  8. .NET Core系列 : 2 、project.json 这葫芦里卖的什么药

    .NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境,本文介绍.NET Core中最重要的一个配置文件project.json的相关内容.我们可 ...

  9. Net Core环境开发与调试

    NET Core 包括.NET Core Runtime 和 .NET Core SDK: .NET Core = 应用运行依赖的 .NET Core Runtime .NET Core SDK = ...

随机推荐

  1. Unity整合TortoiseSVN

    解决各种漏传 资源 / 代码 的疑难杂症. 因为Unity比较特殊的meta文件系统, 忘传漏传文件在后期可能导致重大引用丢失, 将SVN整合进项目势在必行. TortoiseSVN自带了命令行工具, ...

  2. SSI注入--嵌入HTML页面中的指令,类似jsp、asp对现有HTML页面增加动态生成内容,见后面例子

    SSI注入漏洞总结 from:https://www.mi1k7ea.com/2019/09/28/SSI%E6%B3%A8%E5%85%A5%E6%BC%8F%E6%B4%9E%E6%80%BB%E ...

  3. 201871010125 王玉江 《面向对象程序设计(Java)》第八周实验总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  4. 03-cmake语法-变量,字符串

    CMake的基本数据类型是字符串(不区分大小写),一组字符串在一起称为列表(list). 条件判断中的取值情况如下表: 真 1, ON, YES, TRUE, Y, 非0的数  假 0, OFF, N ...

  5. 浅谈SOA与RPC

    一.SOA 英文名称:Service Oriented Ambiguity 中文名称:面向服务架构 SOA是一种思想,目的是提供一种设计项目的思路,让开发时更有效率. 例如原来的分布式项目中,在每个项 ...

  6. Python-numpy包中多维数组转置,transpose.swapaxes的轴编号(axis)的理解

    transpose()中三个轴编号的位置变化理解 transpose(a,b,c)其中a轴编号即为参考编号,垂直于a的平面即为所有平面,该平面上的数据再根据b,c相对于(0,1,2)的位置关系进行改变 ...

  7. java为什么学JavaScript?

    就现在的趋势来说,Spring无疑是一家独大的,它有太多利益 现在在Java EE开发中,Spring已经成为和Java核心库一样的基础设备,所以说假如想成为一个合格的Java程序员,Spring必定 ...

  8. 原生js拖拽、jQuery拖拽、vue自定义指令拖拽

    原生js拖拽: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  9. redis对象存储(适用于订单系统自动更新)

    启动:redis-server.exe redis.windows.conf连接:redis-cli.exe -h 127.0.0.1 -p 6379 #插入取消的订单列表与时间: redis 127 ...

  10. POI 操作 excel表格 (简单整理)

    简单的整理: import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import ...