日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

用.net core 写后端—— c++外的另一种选择?

發(fā)布時(shí)間:2023/12/4 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用.net core 写后端—— c++外的另一种选择? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、.net core簡(jiǎn)介

1.net是什么

? ??.net實(shí)際是遵守同一個(gè)標(biāo)準(zhǔn)(ECMA)的多種不同實(shí)現(xiàn),如.net Framework、Mono、和較新的.netcore。C#.net支持的其中一種語(yǔ)言,理論上任何遵循公共語(yǔ)言規(guī)范(CLS)的語(yǔ)言都可以運(yùn)行在.net框架上。

2)什么是.net core

? ? .netcore?是一個(gè)通用開(kāi)發(fā)平臺(tái),由?Microsoft?Github共同維護(hù)。 它是跨平臺(tái)的,支持Windows、macOS??Linux,并且可用于設(shè)備、云和嵌入式/IoT?方案。

3)特點(diǎn):自動(dòng)內(nèi)存管理、類型安全、委托和?lambda、泛型、異步編程、LINQ、使用其他非托管代碼如C/C++。

4.net core組成部分

  • .net Runtime:coreCLR。與.net FrameworkCLR沒(méi)有太大區(qū)別,進(jìn)程管理,GCJITRyuJIT?編譯器)也都是一樣的。只是針對(duì)服務(wù)器系統(tǒng)做了相應(yīng)優(yōu)化。CLRcoreCLR進(jìn)行同步更新,未來(lái)coreCLR將一統(tǒng)天下;

  • Framework Libraries:即coreFX。包括集合類,文件系統(tǒng)處理類,XML處理類,異步Task類等;

  • SDK工具和編譯器:即CLI工具和Roslyn編譯器??梢酝ㄟ^(guò).net core SDK獲取;

  • .net app host:用來(lái)選取并執(zhí)行對(duì)應(yīng)運(yùn)行時(shí),提供組件載入原則,以及啟動(dòng).net core應(yīng)用程序。SDK也是通過(guò)相同程序啟動(dòng)。

?

5)目前支持運(yùn)行環(huán)境

操作系統(tǒng)

版本

架構(gòu)

Windows Client

7 SP1 - 10

x64, x86

Windows Server

2008 R2 SP1 - 2016

x64, x86

Red Hat Enterprise Linux

7.2

x64

Fedora

23

x64

Debian

8.2

x64

Ubuntu

14.04 LTS, 16.04 LTS

x64

Linux Mint

17

x64

openSUSE

13.2

x64

Centos

7.1

x64

Oracle Linux

7.1

x64

Mac OS X

10.11, 10.12

x64

? ??目前不支持?ARM64??ARM32

https://github.com/dotnet/core/blob/master/roadmap.md

二、.net core.net Framework, mono區(qū)別

1.net Framework?的主要差異在于:

  • 應(yīng)用模型:.netcore不支持所有.net Framework?應(yīng)用模型,說(shuō)白了,就是一切與windows UI相關(guān)的如WPFsliverlight都不支持;

  • API.netcore.net Framework很多API相同,但也有少部分需要修改才能移植到.netcore

  • 子系統(tǒng):.netcore實(shí)現(xiàn).net Framework中子系統(tǒng)的子級(jí),目的是實(shí)現(xiàn)更簡(jiǎn)單的實(shí)現(xiàn)和編程模型;

  • 平臺(tái):.net Framework只支持?Windows,而netcore跨平臺(tái),支持macOSLinux

  • 開(kāi)源:.netcore屬于開(kāi)放源,而.net Framework?的只讀子集屬于開(kāi)放源。

2)與?Mono?的主要差異在于

  • 應(yīng)用模型:Mono?通過(guò)?Xamarin?產(chǎn)品支持?.net Framework?應(yīng)用模型(例如,Windows Forms)和其他應(yīng)用模型(例如,Xamarin.iOS)的子集。 而?.netcore不支持這些內(nèi)容;

  • APIMono?使用相同程序集名稱和組成要素支持?.net Framework API?的大型子集;

  • 平臺(tái):Mono?支持很多平臺(tái)和?CPU

  • 開(kāi)源:Mono??.netcore都使用?MIT?許可證,金主都是.net Foundation

  • 焦點(diǎn):Mono?的戰(zhàn)場(chǎng)是移動(dòng)平臺(tái),而.netcore劍指云平臺(tái)。

? ? ? ? ? ? ?(整理自https://docs.microsoft.com/zh-cn/dotnet/articles/core/)?

三、沒(méi)有免費(fèi)的午餐,微軟大有深意

1)收斂自己的力量

