进程是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。 通俗的说:当一个程序开始运行是,他就是一个进程,进程包括运行中的程序和程序使用到的内存和系统资源。而一个进程又是由多个线程所组成。
应用程序域是.NET引入的一个新概念,它比进程所占用的资源要少,可以被看作是一个轻量级的进程。
一个进程内可以包含多个应用程序域,一个应用程序域可以装载一个可执行程序(*.exe)或者多个程序集(*.dll)。这样可以使用程序域之间实现深度隔离,即使进程中的某个应用程序域出现错误,也不会影响其他应用程序域的正常运作。
应用程序域是进程中承载程序集的逻辑分区,在应用程序域当中,存在更细粒度的用于承载.NET对象的实体,那就是.NET上下文Context。
线程是进程中的基本执行单元,在进程入口执行的第一个线程被视为这个进程的主线程。
线程也可以穿梭于多个应用程序域中。但在同一时刻,线程只会处于一个应用程序域内。
多线程是 指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。
多线程的好处:可以提高CPU的利用率,在多线程程序中,一个线程必须等待的时候,CPU可以运行其他的线程而不是等待,这样就大大提高了程序的效率。
多线程的缺点:
线程也是程序,所以线程需要占用内存,线程越多占用内存也越多
多线程需要协调和管理,所以需要CPU时间跟踪线程
线程之间对共享资源的访问会相互影响,必须解决竟用共享资源的问题
线程太多会导致控制太复杂,最终可能造成很多Bug
前台线程:只有所有的前台线程都结束,应用程序才能结束。默认情况下创建的线程都是前台线程
后台线程:只要所有的前台线程结束,后台线程自动结束。通过Thread.IsBackground设置后台线程。必须在调用Start方法之前设置线程的类型,否则一旦线程运行,将无法改变其类型。
线程池:
减少在创建和销毁线程上所花时间以及系统资源的开销
如不适用线程池,有可能造成系统上创建大量线程而导致消耗完系统内存以及“过度切换”