基础概念
只要接触线程,就不可避免的说到线程与进程的区别,其实两个根本就不同
什么是进程
进程是指运行中的程序。比如钉钉,微信,抖音,王者等
什么是线程
线程是CPU调度的基本单位,每个线程执行的都是某一个进程的代码的某个片段
所谓进程就是线程的容器,需要线程利用进程中的一些资源,处理一个代码、指令。最终实现进程所预期的结果
进程和线程的区别
- 根本不同:进程是操作系统分配的资源,而线程是CPU调度的基本单位
- 资源方面:同一个进程下的线程共享进程的一些资源。但是线程同时拥有自身的独立存储空间。进程之间的资源通常是独立的。
- 数量不同:进程一般指的就是一个进程。而线程是依附于某个进程的,而且一个进程中至少会有一个线程
- 开销不同:毕竟进程和线程不是一个重量级别的。包括创建、终止、通讯以及切换,线程都比进程要方便很多。
多线程简介
概念
多线程:单个进程中同时运行多个线程
目的
多线程是为了提供CPU的利用率
例如一些网络IO或者磁盘IO需要等待,这时CPU处于空闲状态,就可以让CPU去调度其他线程
局限
- 如果线程数量特别多,CPU在切换线程上下文时,会额外造成很大的消耗
- 安全问题:主要就是因为并发问题造成的数据不一致或者死锁等问题
串行、并行以及并发
串行:就是排队一个个的做,一个做完,后一个才能开始做
并行:并行就是同一时间同时处理
并发:CPU在极短时间内,反复切换执行不同的线程,看着是并行,其实只是CPU高速的切换
并行囊括并发:并行是多CPU,并发是单CPU
同步、异步、阻塞和非阻塞
同步和异步
执行某个功能后,被调用者是否会主动反馈
同步是不会主动反馈的,而异步则会主动反馈
阻塞和非阻塞
执行某个功能后,调用者是否需要一直等待结果的反馈
阻塞是等待,那不需要等待的就是非阻塞
小伙伴们要用心理解下者两个概念的侧重点哦。ok,咱们接下来再举几个例子来理解下这两个概念
- 同步阻塞:比如用锅烧水,水开以后,过不回主动主动通知你,。那,ok。烧水开始后,咱们就一直等待水开吧(效率太低了)
- 同步非阻塞:那咱们还是用锅烧水,虽然水不会主动通知咱们,但是,从开始烧水,到水烧开,中间是需要一段时间的,那咱们可以在这段时间内,去做些其他的事情,比如,开一把王者~但是,咱们也不知道什么时候会烧开水,所以需要是不是的来看看(效率有所提高)
- 异步阻塞:过了一段时间,这老是用锅烧水,太麻烦了,所以家里买了个烧水壶,这次,咱们同壶来烧水。水烧开后,壶是可以主动通知咱们水烧开了的,但是毕竟是新壶,咱们要试下是不是有问题,万一水壶是坏的呢,那咱们第一次烧水呢,就一直等到水壶把水烧开(很少有业务场景,需要使用这种情况)
- 异步非阻塞:经过第一次的测试,是个好水壶,水烧开后,真的会通知咱们哎,那咱们再次用水壶烧水的时候,就去办其他事情就行了(效率最高)
线程的创建
大家去看我写的另一篇博客