• 多重影分身——C#中多线程的使用一(基础)


    首先明确几个概念:

    什么是进程?

    当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。 而一个进程又是由多个线程所组成的。

    一个程序通常只有一个进程(不包括exe调用exe的情况)。

    什么是线程?

    线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。

    什么是多线程?

    通俗的即使:多线程给人的感觉是同一时间做很多事情,其实从微观的角度来看,并不是同时,而是有效利用了CPU的空闲时间,有顺序的做一些事情。例如一般的程序是抛起一个小球,等它落下来再将抛起另一个小球。多线程则是抛起后在本该等待降落的时间里继续抛,有效的利用了等待的时间。

    专业的解释:多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

    多线程的好处和坏处:

    好处:可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。

    坏处:线程也是程序,所以线程需要占用内存,线程越多占用内存也越多; 多线程需要协调和管理,所以需要CPU时间跟踪线程; 线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题; 线程太多会导致控制太复杂,最终可能造成很多Bug;

    小例子:

    Thread.CurrentThread.Name = "Main Thread";
    Console.WriteLine(Thread.CurrentThread.Name + " , Status:" + Thread.CurrentThread.ThreadState);
    Console.ReadKey();

    ThreadState 属性的取值如下:

    Aborted:线程已停止;

    AbortRequested:线程的Thread.Abort()方法已被调用,但是线程还未停止;

    Background:线程在后台执行,与属性Thread.IsBackground有关;

    Running:线程正在正常运行;

    Stopped:线程已经被停止;

    StopRequested:线程正在被要求停止;

    Suspended:线程已经被挂起(此状态下,可以通过调用Resume()方法重新运行);

    SuspendRequested:线程正在要求被挂起,但是未来得及响应;

    Unstarted:未调用Thread.Start()开始线程的运行;

    WaitSleepJoin:线程因为调用了Wait(),Sleep()或Join()等方法处于封锁状态;

    Thread中常用的一些方法:(Thread代表静态方法,t代表需要实例化)

    Thread.Sleep(int num)   当前线程停止num毫秒

    t.Start();  开始该线程

    t.Abort();  终止该线程

    t.Join(); 通常跟在t.Start()后面,表示等该线程执行完再执行其他。通常在有顺序依赖关系的情况使用。

    开100个线程:

    static void Main(string[] args)
    {
          for(int i=0;i<100;i++)
          {
                Thread t=new Thread(new ThreadStart(Say));
                t.Start();
          }  
    }
    
    static void Say()
    {
            Thread.Sleep(100);
            Console.WriteLine("I'm saying!");
    }
  • 相关阅读:
    Directx11 HelloWorld之DirectCompute
    TortoiseSVN使用简介
    图形学的坐标转换问题(局部到世界坐标系,世界到观察坐标系)
    Directx11中获取HLSL中变量一些问题
    Mathematics for Computer Graphics
    Nvidia给力 Android游戏革命来临 有能力超iPhone
    D3d10和D3d11中Map()函数用法一点心得总结
    GPU开始无处不在,加速火狐浏览器4.0
    Delphi多媒体设计之TMediaPlayer组件(四)
    Delphi多媒体设计之TMediaPlayer组件(一)
  • 原文地址:https://www.cnblogs.com/dengshaojun/p/4124932.html
Copyright © 2020-2023  润新知