一起走进多线程(一)
多线程(一)
这是我写的第一篇blog。我是一名刚毕业的本科生,对各方面的知识并不是很了解,希望可以通过写这类型的文章加深印象,同时带给有需要的人去查看
进程与线程
首先先要了解进程与线程的概念,我在学习的过程中,听过最多的一句话就是:进程是资源分配的最小单位,线程是cpu调度的最小单位。对于比较了解线程和进程的人来说这句话其实挺好理解的,但是对于初学者来说这句话还是比较抽象的。我们日常生活中天天都有坐过地铁,对地铁肯定就比较了解。如果我们将进程看成一趟地铁,那么每个地铁车厢就是该进程内的一个线程,如果这个地铁没有得到资源来运行(进程不启动),那么每节车厢都无法运行起来(线程无法工作),这也就说明了线程是依赖进程的。1号车厢到2号车厢是比较容易的(线程间资源交换),但是1号线地铁换乘到二号线地铁就相对麻烦(进程的资源交换)。这样来看应该会清楚一点进程与线程的关系。
同步与异步
同步和异步:同步是指一个或多个任务完成之后,才能开始后续的任务。异步是指一个任务开始后,其他任务不需要管第一个任务是否完成,可以直接开始。今天博主去拉了条宽带,如果我在营业厅交完款后等到安装的师傅一起回来安装,那这就是同步,只有师傅来了我才回家。如果我交完款后自己回来,然后自己做自己的事情,等师傅有空了来帮我安装,这就是异步。
并发与并行
并发有个很类似的知识点就是并行,并发和并行的概念是不一样的,并行指的是在同一时刻能够处理事情的能力,而并行是指一段时间内处理事情的能力。这个也是一个比较抽象的概念,我们可以比喻成我们平时手机充电的场景来理解,假设只有一个充电器,但是却有两个手机需要充电,那这个时候你可以给手机A充电充三分钟,然后给手机B充三分钟,再重新给手机A充三分钟,如此循环,这个就是并发,相当于是一个单核CPU,在任务一与任务二之间不断交换运行,只是由于速度之快让我们无法察觉到。而如果有两个充电器给两台手机充电,那这个时候你可以同时给手机A和手机B充电,这个就是并行,相当于多核CPU,可以在同一时刻同时进行任务一和任务二。从上面可以看出,并发是理论上同时的,实际上是进行快速的切换完成的,而并行是在物理层面上同时运行的。下面用两个图来看看。
了解完了并发和并行是什么之后,我们可以将并发与串行对比,为什么要使用高并发,它存在哪些好处和问题?
高并发编程可以让我们充分的利用CPU资源(这里涉及到多核CPU,可以了解下著名"摩尔定律"),提高用户响应速度,当遇到业务比较复杂时,我们可以将程序分为不同模块利用多线程技术加快反应。
存在的问题主要是:
1.线程之间切换存在一个上下文切换,它会记录下线程上次执行的状态,当线程下次再次执行时,会重新恢复到上次执行的状态并继续执行。
2.线程之间数据共享存在安全问题,如果一个线程A正在对数据C进行操作,此时线程B也在对数据C进行操作,这样就会存在冲突。
以上就是本节内容,如有错漏,欢迎指正提出!