C#多线程之旅

多线程之旅(1)_线程同步之AutoResetEvent和ManualResetEvent的区别、用法——附C#源码示例

多线程之旅(2)_创建一个属于自己的精简线程池_线程调度策略——附C#源码

多线程之旅(3)_如何使用lock()来实现对象和代码块的加锁功能(详解)

多线程之旅(4)_async/await的用法精细详解

多线程之旅(5)_眼花缭乱的sleep,wait,yield,join,Abort,ContinueWith,RunSynchronously,background方法详解

多线程之旅(6)_Semaphore和SemaphoreSlim关于WaitOne、Release的用法详解——附C#源码

多线程之旅(7)_Task和Thread有参无参,有、无返回值,的28种调用方式汇总——附C#源码

多线程之旅(8)_Task的异常捕获和处理方法——附C#源码

多线程之旅(9)_如何安全的取消正在执行的线程——附C#源码

多线程之旅(10)_QueueUserWorkItem和UnsafeQueueUserWorkItem的区别

多线程之旅(11)_如何限制系统线程池ThreadPool的最大最小并发数量_SetMaxThreads/SetMinThreads用法

多线程之旅(12)_聊聊线程池在系统内部运转的基本原理

本文主要是修正或补充上述文章中的一些问题:

修订1:

补充 以下两篇文章中的知识点:

多线程之旅(11)_如何限制系统线程池ThreadPool的最大最小并发数量_SetMaxThreads/SetMinThreads用法

多线程之旅(2)_创建一个属于自己的精简线程池_线程调度策略——附C#源码

上述两篇文章分别讲了线程池和ThreadPool.SetMinThreads(*, *);的用法,改方法可以设置线程池中最小线程数量,但是没有说明具体应用场景。

我们在生产环境中使用线程池时,会发现一个问题,在默认情况下虽然我们使用了线程池,设置了线程池并发数量,但是从线程池创建线程的过程十分缓慢。

比如我们设置线程池中并发数量为20,实际情况是,可能从第5个线程开始,程序每1s创建一个新线程,直到并发数量达到20个才停下来。从逻辑上说是没有问题的,因为此时系统中并发的线程确实达到了20个。但假如我们有1000个线程,每个线程实际执行时间只有0.001秒,1000个线程总执行时间为1s,然而将这1000个线程创建出来,则需要1000s,这种场景中线程池就没有意义了。

我们希望的场景是,当程序启动时,瞬间创建出20个线程,每当这20个线程有一个执行完成时,立刻创建出一个新的线程补上,而不再有时间间隔。这种情况下1000个线程总执行时间大约就在1s左右。

基于上述这个场景,我们就可以使用ThreadPool.SetMinThreads(*, *)来达到这个目的。

相关测试比较代码见GitHub地址:https://github.com/yangwohenmai/TEST/tree/master/TaskSchedulerTest

Socket长连接、短连接使用方法——附C#源码

Socket高并发出现TIME_WAIT的原因以及解决办法

(0)

相关推荐

  • Vivado中jobs和threads的区别?选择多个jobs能加快实现速度么?

      在用Vivado对工程编译时,会弹出下面的对话框: 备注:虽然FPGA不能叫编译,但很多工程师为了方便起见,将综合+实现+生成bit文件的过程统称为编译了,这种说法大家理解就好. 很多工程师都会选 ...

  • 基于多线程任务队列执行时间测试——泛型单例模式落地

    目录 基于多线程任务队列执行时间测试--泛型单例模式落地 1.需求 2.遇到的问题 3.解决思路 4.具体代码 4.1泛型单例 4.2 开始时间实体 4.3 实例化单例 4.4 获取任务结束时间 5. ...

  • Java分布式锁的概念以及使用优点

    普通的锁,即在单机多线程环境下,当多个线程需要访问同一个变量或代码片段时,被访问的变量或代码片段叫做临界区域,我们需要控制线程一个一个的顺序执行,否则会出现并发问题. 设置一个各个线程都能看的见的标志 ...

  • 多线程之旅(Thread)

    在上篇文章中我们已经知道了多线程是什么了,那么它到底可以干嘛呢?这里特别声明一个前面的委托没看的同学可以到上上上篇博文查看,因为多线程要经常使用到委托.源码一.异步.同步1.同步(在计算的理解总是要你 ...

  • 多线程之旅(ThreadPool 线程池)

    一.什么是ThreadPool 线程池(源码) 1.线程池顾名思义,有我们的系统创建一个容器装载着我们的线程,由CLR控制的所有AppDomain共享.线程池可用于执行任务.发送工作项.处理异步 I/ ...

  • 多线程之旅(10)_QueueUserWorkItem和UnsafeQueueUserWorkItem的区别

    转载:https://blog.csdn.net/yangwohenmai1/article/details/90490880 这是个比较冷门的点,是我在写多线程之旅(2)_创建一个属于自己的精简线程 ...

  • 旅界专研 | 文旅企业类型的再划分与战略再定位(下篇)

    编者按:随着原国家旅游局和文化部合并成立新的文化和旅游部.国家自然资源部的组建,以及国家公园.国家文化公园的创建,国有旅游景区门票下降政策的普遍实施,叠加宏观经济下行.资本市场去杠杆以及新冠肺炎疫情的 ...

  • “智慧文旅”提升来滇旅客出行体验

    近日,云南腾云信息产业有限公司与云南祥鹏航空有限责任公司.飞享互联航空科技(海南)有限公司签署战略合作协议,将共同推进"航空互联网++智慧文旅"创新服务解决方案的试点与落地,提高旅 ...

  • 旅发大会召开在即——十景、三餐、两剧,您打卡了几个?

    5月7日上午,2021年全省旅游产业发展大会新闻发布会在南昌举行.根据省委.省政府工作部署,2021年全省旅游产业发展大会将于5月17日-19日在景德镇市举办. 本届旅发大会在千年古镇.世界瓷都举办, ...

  • 一起去打卡!上海市文旅局局长为这三条微游线路代言

    图说:上海"建筑可阅读"进入数字转型 采访对象供图(下同) 新民晚报讯(记者 杨玉红)"建筑可阅读"成为市民游客的休闲好去处,2019年,累计接待了1830万人 ...

  • 2128人参赛!千人走戈壁领跑中国文体旅产业复苏新节奏

    第7届千人走戈壁报名通道已经关闭,本届千人走戈壁共计9504人报名,136899人关注并提供支持,最终将有2128名徒友踏上第7届千人走戈壁的战场上,这些徒友来自全球20个国家的226座城市. 千人走 ...

  • 鹧鸪天·旅之别

    #暴风眼征文大赛# 鹧鸪天·旅之别 作者:李本柏 有意风光把客留,依依难舍几回眸.青松常在山峰立,溪水无穷石缝流. 韶倚去,莫闲愁.云烟淡泊任沉浮.纵然相约来生许,不及尘缘一日游.