目录

文章系列

介绍

更多同步原语

.NET核心加速

.NET Core加速:JIT编译

.NET Core加速:C# lock——监控类改进

跨平台基准

概括


文章系列

  • 统一并发 I - 简介
  • 统一并发 II - 基准测试方法
  • 统一并发 III - 跨基准测试
  • 统一并发 IV - 跨平台(.NET Core 2.1 / .NET Standard 2.0)

介绍

今天,我要宣布统一并发要跨平台了!

统一并发现在符合.Net Standard 2.0,确保在.NET 4.7+和.NET Core 2.0+、Mono 5.4+中访问。

.NET世界中最近的跨平台开发似乎势不可挡,从.Net Standard 2.0开始,该平台的采用率似乎在开源和商业领域的各个领域都得到了加速。这是统一并发成为跨平台的巨大动力。只要有可能,我仍然打算保持.Net 4.6版本的活力,但主要的开发已经转移到.Net Standard项目。

.Net Standard 2.0下的推送库 GreenSuperGreen(包含统一并发)还需要完整的基准测试和跨基准测试库进行相同的更新,为在.NET/.NetCore和Mono上运行基准测试、跨基准测试和跨平台基准测试提供机会。做Linux基准测试也会很有趣,但目前的基准测试依赖于PerformanceCounters平台(Windows),这个问题的解决方案似乎是.Net Standard未来版本的一个悬而未决的问题。

开始使用的所有已实现同步原语的示例都包含在此处作为.NetCore 2.1下的单元测试项目:

  • 下载统一并发 - 31.9 KB

统一并发框架在开源实现GreenSuperGreen库上可用的GitHub和的NuGet。

.NET 4.6

  • http://www.nuget.org/packages/GreenSuperGreen/
  • http://www.nuget.org/packages/GreenSuperGreen.Test/

NetStandard 2.0

  • http://www.nuget.org/packages/GreenSuperGreen.NetStandard/
  • http://www.nuget.org/packages/GreenSuperGreen.NetStandard.Test/
  • http://www.nuget.org/packages/GreenSuperGreen.Benchmarking.NetStandard/

NetCore 2.1

  • http://www.nuget.org/packages/GreenSuperGreen.Benchmarking.Launcher.NetCore/

Net 4.7.2

  • http://www.nuget.org/packages/GreenSuperGreen.Benchmarking.Launcher.Net/

更多同步原语

现在可以使用另外3个同步原语,另外1个仅用于内部(基准测试目的)。

AsyncSemaphoreSlimLockUC : IAsyncLockUC

SemaphoreSlim基于WaitAsync/Release的锁,似乎在FIFO风格、公平访问中表现良好。

性能方面类似于AsyncLockUC.

SemaphoreSlimLockUC : ILockUC

基于SemaphoreSlim Wait/Release的锁结合了一种混合方法和原子指令,这种方法在FIFO风格中表现不佳,不公平的访问会导致线程停顿

SemaphoreLockUC : ILockUC

基于信号量WaitOne/Release的锁,依赖操作系统,windows上大致FIFO,不保证公平性

MutexLockUC : ILockUC——内部,特定用途,仅基准测试

此同步原语不可访问,仅适用于预定义的基准测试项目,因为它在进入和退出调用时需要线程关联,统一并发的设计不支持这一点,但对于基准测试而言,它是可维护的,并且对于收集数据很有趣。

.NET核心加速

根据来自Microsoft、外部资源和技术社区的报告,.NET Core可以加速现有代码库已成为常识。

通过跨平台基准测试,我可以报告两个方面的改进。

.NET Core加速:JIT编译

在基准测试场景中,吞吐量周期的顺序基线是测量相同硬件上潜在加速的有用工具,并且给定代码在.Net Core 2.1上比在.Net 4.7.2上快1.997倍。这并不意味着每个代码都会快这几倍,只是某些代码可以更有效地JIT从而运行得更快,但潜在的加速总是依赖于代码,在某些情况下,进一步优化是不可能的。对于某些特定情况,Stephen Toub报告了类似的加速。

