HTML5技术

C# 多线程,论多核时代爱恨情仇 - 请叫我头头哥(2)

字号+ 作者:H5之家 来源:博客园 2015-11-24 08:03 我要评论( )

相信分别从有TASK和没有TASK的这两次demo中,可以清楚的发现多线程处理这些频繁交互能力的魅力。你会爱上这个方法。确实提高的效率。但是问题也随之而来,一个进程多线程的总数和大小是有要求的(这个取决于服务器的

相信分别从有TASK和没有TASK的这两次demo中,可以清楚的发现多线程处理这些频繁交互能力的魅力。你会爱上这个方法。确实提高的效率。但是问题也随之而来,一个进程多线程的总数和大小是有要求的(这个取决于服务器的配置),不是任由我们肆意的开采的。如果订单太多,我们不控制task那是会拉仇恨的。task需要控制。

C# 多线程

  • Semaphore:

    如果有对Semaphore不是很熟悉的园友可以在解开心谜。

    代码正文:

    //------------------------------------------------------------------------------ // <copyright file="Runner.cs" company="CNBlogs Corporation" owner="请叫我头头哥"> // Copyright (C) 2015-2016 All Rights Reserved </copyright> CNBlogs.EmulationSystem { using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using CNBlogs.Common.Shared; class Runner { Job helper JobHelper jobHelper = new JobHelper(); The locker used to lock the semaphore and thread. lockerObj = new object(); The semaphore limit the thread number of get latest test info Semaphore semaphoreLimit; Runner lock Mutex mutex; static void Main(string[] args) { // 记录开始处理的时间 DateTime paddingTime = DateTime.Now.ToLocalTime(); int orderCount = jobHelper.GetJobCount(); // 用一个指示调用线程是否应拥有互斥体的初始所属权的布尔值来初始化 Mutex 类的新实例。 // 当前进程只能启动一次 mutex = ); if (!mutex.WaitOne(0, false)) { Console.Out.WriteLine(); return; } maxProcNumber = 500; using (semaphoreLimit = new Semaphore(0, maxProcNumber)) { // 以指定的次数退出信号量并返回前一个计数。 semaphoreLimit.Release(maxProcNumber); var taskList = new List<Task>(); for (int i = 0; i < orderCount; i++) {
    int temp=i;
    // 如果SubmitJob有IO或者其他容易因为冲突而引起异常的话,这里需要加上lock //lock (lockerObj) //{ semaphoreLimit.WaitOne(); taskList.Add(Task.Factory.StartNew(() => { // 假设i就是job id jobHelper.SubmitJob(temp); // 退出信号量并返回前一个计数。 semaphoreLimit.Release(); })); //} } // 等待所有task执行完毕 Task.WaitAll(taskList.ToArray()); } // 记录处理完成的时间 DateTime completeTime = DateTime.Now.ToLocalTime(); var minutes = (completeTime - paddingTime).TotalSeconds; Console.WriteLine(, orderCount, minutes)); } } }

    代码效果:

  • v博客总结

    多线程路还很长...

     

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • HTML5新特性-多线程(Worker SharedWorker) - 大~熊

      HTML5新特性-多线程(Worker SharedWorker) - 大~熊

      2017-04-18 11:01

    • web workers工作线程 - Aqiaoba

      web workers工作线程 - Aqiaoba

      2017-03-10 15:00

    • https时代来了,你却还一无所知? - 茄果

      https时代来了,你却还一无所知? - 茄果

      2017-01-14 11:00

    • Web Worker javascript多线程编程(一) - PeakLeo

      Web Worker javascript多线程编程(一) - PeakLeo

      2016-12-27 10:00

    网友点评
    m