为什么使用多线程?

1、概念

进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

线程:线程,有时被称为轻量进程,是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行

windows系统中,任务管理器下的每一个应用就是一个进程!

2、进程和线程出现的原因

最早的PC靠人工在纸条上打洞,来表示0和1,CPU在等待缓慢的人工输入过程,输入一次,执行一次,浪费资源。于是出现了批处理操作系统。

批处理操作系统可以在CPU处理数据前,整理好一批你要干什么的输入数据,然后统一放到PC中处理,得到一批处理结果。批处理方式的出现大大的提高了CPU的运行效率。但是假如有A、B两件事情需要计算机处理,A在处理到一半的时候,需要读取外部数据,此时CPU处于空闲状态,既不能处理A也不能处理B。

为了在A进行I/O操作时,让空闲的CPU忙起来可以去处理B,这样也许A读取完外部数据的时候B已经处理完了,于是出现了进程。一个进程对应一个应用程序,各进程之间独立,互不干扰,当进程执行到一半时需要切换进程,前一个进程可以保存当前的运行状态,当CPU空闲时再继续执行完,这就是并发操作。【注意区分并发和并行,并发只是宏观上的,具体区别可以参考我的另一篇文章:https://blog.csdn.net/qq_26012495/article/details/80272831

当程序变的越来越庞大,功能越来越多,逐个串行执行一个进程中的多个子功能越来越不满足需求。比如你在使用QQ的期间,既想跟一个好友视频,又想同时和另一个好友文字聊天,此时两个子任务不能并发执行。因此就引入了线程概念。

进程实现了操作系统不同程序之间的并发,而线程实现了一个程序内部不同子任务之间的并发。

3、多线程的使用场景

假设你的电脑是四核八线程,那么理论上CPU可以同时跑8个线程。现在有ABCDEFGHI九个任务,每一个执行时间为10秒,BCDEFGHI的执行依赖A的结果。如果是传统做法,串行执行完9个任务耗时90秒。如果使用多线程,A执行完后,将CPU释放出来,BCDEFGHI8个任务同时跑,那么最好的情况理论时间为20秒。但同时跑不是越多越好,也要看CPU支持最大线程数,超过这个数量就是排队等待。

猜你喜欢

转载自blog.csdn.net/qq_26012495/article/details/84108161