在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
首先明确几个概念: 什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。 而一个进程又是由多个线程所组成的。 一个程序通常只有一个进程(不包括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!"); }
|
请发表评论