NET多线程1 - 基本认识

164 阅读3分钟

线程定义

  1. 线程是进程内部的一个执行单元
  2. 线程是系统独立调度和分配的基本单位
  3. 每个进程,至少有一个主线程,由系统自动创建

为什么使用多线程

例 1

界面上点击某个按钮后,需要执行一个非常耗时的操作,如果不使用多线程,就只能傻等操作返回。

使用多线程,点击按钮之后,开辟1个新线程后台去执行这个耗时操作,前台界面继续执行其他菜单目录,录入数据等。

例 2

有个操作,1个线程需要20分钟完成,现在的多核cpu,可以真正同一时刻运行多个线程。

假设是双核cpu,同一时刻运行2个线程,操作就只需要10分钟可以完成。

多线程优点

  1. 提高应用程序执行效率。【例1】
  2. 提高cpu利用率。【例2】

多线程缺点

  1. 占用内存,耗费cpu时间进行跟踪。
  2. 访问共享资源相互影响,程式代码控制难度大。

问自己

  1. 新开辟的线程,肯定需要内存吧?
  2. 多个线程之间需要切换吧?切换需要占用cpu来计算吧?
  3. 多个线程的执行顺序,是无法确定的,当他们都需要访问相同的变量、文件时,需要对这个变量、文件做同步处理吧?

线程的数量

理想的,线程数量 = cpu核心数量

超线程

利用硬件指令,把1个物理cpu核心内部的2个逻辑内核,模拟成2个物理核心。

通俗点就是1个cpu变2个cpu了,这时候,同一时刻,就可以2个线程真正的同时运行。

多核处理器

就是cpu本身,就有2个或多个物理核心(比如:双核,四核)。硬件本身就是可以同一时刻跑2个或多个线程。同一时刻,1个cpu核心只会让1个线程使用。

如果有多个线程,那肯定需要切换,这个切换也是必要的,不然就会导致傻等的问题。 这里,我们只要明白,一个时刻,1个cpu核心,只会让1个线程使用。

线程的执行顺序

多个线程,执行顺序,是无法确定的。

这个问题 主要是操作系统Windows是抢占式管理,谁抢到cpu,cpu就帮你干活。

不过cpu计算非常的快,这次没抢到cpu,那就等下次呗,操作系统Windows也不会让线程饿死的。

理解同一时刻

多个线程同时运行并不一定是同一时刻!

1个cpu核心,同一时刻,只会有一个线程运行。

多核心cpu,超线程,同一时刻,可以真正同时运行多个线程。

同时,同一时刻

我们通常认为的,电脑同时运行多个程序,同时执行多个任务。

这个【同时】并不是真正意义的【同一时刻】。

多个程序,多个任务是否同一时刻运行,要看硬件cpu的处理能力。

cpu计算非常的快,多个线程轮询cpu执行各自的操作。线程切换频率很快,我们的感觉是多个线程同时运行。

要想多个线程【同一时刻】运行,那就需要多个cpu核心。

比如,采用超线程,多核心处理器,同一时刻可以真正运行,2个线程,8个线程,16个线程等。

完。