您的位置:首页 > 职场人生

黑马程序员01--线程与进程的区别以及为什么使用多线程?

2013-05-23 15:32 791 查看
------- Windows
Phone 7手机开发、.Net培训、期待与您交流!
-------

几个概念:

进程(Process):是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。进程之间是相对独立的,一个进程无法直接访问另 一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把工作划分为多个独立的区域 的。进程可以理解为一个程序的基本边界。

要解决的问题:为了使程序能并发执行,(要并发执行就要隔离进程,使进程独立,即每个进程有属于自己的数据段、程序段、进程控制块)

应用程序域:它提供安全而通用的处理单元,公共语言运行库可使用它来提供应用程序之间的隔离。您可以在具有同等隔离级别(存在于单独的进程中)的单个进程中运行几个应用程序域,而不会造成进程间调用或进程间切换等方面的额外开销。在一个进程内运行多个应用程序的能力显著增强了服务器的可伸缩性。

优势: 在一个应用程序中出现的错误不会影响其他应用程序。能够在不停止整个进程的情况下停止单个应用程序。应用程序域形成了托管代码的隔离、卸载和安全边界。    在任意给定时间,每一线程都在一个应用程序域中执行

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

解决问题:进程是一个资源的拥有者,因而在进程的创建、撤销、和切换的过程中,系统必须为之付出较大的时空开销,限制了并发程度的进一步提高。

线程是程序中的一个执行流,每个线程都有自己的寄存器(栈指针,程序计数器等)

但代码区是共享的,即不同的线程可以执行同样的函数.

多线程是程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务(代码),也就是说允许单个程序创建多个并执行的线程来完成各自的任务.

进程里面包含一个默认线程,默认线程也叫用户线程或者UI线程

为什么要使用多线程呢?

1.计算机"同时"做多件事情,节约时间.

2.后台运行程序,提高程序的运行效率,也不会使主界面出现无响应的情况.3.

3.多线程可以让一个程序"同时处理多个事情.计算机cpu大部分时间处于空闲状态,浪费了cpu资源.

单线程就像售货员在接待客户时做别的事情,客户就没人招待了,任务单一,不能及时的完成任务.

注意:在VS中的线程通过断点调试是不合理的,因为多个线程之间是CPU不断的切换的,执行顺序是不确定的。

另外,线程肯定也是一段代码.所以要产生一个线程,必须先为该线程写一个方法

,这个方法中的代码,就是该线程运行所要执行的代码.(相当于找一个人来做一件事)

线程启动时,通过委托调用该方法.

委托的好处是什么?参考这个博文,写的很详细 http://www.cnblogs.com/agan-qin/archive/2012/02/18/2357711.html

线程启动时,调用传过来的委托,委托就会执行相应的方法,实现线程执行方法.

产生一个线程的4个步骤:

编写产生线程所要执行的方法

引入System.Threading命名空间

实例化Thread类,并传入一个指向线程所要运行方法的委托(这时线程已经产生,但是还没有运行)

调用Thread实例的Start()方法,编辑该线程可以被CPU执行了,但具体执行时间由cpu决定

不带参数的线程方法:

Thread thr = new Thread(SHowMsg);
thr.IsBackground = true;
thr.SetApartmentState(ApartmentState.STA);//win7需要设置此项,不然可能出错
thr.Start();

void SHowMsg()//无参数方法
{
//代码片段
}


默认是前台线程:所有的线程都关闭,才能完成程序的关闭.

后台线程:当所有前台线程结束后,后台线程会自动退出!

前台线程和后台线程详解:

    .Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程。这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。
  .net环境使用Thread建立的线程默认情况下是前台线程,即线程属性IsBackground=false,在进程中,只要有一个前台线程未退出,进程就不会终止。主线程就是一个前台线程。而后台线程不管线程是否结束,只要所有的前台线程都退出(包括正常退出和异常退出)后,进程就会自动终止。一般后台线程用于处理时间较短的任务,如在一个Web服务器中可以利用后台线程来处理客户端发过来的请求信息。而前台线程一般用于处理需要长时间等待的任务,如在Web服务器中的监听客户端请求的程序,或是定时对某些系统资源进行扫描的程序。

多线程学习扩展:http://www.cnblogs.com/xugang/archive/2008/04/06/1138856.html

可以参考这个播客,里面有详细的多线程的讲解.

------- Windows
Phone 7手机开发、.Net培训、期待与您交流!
-------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: