基础了解
1. 单CPU中进程只能是并发,多CPU计算机中进程可以并行。
2. 单CPU单核中线程只能并发,单CPU多核中线程可以并行。
3. 无论是并发还是并行,使用者来看,看到的是多进程,多线程。
串行、并发、并行
1. 串行
多个任务执行时,一个任务执行完再执行另一个任务
2. 并发
多个线程在单个核心运行,同一时间一个线程运行,系统不停切换线程,看起来像同时运行,实际上是线程不停切换。
即一个指令 和另一个指令交错执行,操作系统实现这种交错执行的机制称为:上下文切换。
上下文是指操作系统保持跟踪进程或线程运行所需的所有状态信息,如寄存器文件的当前值、主存内容等。
3. 并行
每个线程分配给独立的核心,线程同时运行。
单核CPU多个进程或多个线程内能实现并发(微观上的串行,宏观上的并行);多核CPU线程间可以实现微观上并行。
为什么要加锁
因为在多线程时,系统在不停的切换线程。
比如最常见的场景,你的账户有100块钱,你现在正在给账户里再冲100块。而此时你弟弟偷偷操作你的账户给游戏充50块钱。操作你数据的线程执行到100+100=200时线程中断,此时操作你弟弟数据的线程开始执行,当执行到100-50=50时线程中断,这时候你的线程又开始了,更新数据得到余额为200,你的线程结束任务,你弟弟的线程执行更新数据得到余额为50。你再次更余额发现你的余额为50,充的100块没有了(此时正确的余额应为150)。
死锁
演员方:获取知名演员的锁成功,线程中断等待下次执行;
导演方:获取知名导演的锁成功,线程中断等待下次执行;
演员方:获取知名导演的锁失败,继续等待;
导演方:获取知名演员的锁失败,继续等待;
继续等待。。。。。。。。。。。。。。。。
死锁,最终一个线程会被kill掉
如何申请锁
应按照资源大小的顺序来申请锁,其实就是把资源变成数值来进行比较,列如可以用字符串的hacode值来比较。
未经允许不得转载,欢迎一起沟通交流,如果对你有帮助的话,请一定要抬手点一个赞