2.5 KiB
进程、线程、协程
运行一个软件就是开了一个进程
一个游戏,启动后为一个进程 但一个游戏需要图形渲染,联网 操作能同时运行 所以将其各个部分设计为线程 即一个进程有多个线程
从操作系统层面而言 进程是分配资源的基本单位 进程之间是独立的 一个进程无法访问另一个进程的空间 一个进程运行的失败也不会影响其他进程的运行
一个进程内可以包含多个线程 线程是程序执行的基本单位,是进程中的实际运作单位 线程是操作系统分配处理器时间的基本单元 线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉 协程运行在线程之上 协程的调度完全由用户控制,协程拥有自己的寄存器上下文和栈
并发/并行
【顺序】 你做作业,然后看综艺, 【并发】 你写程序到一半,综艺开始,看完综艺后继续写程序。两件事情都处于启动状态 ?并发把CPU运行划分成若干个时间段,在一个时间段线程代码运行时,其他线程挂起状态 【并行】 你写程序到一半,综艺开始,你一边做作业一边写程序。两件事情同时做
阻塞/非阻塞
等候消息的过程中有没有干其他事 “阻塞”是不能
同步异步
指的是消息通知的机制 主动听消息则为同步(一直等,轮流取)、被动听消息则为异步 异步过程调用发出后,可以继续执行其它操作 通知调用者的三种方式,如下 状态:即监听被调用者的状态(轮询),调用者没隔一段时间检查一次,效率会很低。 通知:当被调用者执行完成后,发出通知告知调用者,无需消耗太多性能。 回调:与通知类似,当被调用者执行完成后,会调用调用者提供的回调函数。
老张要做两件事:烧水,看电视 同步阻塞:老张烧水,等水开,然后看电视 同步非阻塞:老张烧水,去客厅看电视,时不时去看看水开了没有(检查状态) 老张买了把水开之后会提示音的水壶。 异步阻塞:老张烧水,然后坐在旁边等着听那个烧开的提示音。(异步阻塞) 异步非阻塞:老张烧水,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞) 实现异步可以采用多线程技术或则交给另外的进程来处理
如果老张委派小张去烧水,自己看电视,那就是并行