AppDomain,进程和线程的关系

还是用图来说明比较容易理解。

image

image

可以总结为以下几句话。

1,进程可以理解为程序(.exe)的实例。线程可以理解为一个虚拟的CPU。

2,一个进程可包含多个线程和多个Appdomain。

3,一个线程可以穿梭在多个Appdomain中,但在同一时刻,线程只会处在其中一个Appdomain中。

前台线程和后台线程

1,前台线程和后台线程的区别在于,应用程序必须运行完所有的前台线程才可以退出,而对于后台线程,可以不考虑其是否运行完而直接退出,所有的后台线程在应用程序退出时就自动结束了。

2,默认情况下,主线程和使用Thread创建的线程都是前台线程,除非手动设置IsBackground= true。

多线程和异步的区别

学习异步编程的时候,我总是分不清多线程和异步之间的区别。可以简单理解为:

相同:避免阻塞前台线程,提高程序的可响应性。

区别:

1,多线程只是实现异步的多种方式中的一种,比如为了实现异步,.net为我们提供了三种不同的异步实现方式,APM,EAP和TAP。

2,应用场景不同。多线程一般应用在计算密集型工作,而异步更适合在IO密集型工作。

.net中实现异步的几种方式

1,异步编程模型(APM)【不推荐】

2,基于事件的异步(EAP)【不推荐】

3,基于任务的异步(TAP)【推荐】

先了解下.net为我们提供了这几种方式实现异步,后面会分别总结。

线程的启动,挂起和结束

1,启动线程,Thread.Start方法。

2,挂起线程,也叫阻塞线程,Thread.Sleep方法。

3,结束线程,Thread.Abort方法。

Demo

上代码。

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading;
  6 using System.Threading.Tasks;
  7 
  8 namespace AsyncCoding
  9 {
 10     class Program
 11     {
 12         static void Main(string[] args)
 13         {
 14             var thread1 = new Thread(Go1);
 15             thread1.IsBackground = true;//默认为前台线程
 16             thread1.Start();//启动线程
 17 
 18             Console.WriteLine("我是主线程,Thread Id:{0}", Thread.CurrentThread.ManagedThreadId);
 19 
 20             Thread.Sleep(500);//挂起线程,模拟等待异步线程做事情
 21             thread1.Abort();//结束异步线程
 22 
 23             Console.ReadKey();
 24         }
 25 
 26         public static void Go1()
 27         {
 28             Console.WriteLine("我是异步线程,Thread Id:{0}", Thread.CurrentThread.ManagedThreadId);
 29 
 30             try
 31             {
 32                 for (int i = 0; i < 10; i++)
 33                 {
 34                     Thread.Sleep(100);//模拟每次执行需要100ms
 35                     Console.WriteLine("异步线程运行:{0}", i);
 36                 }
 37             }
 38             catch (ThreadAbortException ex)
 39             {
 40                 Console.WriteLine("异步线程被强制结束!");
 41             }
 42         }
 43     }
 44 }
View Code

代码运行顺序。

image

运行结果。

image

posted on 2016-07-08 11:44  永远的麦子  阅读(365)  评论(0编辑  收藏  举报