图表 1:顺序吞吐量加速 .NET / .NET Core(加速取决于代码)

.NET Core加速:C# lock——监控类改进

跨平台基准测试的结果表明,在重负载场景和坏邻居场景下,C# lock(Monitor 类)也有了相当大的改进。

.NET实现很容易出现CPU僵局,C# lock(Monitor 类)在这一时刻浪费了大部分CPU资源而几乎没有完成任何工作,有效的同步成本占用了大部分CPU资源。这在之前的文章中已有报道。

.NET Core 2.1似乎有更好的C# lock实现方式(.NET Core 2.1运行时的C++中的Monitor 类/AwareLock类)。

2.Net .Net Core 上的 C# lockMonitor 类)和 .Net Core 上的 LockUC CPU 资源浪费。

根据图表2,很容易得出.NET Core 2.1在性能方面的优势。C# lock通常散布在大多数项目的代码中,并且是许多公共库的一部分,包括运行时本身,在这里,我们看到在某些时序情况下CPU资源得到了显着改善,CPU浪费减少了80%以上!请比较 C# lock Monitor类的蓝色和绿色趋势线。

JIT改进很重要,但充满C# lock的多线程代码在从简单到业务线代码库的许多项目中仍然普遍存在。

即使是简单的项目,性能提升也可能是可观的,并且通过访问WinForms和WPF升级到.NetCore 3.0的动机可能非常有趣。

这是.NetCore 2.1的一个重要改进,但仍有改进的空间,例如,我们可以考虑LockUC,请比较绿色和红色趋势线,这表明仍有10%左右的收益,但它通常部分被低于1ms吞吐量周期的稍差的吞吐量所购买,其中基于原子指令的同步原语可以帮助获得吞吐量,同时管理合理的CPU浪费,但这需要现代架构设计与多核时代的处理器计数。

跨平台基准

3C# lock(Monitor) / LockUC 在重负载场景下的跨基准测试,.NET 4.7.216 核。

4C# lock(Monitor) / LockUC 在重负载场景下的跨基准测试,.Net Core 2.116 核。

概括

本文是该GreenSuperGreen库的.NET Standard 2.0版本(带有内置统一并发)的公告,其中包括对该库的一些改进。

我们已经讨论并通过跨平台基准测试展示了从.NET升级到.NET Core 2.1+的巨大潜力和动力,这要归功于JIT编译改进以及多线程代码的改进,这要归功于C# lock(Monitor 类)的改进减少CPU浪费。

https://www.codeproject.com/Articles/1271910/Unified-Concurrency-IV-going-cross-platform

