◆
同步和异步
◆
同步就好比打电话,通信双方,你一句我一句,一句话得不到回应就会一直问:“喂?喂?可以听到么?是不是信号不好呀”。 异步就像发短信,发完短信我就去干点别的,看个视频、玩个游戏、干啥都行,等对方给我回信息了我再来处理短信(也可以不处理)。
◆
线程和进程
◆
进程的概念听起来很抽象,不大好理解。但是我知道你肯定认识这个东西,请看下图:
上方这些占用我的电脑CPU、内存、磁盘、网络的这些就都是进程。
那什么是线程呢?线程可以理解成是在进程中独立运行的子任务。比如微信运行时就会有很多的子任务在同时运行。比如,视频线程、下载线程、表情线程、语言线程等。简单来说,一组线程互相协作完成某一个程序的一些功能供我们使用。
◆
并发和并行
◆
◆
临界资源
◆
临界资源:是一次仅允许一个进程使用的共享资源。例如公共电话,一次只能一个人使用
临界区:每个进程中访问临界资源的那段代码叫做临界区。例如使用公共电话的人
◆
阻塞
◆
线程在试图执行代码前,会试图获取临界区的锁,如果得不到,线程就会被挂起等待,从而形成阻塞。
◆
死锁
◆
多个线程循环等待它方占有的资源而无限期地僵持下去的局面。例如两个人想要使用公共电话打电话,结果一个人抢到了话筒,一个人拨了号。两个人谁也不让谁,就会无休止地等下去从而引起死锁。
死锁产生的四大必要因素:
当以上四个条件都满足时才会发生死锁,所以想要避免死锁只要能破坏上方四个条件的任意一个都可以。
◆
饥饿
◆
线程因为优先级或其他原因始终无法获取到临界资源。例如A在使用公用电话在打电话,B来了之后在后面排队。之后C来了,一看认识A,好么,哥们你打完我来。然后D来了,他认识C。。。就这样B一直等待从而引起饥饿。
◆
活锁
◆
多个相互协作的线程为了彼此间的响应而相互礼让,使得没有一个线程能够继续前进,那么就发生了活锁。例如两个人在一个很宅的胡同里。一次只能并排过两个人。两人比较礼貌,都要给对方让路。 结果一起要么让到左边,要么让到右边,结果仍然是谁也过不去从而引起的活锁。
◆
线程的并发级别
◆