C#编程之用.net core 写后端—— c++外的另一种选择?
小标 2019-03-19 来源 : 阅读 1963 评论 0

摘要:本文主要向大家介绍了C#编程之用.net core 写后端—— c++外的另一种选择?通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

本文主要向大家介绍了C#编程之用.net core 写后端—— c++外的另一种选择?通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

C#编程之用.net core 写后端—— c++外的另一种选择?

一、.net core简介

(1).net是什么

.net实际是遵守同一个标准(ECMA)的多种不同实现,如.net Framework、Mono、和较新的.net core。C#是.net支持的其中一种语言,理论上任何遵循公共语言规范(CLS)的语言都可以运行在.net框架上。

(2)什么是.net core

.net core 是一个通用开发平台,由 Microsoft 和Github共同维护。 它是跨平台的,支持 Windows、macOS 和 Linux,并且可用于设备、云和嵌入式/IoT 方案。

(3)特点:自动内存管理、类型安全、委托和 lambda、泛型、异步编程、LINQ、使用其他非托管代码如C/C++。

(4).net core组成部分

ü   .net Runtime:即coreCLR。与.net Framework的CLR没有太大区别,进程管理,GC,JIT(RyuJIT 编译器)也都是一样的。只是针对服务器系统做了相应优化。CLR和coreCLR进行同步更新,未来coreCLR将一统天下;

ü   Framework Libraries:即coreFX。包括集合类,文件系统处理类,XML处理类,异步Task类等;

ü   SDK工具和编译器:即CLI工具和Roslyn编译器。可以通过.net core SDK获取;

ü   .net app host:用来选取并执行对应运行时,提供组件载入原则,以及启动.netcore应用程序。SDK也是通过相同程序启动。

(5)目前支持运行环境

目前不支持 ARM64 和 ARM32。

二、.net core与.net Framework, mono区别

(1).netFramework 的主要差异在于:

ü  应用模型:.netcore不支持所有.net Framework 应用模型,说白了,就是一切与windows UI相关的如WPF,sliverlight都不支持;

ü  API:.net core和.net Framework很多API相同,但也有少部分需要修改才能移植到.net core;

ü  子系统:.netcore实现.net Framework中子系统的子级,目的是实现更简单的实现和编程模型;

ü  平台:.netFramework只支持 Windows,而net core跨平台,支持macOS和Linux;

ü  开源:.netcore属于开放源,而.net Framework 的只读子集属于开放源。

(2)与 Mono 的主要差异在于

ü  应用模型:Mono 通过 Xamarin 产品支持 .net Framework 应用模型(例如,Windows Forms)和其他应用模型(例如,Xamarin.iOS)的子集。而 .net core 不支持这些内容;

ü  API:Mono 使用相同程序集名称和组成要素支持 .net Framework API 的大型子集;

ü  平台:Mono 支持很多平台和 CPU;

ü  开源:Mono 和 .net core都使用 MIT 许可证,金主都是.net Foundation;

ü  焦点:Mono 的战场是移动平台,而.net core剑指云平台。


三、没有免费的午餐,微软大有深意

(1)收敛自己的力量

自从微软收购Xamarin之后,面临着同时维护3套基础库和平台兼容,一个事情要做3遍还是挺痛苦的,特别是在微软这样的大公司里。对开发者来说,不一致的API导致需要不同类库实现,代码无法得到复用。

因此,充分运用 .net 平台十几年积累的设计理念,汲取过去数十年各种编程语言和开发模型中的精华,重新构建一个更高性能、与特定操作系统解耦、完全模块化、可独立自包含的开发平台。同时可以结合微软在不同操作系统上完善的编译、测试、团队合作开发工具,是未来的重要产品。

如上面那张随处可见的所示,中间紫色的.net标准库部分,原来是3种.net平台都有各自的实现,将来会被.net core统一。

但就目前来说,.net core的类库还不完善,许多.net framework第三方开发者开始给.net core移植,对很多有心人来说,利用得好是一个商机。

对web开发者而言,可以跑在linux上的高性能asp.net core + Kestrel很有吸引力。性能对比可以参见这里。

(2)发力云业务

为什么说.net core更适合容器,甚至成为微软发展的一大目标

微软在移动领域和设备领域的接连失利,使前CEO和史蒂夫·鲍尔默和其继任者萨蒂亚·纳德拉押宝于云业务。事实上,连续几个季度的财报显示,Azure收入大幅增长(2016Q4102%,2017Q1116%),给整体业务不断下滑的微软注入了新的动力。

然而,.net framework深度绑定在windows平台上,天然很难与以linux为基础的容器兼容。

以Docker为代表的容器技术,可以批量地在生产环境中部署,为任何应用创建一个轻量级的、可移植的、自给自足的运行环境。具体可参考coolshell.cn的系列文章。

为了聚集更多的开发者,构建一个更加完整的生态圈,开发跨平台.net core的应用运行平台,就成为了其发展中不可获取的一环。


四、相比C++,C#正在快速地发展

(1)从语言规范出发

语言规范是一门编程语言语法和用法的权威来源,是学术界、业界多方斡旋的结晶,不断推动着语言的发展。

C++脱胎于C,在各种纷争中在1998年出了第一个正式标准,直到2015年,18年时间才经历了4个标准版本。

(图片来自zh.wikipedia.org)

在标准之下,Turbo C++,BorlandC++, Microsoft C++, Watcom C++, Symantec C++,intel C++以及linux下的霸主g++,clang百家争鸣,还爆发过所谓的语言“圣战”,可谓一路坎坷。

而C#由微软主导推动,发展相对比较顺利,ECMA标准到2006年共经历了4版,近年的更新主要以微软版本为主。

(图片来自zh.wikipedia.org)

虽然,标准版本频繁,不一定代表语言发展就越迅速,但反观C++,多少团队还在头疼升级/更换编译器,从发展时间和标准制定的频次, C#和.net却表现得更加顺利和稳健。

(2)拥抱开源

但是微软也不是一家独大,mono一度是其最大的竞争对手(其主要贡献团队xamarin现在已经被微软收购),依赖于开源社区,Mono几乎是与微软齐头并进,并在跨移动平台取得了绝对的优势(Unity+Xamarin)。

自从2014年宣布开源.net core(包含C#在内)之后,微软2016年9月才正式发布1.0版本,节奏比较慢。

但不可否认的是,开源策略促进了.net core的迅速发展,越来越多的人贡献了代码,如下是corefx基础库的github截图(截至2016.12.5)

据官方消息,约40%的性能增长来自于开源社区。总体来看,.net core的发展还是非常迅猛的。


五、不得不说的性能

   下面是//benchmarksgame.alioth.debian.org/提供的公开的测评结果,具体程序功能、代码、指标可在网站上查阅。

(1)以两个典型计算任务“spectral-norm”,“计算π”为例,C++, .net core, mono和C++性能对比:

.net core VS c++

.net core VS mono

(2)多个语言的比较

13个标准测试程序,取每种程序最快的作为基数1,评估不同语言的时间和CPU使用情况:

从前面几个图可以看到,c(gcc)语言在执行时间和实际CPU负载上远远优于其他语言,c++(g++)紧随其后,Ada/Fortran/Rust/JAVA的表现尚可,.net core与Go一样属于第一、二梯队之间,.net core略逊,但差距不是很大。

对于.net core来说,其与C++的性能差距在1.5-2倍之间。上下四分位数差(盒子高度)较小,表明其对大部分计算任务来说比较稳定。相比之下,mono性能差了许多,对不同计算任务差异较大,但比垫底的node.js略胜一些。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C#.NET频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程