C#中使用线程Task类和Thread类小结

刚接触C#3个月左右。原先一直使用C++开发。由于公司的须要,所地採用C#开发。主要是控制设备的实时性操作,此为背景。

对于C#中的Task和Thread我在这不作介绍,要了解很多其它的。假设查看相当信息。此次项目中使用到TASK和THRED,让我调试足足用了将近两周的时间才找出问题所在,所以在此写出来防止跟我一样刚接触C#,又同一时候须要对线程的实时性要求的开发者一些个人总结注意事项。

1.Task适合用于多处理器,且i系列多处理器。

2.Thread则适用于全部的处理器,实时性更高。

以下是我的个人測试代码:

当中使用的对错可能是我个人对C#线程理解不够引起的。假设有使用不对错,望大鸟指导。

        private static void ThreadAndTaskTest()
{
Stopwatch watch = new Stopwatch();
watch.Start(); <p>            //Thread threadTest1 = new Thread(() =>
            //{
            //    Thread.Sleep(2000);
            //    Debug.WriteLine("线程1结束消耗时间:{0}", watch.ElapsedMilliseconds);
            //});
            //threadTest1.Start();</p><p>            //Thread threadTest2 = new Thread(() =>
            //{
            //    Thread.Sleep(2000);
            //    Debug.WriteLine("线程2结束消耗时间:{0}", watch.ElapsedMilliseconds);
            //});
            //threadTest2.Start();</p><p>            //Thread threadTest3 = new Thread(() =>
            //{
            //    Thread.Sleep(2900);
            //    Debug.WriteLine("线程2结束消耗时间:{0}", watch.ElapsedMilliseconds);
            //});
            //threadTest3.Start();</p><p> </p> var Task1 = Task.Factory.StartNew(() =>
{
Thread.Sleep(2500);
Debug.WriteLine("线程1结束消耗时间:{0}", watch.ElapsedMilliseconds);
}); var Task2 = Task.Factory.StartNew(() =>
{
Thread.Sleep(2700);
Debug.WriteLine("线程2结束消耗时间:{0}", watch.ElapsedMilliseconds);
}); var Task3 = Task.Factory.StartNew(() =>
{
Thread.Sleep(2900);
Debug.WriteLine("线程3结束消耗时间:{0}", watch.ElapsedMilliseconds);
}); while (watch.ElapsedMilliseconds <= 3000)
{
//if (!threadTest.IsAlive && !threadTest1.IsAlive)
if (Task1.IsCompleted && Task2.IsCompleted && Task3.IsCompleted)
{
Debug.WriteLine("监控结束消耗时间:{0}", watch.ElapsedMilliseconds);
break;
}
else
Thread.Sleep(1);
}
}

上面採用Task測试结果例如以下:

线程1结束消耗时间:2503

             线程2结束消耗时间:2703

             线程3结束消耗时间:3944(理论应该2905)

相同的代码採用Thread的測试结例如以下:

线程2结束消耗时间:2003

             线程1结束消耗时间:2002

             线程2结束消耗时间:2905

上面測试环境在:

处理器:Pentium(R)Dual-Core CPU E6700 @3.20GHXZ

安装内存(RAM):4.0GB

系统类型:32位操作系统

假设採用 i5系列的CPU,其他硬件环境都一样则不会有这样的超时情况.

在此也遇到点问题:线程20个以上同一时候执行,线程的实时性差异也非常大,同一个线程函数差距有700ms.

