在计算机的世界中,你得看到更加广阔的视野,除了你可能了解的多线程,其实还有着多任务、进程、线程这些概念。
深入多线程系列
深入多线程一:理解多线程在于深深地理解了多任务、进程、多线程、线程
深入多线程二:手撕多线程,从会三种创建多线程方式开始:除了常见的两种,你是否了解Callable接口方式?
深入多线程三:初遇并发问题:从一个小故事开始,从一行行代码开始
深入多线程四:停止多线程,你不会还以为是用stop和destroy吧?
深入多线程五:多线程为何要使用休眠?
深入多线程六:线程礼让与强制执行
深入多线程七:纯手绘图解多线程状态+代码示例,就问你怕了吗?
深入多线程八:多线程的优先级
深入多线程九:守护线程
深入多线程十:通过案例体会多线程的不安全
深入多线程十一: 超全synchronized的两种用法:同步方法与同步块
深入多线程十二:什么是死锁?
深入多线程十三:什么是Lock锁,比起synchronized锁有什么区别?
深入多线程十四:经典生产者与消费者问题,本质是线程通信问题
深入多线程十五:管程方式解决生产者与消费者问题
深入多线程十六:信号灯方式解决生产者与消费者问题
深入多线程十七:什么是池?线程池方式解决生产者与消费者问题
多任务
什么是多任务?,从字面意思理解就简单多了,多 字很好理解,不单一个,有两个或两个以上;而 任务 呢?这个也不难,每个进程都可以称作一个任务。
多任务是指用户在同一时间内运行多个进程。
举个生活中的小栗子
当你在上你最喜爱的编程课的时候,你的好兄弟 一颗剽悍的种子 叫你吃鸡,你想啊,难得好兄弟叫你一起开黑,当然是赶紧上号;所以你一边和好兄弟一起打游戏,一边还要看看眼前的老师在敲代码(其实是看老师有没有过来 ),两个任务同时进行。
这节课很快就过去了,快乐的时光总是走得很快很快,下课的你是乎有点恍惚,鸡是吃到了,但是课就有迷了,听得似懂非懂。
不管在以往的生活中,还是上面的比方,你是否会发现,看起来是在做多个任务,但是 本质上我们大脑同一时间依旧只做一件事情。
计算机也是同样如此…
你看计算机能同时运行多个任务,其实是一个错觉。
事实上CPU在某一时刻只会执行一件任务,因为CPU任务调度机制在任务之间的切换速度非常迅速。
进程
除了看上面的多任务,想必你在游荡计算机世界里也没少听说过进程这个概念。
在操作系统中一个任务就是一个进程,也就是说你运行的程序就是进程,你打开的微信、游戏、浏览器等等都是一个个的进程。
那进程就只能干一件事情吗,当然不止,正如现在在使用浏览器写文章的我,写文章是一个页面,打开新页面搜歌又是一个页面,一边听歌一边无休止的写。
CSDN中写文章里的功能只是写这个功能吗,它可以同时在我写的时候一边统计字数和行数,还有当前是几行几列。听歌只有声音吗,它还有歌词呢。
在一个进程中,需要同时运行多个"子任务",我们可以称进程内的这些"子任务"是线程。下面线程中会说到。
一个进程可以有多个线程,如视频中可以同时听到声音,看一帧帧图像,还可以跟着看弹幕和刷弹幕,等等…
进程有一定的生命期,所以是执行程序的一次执行过程,是一个动态概念。是系统资源分配的单位。
说起进程不得不提和进程很类似的 程序
可以简单的理解:程序其本身没有任何运行的含义,是一个静态的概念。
多线程
上面进程举的栗子中,进程每做一件事情,就需要有一个线程。那么一个进程要做一件事情,就需要至少有一个线程。如浏览器这种进程可以有多个线程,多个线程可以同时执行。
多线程执行方式和多进程可以说一样的,是由操作系统在多个线程之间快速切换,短暂交替运行,所以看起来像同时执行一样。
对比普通方法调用&多线程调用
普通方法调用
主线程跑下来调用run方法,run方法执行完,依然回到主线程。
主线程只有一条执行路径
多线程调用
分工协作各走各的,主线程走主线程的,子线程走子线程的,多线程调用多条路径执行,而不像普通调用只执行主线程一条。
多线程可以有多条执行路径,主线程与子线程并行交替执行。
但是在多线程当中,除了每个线程交替运行速度快,让你看起来如同同时执行一样的错觉;是出现在只有一个CPU的情况下。
多核CPU就不再是这种快速交替运行的错觉了,多核CPU是真正实现同时执行多线程。
线程
当看到这里,相信你对线程这个概念已经不再陌生了,多线程很简单指的是执行多条路径,那线程呢?
线程是独立的执行路径。
最后:
为了更好的阅读体验,我把想说的话都放在了下面,嘿嘿。
我是一颗剽悍的种子 把我会的,认真的分享 是我写博客一直不变的信条。
如果你能看到这篇博文,说明咱们还是很有缘的;希望能带给你一些许帮助,创作的不易, 把我文章的知识带走,你的三连留下,点赞,评论,关注,是我最大的动力。
谢谢你这么可爱,还关注我~