时间: 2月26日22点markdown
地点: 永旺商场多线程
背景: 隔壁空地上的商场终于建成了,大大小小的商店纷纷入驻,大A发现了商机,想开一家奶茶店,话很少说,交钱干。ide
大A是个踏实肯干的人,开店之初啊,也没想那么多,就想踏踏实实挣点小钱,因而乎把本身的这些想法告诉了设计师,设计师一想,好办:oop
齐活,说干就干,不到一个月店面就装修好了,因而乎按照设计师的规划招了4个小姐姐。性能
2020年2月26日,随着一顿鞭炮声大A的奶茶店终于开张了,陆陆续续来了不少顾客...idea
咱们把商场当作一个系统,那么咱们的奶茶店就是一个进程,固然咱们的商场还有 H&M啊、
优衣库啊,你懂的!这些店之间互不干扰,各自开门各自作生意,互不影响...
复制代码
开业之初效果:spa
这个店(进程)就这样红红火火开起来了...线程
系统(System):商场
进程(Process):奶茶店
线程(Thread):员工的平常工做
进程是系统中正在运行的一个应用程序,每一个进程之间是独立的
(你卖你的奶茶,我卖个人衣服,YES!)
复制代码
奶茶店天天都有不少活:设计
天天咱们奶茶店都要开门,只有开门了员工才能进来,才能干活,这是核心门槛(主线程)
,全部员工干活才让奶茶店运营起来(线程是进程的基本执行单元)
。code
线程(thread):进程的基本执行单元,一个进程的全部任务都在线程中执行,
进程要想执行任务必需要有线程,程序会默认开启一条线程,这条线程叫‘主线程’
复制代码
大A仍是很踏实肯干的,天天卖命的吆喝,生意也是愈来愈好,这一每天的,人都排到马路对面了...
期间不断的有人跟大A说:老板啊,多招点人撒,搞两个收银的,排两个队,这大热天的咱们等的也是很难受啊,有的人等不了就去别家买了,你也损失不是...
大A一想,也是啊,那么就试试,又找了设计师,此次相对比较简单,就是加台收银机嘛,你再额外招个小姐姐就行了,因而乎店门关了两周,终于算是装修好了: 艾玛果真好多了,至少如今顾客都能进屋吹空调了,哈哈,惟独就多招了一个收银小姐姐而已,这买卖划算啊...
因为天天的原料有限,并且不一样的品种的奶茶数量也是有限的,常常小B刚派了一杯🍑🍑🍑口味的,小C也派了一杯🍑🍑🍑口味的,后台一看,MMP
因而乎,后台就给两位小姐姐提了个idea,大家卖奶茶的时候提早问一下(加锁)
我这边还能作几杯,能作就走单,不能就告知客户,哦了,屌屌的。
可是有的顾客又提问题了,如今却是好排队了,可是买了也没地方坐了,原来新的队列占了原来圆桌的区域,致使圆桌变少了,没办法嘛,商场就给我分配这么大的空间,空间有限呀,只能少两张桌子了,也是为了你们更快的喝上奶茶嘛,坐哪重要吗?哈哈!
开始几天搞促销,大伙热热烈烈的,几天以后小姐姐B就开始抱怨了,如今两个收银员一块儿派单,仍是咱们三我的来配料。真的是...
有一天后台调配师小C和收银小B闹矛盾了,讲道理是不可能讲道理了:
老板一听,你俩玩起
死锁
来了,我这店还开个锤子哦~
经过上面种种,咱们分析多线程的优缺点得出:
多线程优势
- 开辟线程能提升程序执行效率(派单更快了)
- 能适当提升资源利用率CPU,内存(后台均可以忙活起来)
- 线程上的任务执行完后,线程会自动销毁(某一队没人了,收银员小姐姐就开始刷抖音了)
多线程缺点
- 开辟线程须要占用必定的内存空间(圆桌区域变小了)
- 程序更加复杂,线程间通信,多线程数据共享(同时派单问题,加锁问题)
- 开启大量线程,会占用大量内存空间,下降程序性能(小姐姐表示好累)
- 线程越多CPU在线程上的开销越大(小姐姐不够用了,须要更多的小姐姐来配合)
复制代码
至此咱们关于进程和线程的故事讲的差很少了,你弄明白了吗,下面咱们补充一些其余的知识点。
话很少说,图示很详细:
后面我会针对GCD以及各类锁来详述多线程的原理和实线,敬请期待,写的很差,但愿多多赐教和点评,谢谢。