首页 科技内容详情
新2会员网址(www.22223388.com):解决new Thread().Start导致高并发CPU 100%的问题

新2会员网址(www.22223388.com):解决new Thread().Start导致高并发CPU 100%的问题

分类:科技

网址:

SEO查询: 爱站网 站长工具

点击直达

 

背景

之前接手一个项目的时候,发现到处是

new Thread(()=>{
//do something
}).Start();

  



这么做的目的,无非是为了减少页面等待时间提高用户体验,把一些浪费时间的操作放到新线程中在后台运行。

问题

但是这样带来的问题是大量的创建线程,非常影响项目的性能,尤其是在一些大并发量访问的时候,经常导致后果是cpu 100%。

当然,如果你的项目到处是这样写的,然后,没挂,至少说明这个方法没几个人再用。

解决方法

于是下意识的想着给项目优化下, 第一想法是走队列,但是发现项目压根没有使用队列,很多操作还停留在 有个任务表,有任务的时候,往里面加内容,然后有个定时任务,每分钟执行一次,定时的去消费任务;

于是想着怎么先最少的改动,先把问题解决,后面的事情在做考虑。

其实问题的本质是new 太多Thread了,那么最简单的方法就是限制数量。

于是 ThreadPool.QueueUserWorkItem就登场了。

对于线程队列 ThreadPool.QueueUserWorkItem 很多人应该都不陌生,下边看微软的解释:

将方法排入队列以便执行,并指定包含该方法所用数据的对象。此方法在有线程池线程变得可用时执行。

方法如下

 
  protected static Logger Logger = LogManager.GetCurrentClassLogger();
        public ActionResult Index()
        {
          //  Logger.Debug("执行了  开始 ");
            ThreadPool.QueueUserWorkItem(new WaitCallback(InsertNewsInfoExt), "param");
         //   Logger.Debug("执行了  结束 ");
            return View();
        }
        private void InsertNewsInfoExt(object info)
        {
         //   Logger.Debug("执行了  InsertNewsInfoExt  开始");
            Thread.Sleep(1000*200);
            Logger.Debug("执行了  InsertNewsInfoExt 结束 ");
           

        }

 

 

根据msdn描述:线程池的默认大小为每个可用处理器有 25 个线程。使用 SetMaxThreads 方法可以更改线程池中的线程数

,

新2会员网址www.22223388.com)实时更新发布最新最快最有效的新2网址和新2最新网址,包括新2手机网址,新2备用网址,皇冠最新网址,新2足球网址,新2网址大全。

,
  //工作者线程最大数目,I/O线程的最大数目
            ThreadPool.SetMaxThreads(1000, 1000);   
            //启动工作者线程
           ThreadPool.QueueUserWorkItem(new WaitCallback(InsertNewsInfoExt), "param");

 

 

相关参数

GetAvailableThreads 剩余空闲线程数

GetMaxThreads 最多可用线程数,所有大于此数目的请求将保持排队状态,直到线程池线程变为可用

GetMinThreads 检索线程池在新请求预测中维护的空闲线程数。

QueueUserWorkItem 启动线程池里得一个线程(队列的方式,如线程池暂时没空闲线程,则进入队列排队)

SetMaxThreads 设置线程池中的最大线程数

SetMinThreads 设置线程池最少需要保留的线程数

这样就解决了无限制 new Thread 的问题,实现了最少改动。

 

 

 

 

 

 

 

  • 皇冠正网平台出租(rent.22223388.com) @回复Ta

    2022-02-12 00:03:17 

    数据显示,自1975年6月23日亚洲杯预选赛最先至今,中国队已经与日本队在正式国际竞赛中遭遇27次,成就为8胜7平12负,可见中国队在双方匹敌中显著处于下风。更令人唏嘘的是,自从1998年3月在第4届戴拿斯杯约请赛中以2比0取胜日本队后,中国队至今已经延续跨越23年未能取胜这一对手。双方最近一次交手是在2019年12月举行的东亚杯赛时代,那时中国队以1比2不敌以J联赛球员为主的“日本二队”。小花花送给你

  • 澳洲幸运5开户(www.a55555.net) @回复Ta

    2022-04-18 00:01:17 

    新2备用网址(www.22223388.com)是一个开放新2网址即时比分、新2网址代理最新登录线路、新2网址会员最新登录线路、新2网址代理APP下载、新2网址会员APP下载、新2网址线路APP下载、新2网址电脑版下载、新2网址手机版下载的新2新现金网平台。新2网址登录线路最新、新2皇冠网址更新最快,皇冠体育APP开放皇冠会员注册、皇冠代理开户等业务。这反转很溜

发布评论