C#中假设正确使用线程Task类和Thread类的更多相关文章

  1. 如何创建线程第一种继承Thread类

    步骤 1:定义一个类 继承Thread类.2:重写Thread类的run方法.3:直接创建Thread的子类对象创建线程.4:调用start方法开启线程并调用线程的任务run方法执行.-------- ...

  2. 【Java中的线程】java.lang.Thread 类分析

    进程和线程 联想一下现实生活中的例子--烧开水,烧开水时是不是不需要在旁边守着,交给热水机完成,烧开水这段时间可以去干一点其他的事情,例如将衣服丢到洗衣机中洗衣服.这样开水烧完,衣服洗的也差不多了.这 ...

  3. JAVA与多线程开发(线程基础、继承Thread类来定义自己的线程、实现Runnable接口来解决单继承局限性、控制多线程程并发)

    实现线程并发有两种方式:1)继承Thread类:2)实现Runnable接口. 线程基础 1)程序.进程.线程:并行.并发. 2)线程生命周期:创建状态(new一个线程对象).就绪状态(调用该对象的s ...

  4. Java知多少(58)线程Runnable接口和Thread类详解

    大多数情况,通过实例化一个Thread对象来创建一个线程.Java定义了两种方式: 实现Runnable 接口: 可以继承Thread类. 下面的两小节依次介绍了每一种方式. 实现Runnable接口 ...

  5. Java 线程--继承java.lang.Thread类实现线程

    现实生活中的很多事情是同时进行的,Java中为了模拟这种状态,引入了线程机制.先来看线程的基本概念. 线程是指进程中的一个执行场景,也就是执行流程,进程和线程的区别: 1.每个进程是一个应用程序,都有 ...

  6. 多线程-2.线程创建方式和Thread类

    线程的创建方式 1.继承Thread类,重写run方法,示例如下: 1 class PrimeThread extends Thread { 2 long minPrime; 3 PrimeThrea ...

  7. python端口扫描用多线程+线程安全的队列+Thread类实现

    用线程安全的队列Queue实现扫描端口数据存储 用多线程扫描端口 用Thread类实现程序组织 #coding:utf-8 import sys import socket import sys im ...

  8. Process类,Thread类,Pool类,gevent类,ProcessPoolExecutor,ThreadPoolExecutor的用法比较

    一 Process类 multiprocessing模块下的一个类 创建子进程. 有两种方法 方法一 from multiprocessing import Process import os def ...

  9. communication between threads 线程间通信 Programming Concurrent Activities 程序设计中的并发活动 Ada task 任务 Java thread 线程

    Computer Science An Overview _J. Glenn Brookshear _11th Edition activation 激活 parallel processing 并行 ...

随机推荐

  1. 观察者模式(Observer Patterns)

    今天学习了观察者模式,做个总结,方便以后回想. 首先是定义:观察者模式就是定义对象之间一对多的依赖关系,当一个对象状态发生改变时,全部依赖他的对象都收到推送消息并自己主动更新做出改变. 我的理解:生活 ...

  2. POJ2676 Sudoku [数独]

    好题,也非常有用,犯了几个错误 1.在枚举赋值的时候,思维有个错误:当当前的赋值不能填完这个数独,应该是继续下一个循环,而不是return false 终止枚举 2.Generic Programin ...

  3. Coreseek:部门查询和增量索引代替实时索引

    1.行业调查 索引系统需要通过主查询来获取所有的文档信息,一个简单的实现是整个表的数据到内存,但是这可能会导致整个表被锁定,并且使其它操作被阻止(例如:在MyISAM格款式上INSERT操作).同时, ...

  4. 3Dmax+blend+WPF综合运用

    原文:3Dmax+blend+WPF综合运用 赛后总结 本人小菜,WPF刚入门,只是写一下最近的项目心得.欢迎各位前辈们前来拍砖指正,感激不敬!先申明,小弟我入门仓促,很多东西也是一知半解,所以很多问 ...

  5. 同步特定源代码到 omni_rom源代码目录里面

    #!/bin/bash base_path="/Volumes/Android/omnirom_5.0" #此目录是我存放源代码的目录 xiaomi_device="de ...

  6. 使用Emacs muse制作幻灯片

    PPT太受欢迎.总是必要的交流会议.我看到一个很酷javascript实现,取代PPT. 不过还是很喜欢Emacs要做的事,即使文件难听点. 现在,用muse slidy, 一大区别. 简单的说mus ...

  7. 你的第一个AngularJS应用--教程二:基架、建立和測试的工具

    介绍 有非常多可用的工具能够帮助你开发AngularJS 应用,那些非常复杂的框架不在我的讨论范围之中,这也是我開始这系列教程的原因. 在第一部分,我们掌握了AngularJS框架的基本结构,开发了第 ...

  8. 惠普4431s 笔记本配置

    hp-4431s驱动精灵硬件检测报告 版本:2015.3.26.1363(8.1.326.1363)================================================== ...

  9. XUtils骨架HttpUtils采用Get总是返回请求解决问题的相同信息

    如需转载请注明出处:http://blog.csdn.net/itas109 版本号:Xutils 2014年11月11日 下载地址:https://github.com/wyouflf/xUtils ...

  10. 类似的微博推断客户关系sql声明

    类别似新浪微博的关注和共同关心 不知道别人是怎么设计的. 反正我是例如以下设计的 ID   USER   FRIEND 1     A         B 2      B         A 3   ...