首页 > 语言 > 关键词 > .NET最新资讯 > 正文

在.NET上执行多线程操作要考虑的两大因素

2009-01-22 11:02 · 稿源:IT专家网论坛

线程管理

线程管理现在变得越来越容易了。在.NET架构中,你可以从线程池中获取线程。线程池是一个生成线程的工厂,如果它已经生成了一定数量的线程且还没有被破坏的话,对它的调用会被阻止。但是,如何确保不会有太多的线程在规定时间内运行?毕竟,如果每个线程能够占用一个CPU核的100%,那么有超过CPU核数量的线程运行,只会导致操作系统启动线程时间分配,这将导致上下文切换和低效率运行。换句话说,同一核上的两个线程不会以两倍的时长完成,可能需要用两倍再加10 %左右的时间来完成。与一个线程相比较的话,三个线程在同一核上想占用100 %的CPU使用率可能会需要3.25——3.5倍的时长来完成。我的经验是,每个核都有多个线程试图占用100 %的CPU,但它们都不能达到目标。

所以,要怎样分配正在运行的线程数量呢?

有一个办法是在线程之间建立一个共享的旗语对象。在线程开始运行前,它会尝试调用旗语的WaitOne模式,并在完成后释放旗语。对CPU的核数量设置旗语限制,(使用EnvironmentProcessorCount功能限定);这将防止您的系统在同一时间运行的线程数多于核数量。与此同时,从线程池中拉出线程将确保您不会在同一时间创建过多线程。如果一次创建线程过多,即使他们并没运行,那也是浪费系统资源。因为每个线程都要消耗资源。使用旗语的一般模式如下所示:

