1.初始多线程

202 阅读5分钟

1.技术出现的背景是?

想要了解什么是多线程就需要了解进程和线程的概念?

  • 进程:进程是计算机中关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,进程间是相互独立存在的。
  • 线程: 是操作系统能够进行运算调度的最小单位,包含在进程之中,是进程中的实际运作单位,一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程执行不同的任务。同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等。但同一进程中多个线程有各自的调用栈,自己的寄存器环境,自己的线程本地存储

Image.png

说完线程和进程再来聊一聊并行和并发的区别?

  • 并行:是计算机系统中能同时执行两个或多个任务的一种计算方法 ,这些任务的执行在时间上是重叠的
  • 并发:在操作系统中,指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行

Image.png Image.png

image.png

总结一下并行是计算机同时执行多个任务的一种能力,并发实际上是操作系统将cpu使用时间划分成很小的时间单元,在不同的时间单元内执行不同任务的能力,但是在某一时刻内,只有一个任务在执行,但是由于cpu切换时间非常短,所以给人的感觉好像是同时在执行

  • 单线程:单线程程序在执行时,所走的程序路径按照连续的顺序排下来,前面的处理好,后面的才会执行。比如我们去食堂吃饭,只有前一个人吃完后面的人才能进去吃,这就是单线程程序,很明显这种方式效率太低。
  • 多线程:多线程就是把操作系统中的并发执行机制原理运用于同一程序中,把一个程序划分为若干个子任务,多个子任务并发执行,每个任务就是一个线程,这就是多线程程序。比如 同时进入食堂,同时吃饭,效率较高

多线程的出现是为了提供cpu的资源,提高cpu使用率。假设用户现在进行一个比较耗时的下载操作,如果是单线程的情况下,当我们点击下载后就只能干瞪眼傻等,等这个下载结束后才能进行其它操作。这无疑严重降低了cpu的使用率。在多线程的情况下,我们点击下载后就可以做其它事情,比如听歌看电影等等。多线程的产生就是基于此

在知乎上看到了一个很形象的比喻

  1. 单进程单线程:一个人在一个桌子上吃菜。
  2. 单进程多线程:多个人在同一个桌子上一起吃菜。
  3. 多进程单线程:多个人每个人在自己的桌子上吃菜。

多线程的问题是多个人同时吃一道菜的时候容易发生争抢,例如两个人同时夹一个菜,一个人刚伸出筷子,结果伸到的时候已经被夹走菜了。。。此时就必须等一个人夹一口之后,在还给另外一个人夹菜,也就是说资源共享就会发生冲突争抢

阻塞和非阻塞:阻塞和非阻塞通常用来形容多线程间的相互影响,比如一个线程占有了临界区资源,那么其他线程如果需要使用该资源就必须等待该线程对资源的释放,会导致其他线程的挂起,这种情况我们叫做阻塞。而非阻塞恰好相反。

临界区:临界区用来表示一种公共资源或者说是共享数据,可被多个线程使用,但是每个线程使用时,一旦临界区的资源被占用,那么其他线程必须等待。

2.技术解决了什么问题?

多线程解决了什么问题呢,前文中也有涉及到。在多线程程序中,多个线程被并发的执行以提供程序的效率,cpu不会因为某个线程需要等待资源而进入空闲状态,提高了cpu的使用率。比如,我们读取一个文件需要5s,处理一个文件需要3s在我们操作文件时cpu大部分时间都是空闲的(等待磁盘读取文件),利用多线程技术我们可以让cpu做一些别的事情,这就提高了cpu的使用率。

3.技术的有什么优势和劣势?

  • 优势:
  1. 占用大量处理时间的任务使用多线程可以提高cpu利用率,即占用大量处理时间的任务可以定期将处理器时间让给其他任务,提高了cpu利用率
  2. 多线程技术可使程序相应速度更快
  3. 多线程可以分别设置优先级以优化性能
  • 劣势:
  1. 如果有大量的线程会影响性能,因为操作系统需要在他们之间来回切换。时间片是CPU分配给各线程执行的时间,因为间隔非常短,所以CPU通过快速的切换线程让用户感觉是同时执行的,时间片一般是几十毫秒。而每次切换操作系统都要保存当前线程的状态,方便切回会该线程时恢复之前的状态,而这个切换非常耗性能。过于频繁反而无法发挥多线程的优势。
  2. 更多的线程会占用更多的内存空间
  3. 多个线程会带来资源共享的问题

4.技术组成部分和关键点是什么?

20190716163159999.png