? ??自從微軟收購(gòu)Xamarin之后,面臨著同時(shí)維護(hù)3套基礎(chǔ)庫(kù)和平臺(tái)兼容,一個(gè)事情要做3遍還是挺痛苦的,特別是在微軟這樣的大公司里。對(duì)開(kāi)發(fā)者來(lái)說(shuō),不一致的API導(dǎo)致需要不同類庫(kù)實(shí)現(xiàn),代碼無(wú)法得到復(fù)用。

? ??因此,充分運(yùn)用?.net?平臺(tái)十幾年積累的設(shè)計(jì)理念,汲取過(guò)去數(shù)十年各種編程語(yǔ)言和開(kāi)發(fā)模型中的精華,重新構(gòu)建一個(gè)更高性能、與特定操作系統(tǒng)解耦、完全模塊化、可獨(dú)立自包含的開(kāi)發(fā)平臺(tái)。同時(shí)可以結(jié)合微軟在不同操作系統(tǒng)上完善的編譯、測(cè)試、團(tuán)隊(duì)合作開(kāi)發(fā)工具,是未來(lái)的重要產(chǎn)品。

? ??如上面那張隨處可見(jiàn)的所示,中間紫色的.net標(biāo)準(zhǔn)庫(kù)部分,原來(lái)是3.net平臺(tái)都有各自的實(shí)現(xiàn),將來(lái)會(huì)被.net core統(tǒng)一。?

? ??但目前來(lái)說(shuō),.net core的類庫(kù)還不完善,許多.net framework第三方開(kāi)發(fā)者開(kāi)始給.net core移植,對(duì)很多有心人來(lái)說(shuō),利用得好是一個(gè)商機(jī)。

? ??對(duì)web開(kāi)發(fā)者而言,可以跑在linux上的高性能asp.net core + Kestrel很有吸引力。性能對(duì)比可以參見(jiàn)這里

2)發(fā)力云業(yè)務(wù)

? ??微軟在移動(dòng)領(lǐng)域和設(shè)備領(lǐng)域的接連失利,使前CEO和史蒂夫·鮑爾默和其繼任者薩蒂亞·納德拉押寶于云業(yè)務(wù)。事實(shí)上,連續(xù)幾個(gè)季度的財(cái)報(bào)顯示,Azure收入大幅增長(zhǎng)(2016Q4102%2017Q1?116%),給整體業(yè)務(wù)不斷下滑的微軟注入了新的動(dòng)力。

? ??然而,.net framework深度綁定在windows平臺(tái)上,天然很難與以linux為基礎(chǔ)的容器兼容。

? ??以Docker為代表的容器技術(shù),可以批量地在生產(chǎn)環(huán)境中部署,為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的、可移植的、自給自足的運(yùn)行環(huán)境。具體可參考coolshell.cn的系列文章。

? ??為了聚集更多的開(kāi)發(fā)者,構(gòu)建一個(gè)更加完整的生態(tài)圈,開(kāi)發(fā)跨平臺(tái).netcore的應(yīng)用運(yùn)行平臺(tái),就成為了其發(fā)展中不可獲取的一環(huán)。?

四、相比C++C#正在快速地發(fā)展

1)從語(yǔ)言規(guī)范出發(fā)

? ??語(yǔ)言規(guī)范是一門編程語(yǔ)言語(yǔ)法和用法的權(quán)威來(lái)源,是學(xué)術(shù)界、業(yè)界多方斡旋的結(jié)晶,不斷推動(dòng)著語(yǔ)言的發(fā)展。

? ??C++脫胎于C,在各種紛爭(zhēng)中在1998年出了第一個(gè)正式標(biāo)準(zhǔn),直到2015年,18年時(shí)間才經(jīng)歷了4個(gè)標(biāo)準(zhǔn)版本。

(圖片來(lái)自zh.wikipedia.org)

? ??在標(biāo)準(zhǔn)之下,Turbo C++,Borland C++, Microsoft C++, Watcom C++?Symantec C++intel C++以及linux下的霸主g++,clang百家爭(zhēng)鳴,還爆發(fā)過(guò)所謂的語(yǔ)言圣戰(zhàn),可謂一路坎坷。

? ??而C#由微軟主導(dǎo)推動(dòng),發(fā)展相對(duì)比較順利,ECMA標(biāo)準(zhǔn)2006年共經(jīng)歷了4版,近年的更新主要以微軟版本為主。


