You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
2.5 KiB

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