以下为引用的内容:

   static Semaphore threadBlocker;

  static void Execute(object state)

  { threadBlocker.WaitOne(); //Do work threadBlocker.Release(); }

  static void RunThreads()

  { threadBlocker = new Semaphore(0, Environment.ProcessorCount); for (int x = 0; x <= 2000; x++) {ThreadPool.QueueUserWorkItem(new WaitCallback (Execute)); } }

当然还有其他一些办法可以解决这一问题。前一段时间我想要保持对象的一份〈T〉清单。每个对象代表每个工人部件的完整状态。执行和完成时,工人部件都会被填入数据。并且他会设置某个功能以指示任务完成。主线程将扫描对象清单,如果运行的线程数量足够少,就开始运行另一个。说实话,虽然这个方法可行,但对于代码和调试来说这绝对是个噩梦,所以我一点也不推荐。

数据完整性

总体而言,在数据完整性方面,你要担心的问题是竞争条件和死锁。多个线程试图在同一时间更新相同的对象就会造成竞争条件,这将招致麻烦。想象一下如果使用下面这段代码:

以下为引用的内容:

  int x = 5;

  x = x + 10;


现在,如果线程A和线程B在同一时间运行此代码,将会发生什么情况?它可以运行得很好?还是会出现什么问题?如果出现问题,又是些怎样的问题呢?每个线程都不会一次执行全部语句。因此,我们可以按照以下顺序操作:

以下为引用的内容:

  1. Thread A retrieves the value of x (5).

  2. Thread B retrieves the value of x (5).

  3. Thread A assigns x + 10 (15) to x.

  4. Thread B assigns x + 10 (15) to x.

  5. x is now equal to 15.

或者,相同的代码可以按照不同的顺序:

以下为引用的内容:

  1. Thread A retrieves the value of x (5).

  2. Thread A assigned x = 10 (15) to x.

  3. Thread B retrieves the value of x (15).

  4. Thread B assigns x + 10 (25) to x.

    5. x is now equal to 25.

  • 相关推荐
  • 大家在看
  • 锐龙9 3900XT性能偷跑:单/多线程均提升约5%

    AMD最近发布了鸡血加速版的锐龙3000XT系列,将于7月7日上市,国行价格也已公布:锐龙9 3900XT 3899元、锐龙7 3800XT 3049元、锐龙5 3600XT 1859元。相比于锐龙3000X系列的对应型号,新品的加速

  • 台积电明日召开股东会 将聚焦两大主题

    【TechWeb】6月8日消息,据台湾媒体报道,台积电股东会将于明日登场,除进行2019年度营运报告之外,本次股东会将聚焦华为禁令影响,以及赴美设厂等两大主题。台积电台积电年度股东常会将由董事长刘德音及总裁魏哲家为首的经营团队主持,会中将针对2019年营运报告进行承认事项,也将对2020年营运展望作出说明。台积电董事长刘德音及总裁魏哲家的讲话,受市场高度关注。若对华为禁令没有持续延长缓冲期,台积电9月中后无法再对华为?

  • 苹果AirPods爆炸是怎么回事?专家提出两大疑点

    AirPods苹果推出的真无线耳机产品,也是目前同类当中的佼佼者。而有报道称,郑州一名小伙在佩戴AirPods拨打电话时发生意外,右边耳机突然爆炸。

  • 揭秘英博奶粉三大御用工厂两大牧场

    为确保英博集团出品的奶粉高品质,整合三大奶粉御用工厂安嘉、优贝特、优贝康和两大专属优质牧场黑龙江嫩江平原及铁力农场,年产能力高达3 万多吨,能满足市场百亿元的产品供应,确保市场供应及时,不断货,品质高水平。优贝特乳业集团拥有三家生产基地的全产业链乳制品生产加工及销售企业,公司占地面积4.3万平方米,建筑面积2.1万平方米,年设计产能8000吨。公司高标准建设的质检中心总投资达1500万元,配备了高端进口仪器150台?

  • 微博视频号宣布开启内测 需满足两大条件才能加入

    微博视频号宣布开启内测,目前微博视频号计划处于内测期,内测期间采用分批邀请制,将于 7 月初正式上线。

  • 腾讯乘车码上线两大新功能:终于能再赖一会儿床了

    6月3日消息,腾讯乘车码上线实时公交到站查询、出行线路一键规划两大功能,再赖一会床,公交快到了再出发吧!1、实时公交到站查询公交到哪了?还有几站到?还有多久到?打开实时公交,查询下

  • 《隐秘的角落》今晚上线当贝影视,秦昊王景春两大影帝同台飙戏!

    2020 的下半年,国产悬疑剧在毫无征兆的情况下,开启了疯狂烧脑的模式。前有豆瓣8. 1 高分网剧《十日游戏》上演惊天反转,后有爱奇艺迷雾剧场一口气官宣 5 部 12 集精品悬疑短剧!今晚,由秦昊、王景春张颂文等主演的家庭悬疑犯罪短剧《隐秘的角落》即将上线当贝影视,该剧改编自国产推理作家紫金陈的小说《坏小孩》,讲述了沿海小城的三个孩子在景区游玩时无意拍摄记录了一次谋杀,他们的冒险也由此展开。扑朔迷离的案情,将几个家

  • 搜「开小店」人数爆增28倍!支付宝六月两大招支持小生意

    如何开店做小生意?成为近期搜索量最高频的词句。自上周支付宝推出「开小店直通车」后,搜索量爆增28倍!大众开店做小生意的热情可见一斑。上支付宝搜索「开小店」,就可直达收钱、进货、贷款等等与小店小摊经营直接相关的多项功能,成为数字小店。

  • 189元起 小米两大国民级爆品Redmi 9、小米手环5今日开售

    如日前预告,今天上午10点,Redmi 9正式首卖,4GB+64GB 799元、4GB+128GB 999元、6GB+128GB 1199元。与此同时,小米手环5迎来新一轮开卖,标准版189元、NFC 229元。Redmi 9采用6.53英寸水滴屏

  • 微软(中国)被列为被执行人 执行标的超95万

    据天眼查数据显示, 近日,微软(中国)有限公司新增一条被执行人记录,执行法院为北京市第一中级人民法院,执行标的952215,案号为(2020)京 01 执 571 号。

  • 美图:陈家荣为非执行董事,蒉莺春为独立非执行董事

    美图发布公告,股东周年大会的投票表决结果,美图董事会宣布,自2020年6月3日起,陈家荣获选为非执行董事,蒉莺春获选为独立非执行董事。

  • 微软中国被列为被执行人 执行标的近百万元

    据天眼查显示,微软中国有限公司近日新增一条被执行人记录,执行法院为北京市第一中级人民法院,执行标的952215,案号为(2020)京 01 执 571 号。

  • 微软中国被列为被执行人 执行标的952215

    6 月 4 日,微软(中国)有限公司新增一条被执行人记录,执行法院为北京市第一中级人民法院,执行标的952215,案号为(2020)京 01 执 571 号。资料显示,微软(中国)有限公司成立于 1995 年 11 月,注册资本约1. 19 亿美元,法定代表人为柯睿杰(Alain Gilles Joseph Crozier),该公司由微软公司全资持股。

  • 微软(中国)有限公司被列为被执行人 执行标的952215

    DoNews 6月8日消息(记者 吴丽)天眼查数据显示, 近日,微软(中国)有限公司新增一条被执行人记录,执行法院为北京市第一中级人民法院,执行标的952215,案号为(2020)京01执571号。微软(中国)有限公司成立于1995年11月,注册资本约1.19亿美元,法定代表人为柯睿杰(Alain Gilles Joseph Crozier),该公司由微软公司全资持股。

  • 猫眼娱乐程武为非执行董事

    DoNews 6月8日消息(记者 程梦玲)猫眼娱乐发布公告称,委任程武为公司非执行董事,委任刘琳为独立非执行董事 ,2020年6月9日生效。程武现任腾讯集团副总裁、阅文集团首席执行官兼腾讯影业首席执行官。刘琳曾就职于美团点评担任高级副总裁、就职于腾讯担任人力资源部总经理及总裁办管理咨询部总经理,现均已离任。公告同时披露,公司原非执行董事湛炜标、原独立非执行董事罗振宇已辞任相应职务,于2020年6月9日生效。

  • 永安行科技股份有限公司成被执行人 执行标的60万

    天眼查数据显示,近日,永安行科技股份有限公司被石狮市人民法院列为被执行人,执行标的600000,案号为(2020)闽0581执3960号 。永安行科技股份有限公司成立于2010年8月,注册资本约1.88亿人民币,法定代表人为永安行董事长孙继胜,公司经营范围包括公共自行车系统的开发、制造、集成、安装、调试、销售及公共自行车系统信息技术服务,运营管理服务;自行车、电动自行车、电动三轮车、电动滑板车、电动汽

  • 呷哺呷哺餐饮管理有限公司被列为被执行人 执行标的为227338

    DoNews 6月4日消息(记者 吴丽)天眼查数据显示,近日,呷哺呷哺餐饮管理有限公司被列为被执行人,执行标的227338,执行法院为天津市津南区人民法院,案号为(2020)津0112执1624号。据了解,呷哺呷哺被列为被执行人的原因,为天津科诚房地产开发有限公司与呷哺呷哺餐饮管理有限公司的相关租赁合同纠纷。呷哺呷哺餐饮管理有限公司成立于2008年9月,注册资本5500万人民币,法定代表人为刘冠纬,经营范围包括餐饮服务;加工火锅底料?

  • 微信拍一拍怎么操作

    微信拍一拍怎么操作?微信日前上线了「微信拍一拍」功能,相信很多网友已经收到很多好友的拍一拍。微信拍一拍功能是在微信最新的 7.0.13 及以上版本中的一个彩蛋小功能,默认开启,目前用户还不能手动关闭。那么微信拍一拍怎么操作呢?以下是关于微信拍一拍怎么操作的详细解答。

  • 神州优车股份有限公司全资子公司成被执行人 执行标的112259

    DoNews 6月24日消息(记者 吴丽)天眼查数据显示,6月22日,上海亿君汽车服务有限公司被上海市闵行区人民法院列为被执行人,执行标的112259。上海亿君汽车服务有限公司成立于2014年12月,法定代表人为曾庆祝,公司经营范围包括机动车驾驶服务,商务咨询,该公司为神州优车股份有限公司的全资子公司。值得一提的是,天眼查十大股东信息显示,神州优车股份有限公司的最大股东为陆正耀,持股比例10.05%。

  • 阿里影业:常扬内部调职辞任非执行董事

    昨日晚间,阿里影业发布公告称,自 2020 年 6 月 24 日起,常扬因内部调职已辞任非执行董事。同日起,李捷委任执行董事及公司执行委员会成员。

  • 参与评论
文明上网理性发言,请遵守新闻评论服务协议