(圖片來(lái)自zh.wikipedia.org)

? ??雖然,標(biāo)準(zhǔn)版本頻繁,不一定代表語(yǔ)言發(fā)展就越迅速,但反觀C++,多少團(tuán)隊(duì)還在頭疼升級(jí)/更換編譯器,從發(fā)展時(shí)間和標(biāo)準(zhǔn)制定的頻次,?C#.net卻表現(xiàn)得更加順利和穩(wěn)健。?

2)擁抱開(kāi)源

? ??但是微軟也不是一家獨(dú)大,mono一度是其最大的競(jìng)爭(zhēng)對(duì)手(其主要貢獻(xiàn)團(tuán)隊(duì)xamarin現(xiàn)在已經(jīng)被微軟收購(gòu)),依賴于開(kāi)源社區(qū),Mono幾乎是與微軟齊頭并進(jìn),并在跨移動(dòng)平臺(tái)取得了絕對(duì)的優(yōu)勢(shì)(Unity+Xamarin)。


? ??自從2014年宣布開(kāi)源.net core(包含C#在內(nèi))之后,微軟20169月才正式發(fā)布1.0版本,節(jié)奏比較慢。

? ??但不可否認(rèn)的是,開(kāi)源策略促進(jìn)了.net core的迅速發(fā)展,越來(lái)越多的人貢獻(xiàn)了代碼,如下是corefx基礎(chǔ)庫(kù)的github截圖(截至2016.12.5


?? ??據(jù)官方消息,約40%的性能增長(zhǎng)來(lái)自于開(kāi)源社區(qū)。總體來(lái)看,.net core的發(fā)展還是非常迅猛的。?

五、不得不說(shuō)的性能

? ??下面是http://benchmarksgame.alioth.debian.org/提供的公開(kāi)的測(cè)評(píng)結(jié)果,具體程序功能、代碼、指標(biāo)可在網(wǎng)站上查閱。

1)以兩個(gè)典型計(jì)算任務(wù)“spectral-norm”,“計(jì)算π”為例,C++, .net core, monoC++性能對(duì)比:

.net core VS c++


.net core VS mono


?

?2)多個(gè)語(yǔ)言的比較

? ??13個(gè)標(biāo)準(zhǔn)測(cè)試程序,取每種程序最快的作為基數(shù)1,評(píng)估不同語(yǔ)言的時(shí)間和CPU使用情況:


?

? ??從前面幾個(gè)圖可以看到,c(gcc)語(yǔ)言在執(zhí)行時(shí)間和實(shí)際CPU負(fù)載上遠(yuǎn)遠(yuǎn)優(yōu)于其他語(yǔ)言,c++(g++)緊隨其后,Ada/Fortran/Rust/JAVA的表現(xiàn)尚可,.net coreGo一樣屬于第一、二梯隊(duì)之間,.net core略遜,但差距不是很大。

? ??對(duì)于.net core來(lái)說(shuō),其與C++的性能差距在1.5-2之間。上下四分位數(shù)差(盒子高度)較小,表明其對(duì)大部分計(jì)算任務(wù)來(lái)說(shuō)比較穩(wěn)定。相比之下,mono性能差了許多,對(duì)不同計(jì)算任務(wù)差異較大,但比墊底的node.js略勝一些。?

六、開(kāi)發(fā)效率,算一筆賬

1)使用.net core,效率提高可能體現(xiàn)在

  • 許多常用基礎(chǔ)庫(kù),如協(xié)程、線程、內(nèi)存池、鎖等不需要單獨(dú)維護(hù)

  • 受前端和后端語(yǔ)言一致,重用性高,對(duì)游戲來(lái)說(shuō),非常有利于反外掛

  • 調(diào)試成本降低,大部分游戲團(tuán)隊(duì)都是windows開(kāi)發(fā),linux編譯和調(diào)試

  • 前后臺(tái)溝通成本降低,全棧工程師不用在來(lái)回切換語(yǔ)言中煩惱

  • 降低新人學(xué)習(xí)成本

?

2)人力成本VS機(jī)器成本?

? ??以公開(kāi)的資料為例,網(wǎng)易的“絕代雙驕”手游前端采用Unity,后端采用.net core進(jìn)行開(kāi)發(fā),據(jù)說(shuō)能降低30%的人員成本,提高20%的開(kāi)發(fā)速度。如下:?

