惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
aimingoo的专栏
aimingoo的专栏
博客园 - 叶小钗
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
The Cloudflare Blog
S
SegmentFault 最新的问题
小众软件
小众软件
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
The GitHub Blog
The GitHub Blog
量子位
H
Hackread – Cybersecurity News, Data Breaches, AI and More
V
V2EX
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
J
Java Code Geeks
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
F
Fortinet All Blogs
Blog — PlanetScale
Blog — PlanetScale
Last Week in AI
Last Week in AI

博客园 - 温森特

企业应用架构研究系列十三:整合EFCore&Dapper 通用ORM框架EFDapper 企业应用架构研究系列二十四:SQL Server 数据库调优之XEvent 探查器 企业应用架构研究系列二十五:IdentityServer4 认证服务搭建 企业应用架构研究系列十二:网络模型与网络协议 企业应用架构研究系列二十三:微服务之程序网关YARP 企业应用架构研究系列二十八:身份认证 Beginning Out With IdentityServer4 企业应用架构研究系列二十七:Vue3.0 之环境的搭建与Vue Antd Admin探索 企业应用架构研究系列五:极限编程(XP)& 敏捷管理(Scrum) 企业应用架构研究系列二十:创建&发布Docker 企业应用架构研究系列十九:Docker开发环境 前端NEXT实践系列:(一)ECMAScript 6.0技术栈 企业应用架构研究系列三:应用系统集成 企业应用架构研究系列二:MSF&Scrum 项目管理 企业应用架构研究系列一:业务拆分 .NET Standard 跨平台支持的实践 Azure技术系列之Redis篇---第一章数据缓存 MERGE MOSS 2013研究系列---修改默认Logo MOSS 2013研究系列---隐藏Ribbon
企业应用架构研究系列二十六:信号量SemaphoreSlim与Semaphore
温森特 · 2022-05-25 · via 博客园 - 温森特

2022-05-25 11:12  温森特  阅读(422)  评论()    收藏  举报

   在进行多线程程序的开发和设计的过程中,不可避免的需要引入semaphore信号量这个组件,这是.net框架提供的一个对多线程计数互斥的方案,就是允许指定的线程个数访问特定的资源而增加的 一个“红绿灯”,只有获取了semaphore的信号后,才能进入特定的资源。那么从netcore 后,又引入了semaphoreslim这个工具类,它与semaphore 有什么区别呢?网上搜搜后,发现它们两个区别大概是一个是通过windows 内核kernal提供的,一个是.net运行时提供的。网上信息不是都是准确的,最好还是去官网确认一下。

  

  经过官网确认的确是semaphoreSlim 是一个轻量级的信号量,不依赖于windows kernel semaphore。经过分析,明白,netcore 是一个跨平台的开发框架,进行多线程开发的时候,我们也要考虑平台的依赖,否则就有可能会陷入一个技术坑。

  明白了semaphore 与semaphoreSlim的区别,再做一个小Demo进行测试练习一下。官方文档有一个测试代码,稍加改造运行了一下测试了一下,打印出了运行结果。

  

  运行结果分析,创建了一个允许0~3个线程的信号量的SemaphoreSlim 实例,同时运行了5个Task,即5个线程,只有semaphore.Wait()进行了阻塞,最大允许3个线程进入,其它线程一直处于等待,当进入的线程semaphore.Release()后,一下进程才可以进入,保障当前程序访问该资源的个数。应用的场景也是非常多的,我记得之前做过了一个流程引擎,就是设置了一个信号量,保障资源的稳定输出,如果不加限制的对资源的过度调用,往往会造成了服务系统的宕机或资源耗尽。

  本文章参考官方文档:https://docs.microsoft.com/en-us/dotnet/api/system.threading.semaphoreslim?view=net-6.0

您的支持,我的动力!