黑马程序员--.Net学习日记——线程

---------------------- Windows Phone 7手机开发Net培训、期待与您交流! ----------------------

 

 黑马程序员--.Net学习日记——线程

 

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

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

     .net如何实现多线程?

     线程肯定也是要执行一段代码的,所以要产生一个线程,必须先为线程写一个方法.这个方法中的代码就是该线程运行所要执行的代码.

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

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

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

     2.引用system,Threading命名空间.

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

     4.调用Thread实例的Start方法,标记该线程可以被cpu执行了,但具体时间由cpu决定.

     前台线程:只有所有的前台线程关闭才能完成程序关闭.

     后台线程:只要所有的后台线程结束,后台线程自动结束.

     thread类的一些重要成员:

     1.start()启动线程.

     2.Abort()终止线程.

     3.Thread.sleep(1)静态方法,可以使当前线程停止一段时间

     4.Thread,CurrentThread获得当前线程的引用

 

启动一个线程最直观的办法就是启动Thread类如下具体步骤:

     ThreadStart threadStart=new ThreadStart(Calculate); //通过ThreadStart委托告诉子线程将执行什么方法,这是执行一个计算圆周长的方法

     Thread thread=new Thread(threadStart);

     thread.Start();//启动新线程

      public void Calculate(){

      double Diameter=0.5;

      Console.Write("The perimeter Of Circle with a Diameter of {0} is {1}"Diameter,Diameter*Math.PI);

}

 

使用线程的好处

  ·使用线程可以把占据长时间的程序中的任务放到后台去处理

  ·用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度

  ·程序的运行速度可能加快

  ·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等等。

 

一些线程模型的背景

  ·单线程模型 

  在这种线程模型中,一个进程中只能有一个线程,剩下的进程必须等待当前的线程执行完。这种模型的缺点在于系统完成一个很小的任务都必须占用很长的时间。

  ·块线程模型(单线程多块模型STA

  这种模型里,一个程序里可能会包含多个执行的线程。在这里,每个线程被分为进程里一个单独的块。每个进程可以含有多个块,可以共享多个块中的数据。程序规定了每个块中线程的执行时间。所有的请求通过Windows消息队列进行串行化,这样保证了每个时刻只能访问一个块,因而只有一个单独的进程可以在某一个时刻得到执行。这种模型比单线程模型的好处在于,可以响应同一时刻的多个用户请求的任务而不只是单个用户请求。但它的性能还不是很好,因为它使用了串行化的线程模型,任务是一个接一个得到执行的。

  ·多线程块模型(自由线程块模型)

  多线程块模型(MTA)在每个进程里只有一个块而不是多个块。这单个块控制着多个线程而不是单个线程。这里不需要消息队列,因为所有的线程都是相同的块的一个部分,并且可以共享。这样的程序比单线程模型和STA的执行速度都要快,因为降低了系统的负载,因而可以优化来减少系统idle的时间。这些应用程序一般比较复杂,因为程序员必须提供线程同步以保证线程不会并发的请求相同的资源,因而导致竞争情况的发生。这里有必要提供一个锁机制。但是这样也许会导致系统死锁的发生。

  进程和线程都是操作系统的概念。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。

  线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说mainWinMain函数,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终止。

  每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应用也较为广泛。多线程可以实现并行处理,避免了某项任务长时间占用CPU时间。要说明的一点是,目前大多数的计算机都是单处理器(CPU)的,为了运行所有这些线程,操作系统为每个独立线程安排一些CPU时间,操作系统以轮换方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行。由此可见,如果两个非常活跃的线程为了抢夺对CPU的控制权,在线程切换时会消耗很多的CPU资源,反而会降低系统的性能。这一点在多线程编程时应该注意。Win32 SDK内置函数支持多线程的程序设计,并提供了操作系统原理中的各种同步、互斥和临界区等操作。Visual C++ 6.0中,使用MFC类库也实现了多线程的程序设计,使得多线程编程更加方便.

---------------------- Windows Phone 7手机开发Net培训、期待与您交流! ----------------------

详细请查看:http://net.itheima.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值