? ??數(shù)據(jù)說(shuō)話,可以簡(jiǎn)單算這樣的一筆賬:假設(shè)現(xiàn)有兩個(gè)團(tuán)隊(duì),后端分別使用C++C# .net core,??費(fèi)用估計(jì)如下

  • 生產(chǎn)環(huán)境參考AWSM4.2xlarge?2.3 GHz Intel Xeon? E5-2686 v4?8G+32G,帶寬費(fèi)用不計(jì))

  • 一個(gè)月的成本大概是2320RMB,假設(shè)自建機(jī)房能節(jié)約50%的費(fèi)用,則為1160RMB/月,

  • 假設(shè)使用C#,服務(wù)器數(shù)量增加50%(根據(jù)上文性能估計(jì))

  • 人力成本按人25W年薪(網(wǎng)易應(yīng)屆生平均成本)計(jì)算

?

團(tuán)隊(duì)

投入人員

服務(wù)器數(shù)量

人力成本

服務(wù)器成本

總成本

C++團(tuán)隊(duì)

20

100

250000/12*20=416667

116000

532667

C#團(tuán)隊(duì)

14

150

250000/12*14=291666

174000

309066

可以看出,每月成本C++遠(yuǎn)高于C#,約是其1.7

?

? ??考慮到手游開(kāi)發(fā)的實(shí)際情況,我們假設(shè)研發(fā)周期為6個(gè)月,版本運(yùn)營(yíng)周期2年,運(yùn)營(yíng)期投入1/3人力,c++團(tuán)隊(duì)成本約為861W?C#團(tuán)隊(duì)成本為825W。成本上C#依然是比較劃算。

團(tuán)隊(duì)

研發(fā)人力成本

運(yùn)營(yíng)人力成本

服務(wù)器成本

總成本

C++團(tuán)隊(duì)

2500000

3333333.333

2784000

8617333

C#團(tuán)隊(duì)

1750000

2333333.333

4176000

8259333

?

? ??同時(shí),我們計(jì)算中還沒(méi)有c#帶來(lái)的20%開(kāi)發(fā)效率的提升,以及摩爾定律帶來(lái)的機(jī)器成本的降低,也沒(méi)有考慮人員增加帶來(lái)的溝通成本,以及雇用更高水平團(tuán)隊(duì)的薪資水平。

? ??總體來(lái)說(shuō),c#還是比較“省錢”的。

?

七、回歸到現(xiàn)實(shí):.net core能給開(kāi)發(fā)帶來(lái)什么實(shí)際意義?

?1)反外掛是一個(gè)非常合適的場(chǎng)景,特別是前端模擬-后端校驗(yàn)的游戲項(xiàng)目,不用在語(yǔ)言移植、模型校驗(yàn)、緩慢的mono虛擬機(jī)之間糾結(jié)了;

2)豐富的通用組件和標(biāo)準(zhǔn)庫(kù)可以減少大量造車輪的時(shí)間,前提是要杜絕性能“潔癖”;

3)不用糾結(jié)判空指針、使用class還是struct、各種內(nèi)存分配和回收問(wèn)題、多字節(jié)字符串編碼;

4)在處理IO和多線程方面更有信心一些,擁抱多核和異構(gòu)計(jì)算;

5)大前端的趨勢(shì)下,未來(lái)是微服務(wù)、輕應(yīng)用、H5游戲的世界。必定更青睞包袱更輕的、移植性強(qiáng)、跨平臺(tái)的開(kāi)發(fā)思想和工具。在高性能、高吞吐量、低延遲方面,.net core開(kāi)始嶄露頭角,如下圖所示,asp.net core的性能已經(jīng)遠(yuǎn)遠(yuǎn)甩開(kāi)node.jsasp.net 4


?圖片來(lái)源:https://www.ageofascent.com/2016/02/18/asp-net-core-exeeds-1-15-million-requests-12-6-gbps/?

八、結(jié)語(yǔ)

? ??總的來(lái)說(shuō),不管是.net也好,C#也罷,并不是一個(gè)新鮮的事物。.net core嚴(yán)格來(lái)說(shuō)也算不上具備偉大創(chuàng)新性或者突破力的“面壁者”。

? ? 對(duì)于許多C++er來(lái)說(shuō),能帶來(lái)有關(guān)語(yǔ)言發(fā)展、工具鏈、模式、云計(jì)算等方面的思考,或者說(shuō),提供了關(guān)于未來(lái)的其中一種可能,這已值得關(guān)注了。

原文地址:https://km.tencent.com/openkm/url/q4blcn


.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注

贊賞

人贊賞

總結(jié)

以上是生活随笔為你收集整理的用.net core 写后端—— c++外的另一种选择?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。