线程——⽤⽣活中的例⼦理解什么是多线程?
每⼀个程序可以包含⾄少⼀个线程,⽽多个线程之间可以“并发”执⾏。
在介绍线程前先来⽤⽣活中最常见的⼀个⼩例⼦来理解什么是线程:
假如你去⼀家餐馆吃饭,那家餐馆只有⼀个服务员,所以这个唯⼀的服务员给你点菜的时候,别的去餐馆吃饭的⼈就得等着。但是如果这个餐馆有多个服务员的话,那么在同⼀时刻就可以给多个去餐馆吃饭的⼈点菜,这⾥举A、B两个服务员,分别接待甲、⼄两个顾客,⽽每个顾客点了不同的三道菜
上⾯例⼦中的餐馆可以理解成⼀个程序,⽽A、B两个服务员可以理解成两个线程,后厨做菜的厨师可以看做是CPU(假设只有⼀个CPU)。CPU是什么?(cpu是处理电脑中所有的数据的硬件,处理数据都需要cpu来运⾏)
从A、B两个服务员同时接待甲、⼄两个顾客这个表象来看线程是“同步”、“并发”执⾏的,但是在厨师做菜的过程中还是有先后之分的,只是厨师会把甲⼄两个顾客点的菜分开来做,做完甲的⼀道菜后⽴刻开始做⼄的⼀道菜,这样不停地切换着做甲⼄两个顾客点的菜。⽽在甲⼄顾客看来他们桌上都有着菜吃,误以为他们的菜是同时做出来的。
⽽计算机⾥的多线程也是如此,cpu会分配给每⼀个线程只有极少的运⾏时间,时间⼀到就交出运⾏权,
所有线程被快速的切换执⾏,因为cpu的执⾏速度⾮常的快,所以在执⾏的过程中我们可以简单的认为这些线程是“并发”执⾏的。
上⾯厨师做菜的原则是:不同的切换顾客们点的菜。假设厨师做菜的原则变了,是单顾客原则:给⼀位顾客做完所有的菜后再给别的顾客做菜,就是说先⼀下⼦把甲点的三道菜全做出来后再去做⼄点的那三道菜,这样的话如果厨师在做甲的某⼀道菜时发现甲点的那道菜的原料没有了,那么⼄的菜就得⼀直等着。
记住我如果是在计算机中,单顾客原则执⾏线程的话,当⼀个恶性的线程运⾏不下去时,计算机就会出现死机的现象,这时候只能重启。
上⾯介绍的厨师做菜的两种原则分别代表着计算机中线程的两种调度形式:抢占式调度和⾮抢占式调度。应⽤中我们⼀般⽤抢占式调度(即厨师的第⼀种做菜原则)。
上⾯就是我对多线程在实际⽣活中的理解,希望能给刚刚接触多线程的朋友⼀些帮助。