统一并发 IV——走向跨平台相关推荐

  1. 统一并发 III——跨基准测试

    目录 文章系列 介绍 基准测试:Monitor (C# Lock)--重度争用 基准测试:Monitor (C# Lock)--坏邻居 基准:LockUC--重度竞争 基准:LockUC-坏邻居 基准 ...

  2. 统一并发 II——基准测试方法

    目录 文章系列 介绍 测量参数 中位数吞吐量期 顺序和并发测量 工作单元 频谱数据 数据对比 图表构建和理解 理想同步原语基准 隐藏行为:边缘情况 测试场景 目标硬件和软件 基准测试:Monitor ...

  3. 统一并发 I——简介

    目录 文章系列 介绍 接口和基于模式 合理限制 访问公平 访问公平性:内核大致FIFO 访问公平性:原子指令不公平 访问公平性:增强的原子指令不公平 实现的同步原语 MonitorLockUC Loc ...

  4. Azure中继摆脱了WCF的桎梏,走向跨平台

    Azure服务总线中继(Azure Service Bus Relay)支持把内网Web服务暴露给外网用户,不过时至今日,开发者只能通过Windows Communication Foundation ...

  5. 【解决方案】医院医疗安防视频监控系统搭建及集成统一管理方案介绍

    一.背景介绍 近年来一些不法分子把罪恶的手伸到了医院,严重危害了医院和病人的生命财产安全,他们实行扒.窃.抢.破坏等卑劣手段扰乱医院工作秩序.窃取他人钱财.破坏社会治安.为了我们的健康,为了社会的安宁 ...

  6. 第一章 常见跨平台解决方案及Flutter架构

    近些年来,不断的有前端跨平台方案涌现出来,比如基于WebView的Cordova,还有渲染成原生控件的Reactive.Weex等,那么,这些跨平台方案有什么通用的实现思路呢,而Flutter的设计思 ...

  7. 图片中的Build 2016

    微软主办的Build 2016大会刚刚落幕,让我们通过下面的图片集锦来回顾大会的一些容易被人忽视的细节. Xamarin加入微软大家庭 微软公司于二月底花大价钱买下了Xamarin这家移动开发平台提供 ...

  8. 智慧校园大数据云平台(3)

    技术详解 OTN技术 OTN是以波分复用技术为基础. 在光层组织网络的传送网, 是下一代的骨干传送网.OTN是通过G.872.G.709.G.798等一系列ITU-T的建议所规范的新一代"数 ...

  9. ​万字长文阐述前端技术浪潮与应用

    把握方向,迎接机遇,迎娶白富美,走向人生巅峰. 前端技术浪潮与应用 一.前端基建 01.前端可视化 02.前端跨端跨栈 03.微前端 04.前端稳定性/质量保障体系 05.总结 二.前端行业新资讯 ① ...

最新文章

  1. 自制精排 ePub 集、不定期更新(UPDATA-2015-8-2)
  2. 2000坐标转换成经纬度_ArcGIS中的坐标问题快问快答
  3. 神策数据荣获“2017金融科技·大数据优秀案例之最佳实践案例奖”
  4. PESCMS Ticket 客服工单系统 v1.2.4 发布
  5. 【原创】编译cupcake笔记
  6. Selenium 窗口切换
  7. Linux系统Zookeeper集群配置
  8. .net安装_如何安装GWAS分析软件R包:GAPIT
  9. 迪普科技负载均衡助力金关工程(二期)核心业务交付
  10. 快速接入百度大脑身份证识别
  11. element-ui+vue给登录界面创建一个走马灯幻灯片切换
  12. Ubuntu18.04安装ntl库
  13. a8处理器相当于骁龙几_iPhone 8P相当于什么水平的安卓机?发现两点劣势,其它无关紧要...
  14. JAVA之理解面向对象的内涵
  15. 初始对准及组合导航技术
  16. 家门口的微醺“buff”——酒分之一开启社区酒吧式便利店次元
  17. iOS StoreKit 2 新特性解析
  18. CCC3.0学习笔记_认证和隐私保护
  19. A特种设备相关管理(电梯)
  20. GD32F303课程【2】GPIO操作LED和按键

热门文章

  1. python sklearn库 rnn_如何使用Tensorflow计算RNN和LSTM模型的AUC并生成ROC曲线?
  2. python实现嵌套功能_我应该如何在Python中实现“嵌套”子命令?
  3. arduino openmv 显示图像_OpenMV与Arduino NUO的连接方式
  4. 织梦服务器怎么修改,织梦dedecms更换服务器搬家教程
  5. wimbuilder2教程_Wimbuilder WIN10XPE制作所需的工程文件
  6. 锤子t1重置后怎么显示无服务器,解决锤子手机smartisanT1关机后无法正常开机(附带刷机教程图文)...
  7. python有趣的简单代码_简单代码一学就会,Python生成GIF动图
  8. 创意合成广告欣赏:让人脑洞大开的设计
  9. 设计师必备导航类网站,内有宝藏!
  10. java mysql查询语句_Mysql查询语句执行过程