单线程运行

多线程运行

System.Threading

main创建主线程

线程分为前台线程和后台线程

名称 说明
前台线程
后台线程
区别 进程会等待所有的前台退出后才退出;后台线程不影响进程的退出
线程 默认为前台线程,只有线程池中的线程是后台线程
如何标识 Thread 的 IsBackground
我们发现前台线程执行完了不等待后台线程执行完控制台程序就结束了

基础

进程和线程

  • 打开任务管理器可以看到正在运行的进程

进程是什么

  • 对于用户来说:进程是程序的一次动态执行过程
  • 对于操作系统来说:进程是操作系统分配资源的基本单位,也是最小单位

为什么会有进程?

  • CPU一次只能处理一个程序,CPU速度很快,而内存很慢,所以CPU会有大量的时间都是空闲的。而CPU又是很昂贵的,为了解决浪费CPU的情况,就出现了中断处理,将程序分成一小片一小片的,这个进程执行一点,那个进程执行一点。虽然在内部进程的执行是一段一段的,但是CPU的速度很快的(速度都是纳秒级别的),所以我们是感受不到进程执行过程中的停顿的。

  • 在操作系统中引入进程,是为了实现多个程序的并发执行。传统的程序不能与其他程序并发执行,只有在为之创建进程后,才能与其他程序(进程)并发执行。

线程

线程(Thread)是进程中的基本执行单元,是操作系统分配CPU时间的基本单位,一个进程可以包含若干个线程,在进程入口执行的第一个线程被视为这个进程的主线程。在.NET应用程序中,都是以Main()方法作为入口的,当调用此方法时系统就会自动创建一个主线程。

多线程

  • 多线程的优点

    可以同时完成多个任务;可以使程序的响应速度更快;可以让占用大量处理时间的任务或当前没有进行处理的任务定期将处理时间让给别的任务;可以随时停止任务;可以设置每个任务的优先级以优化程序性能。

  • 多线程的缺点

    • 线程也是程序,所以线程需要占用内存,线程越多,占用内存也越多。
    • 多线程需要协调和管理,所以需要占用CPU时间以便跟踪线程。
    • 线程之间对共享资源的访问会相互影响,必须解决争用共享资源的问题。
    • 线程太多会导致控制太复杂,最终可能造成很多程序缺陷。