第240天学习打卡(知识点回顾 sleep/wait的区别 并发和并行)
wait/sleep的区别
(1)sleep是Thread的静态方法,wait是Object的方法,任何对象实例都能调用。
(2)sleep不会释放锁,它也不需要占有锁。wait会释放锁,但调用它的前提是当前线程占有锁(即代码要在synchronized中)
(3)它们都可以被interrupted方法中断。
并发与并行
串行模式
串行表示所有任务都一一按先后顺序进行。
串行是一次只能取得一个任务,并执行这个任务。
并行模式
并行意味着可以同时取得多个任务,并同时去执行所得到的这些任务。并行模式相当于将长长的一条队列,划分成了多条短队列,所以并行缩短了任务队列的长度。并行的效率从代码层次上强依赖多进程/多线程代码,从硬件角度上则多依赖于多核CPU。
并发
并发指的是多个程序可以同时运行的现象,更细化的是多进程可以同时运行或者多指令可以同时运行。
要解决大并发问题,通常是将大任务分解成多个小任务,由于操作系统对进程的调度是随机的,所以切分成多个小任务后,可能会从任一小任务处执行,这可能会出现一些现象:
-
可能出现一个小任务执行了多次,还没开始下个任务的情况。这时一般会采用队列或者类似的数据结构来存放各个小任务的成果。
-
可能出现还没准备号第一步就执行第二步的可能。这时一般采用多路复用或异步的方式,比如只有准备好产生了事件通知才执行某个任务。
-
可以多进程/多线程的方式并行执行这些小任务。也可以单进程/单线程执行这些小任务,这时候可能要配合多路复用才能达到较高的效率。
并发:同一时刻多个线程在访问同一个资源,多个线程对一个点
并行:多项工作一起执行,之后再汇总
管程:是一种同步机制,保证同一事件,只有一个线程访问被保护数据或者代码。
B站:

浙公网安备 33010602011771号