什么是进程?
就是为了形容执行中的程序的一种称呼
它是操作系统中资源分配的最小单位
进程之间是数据隔离的,占用操作系统资源相对多
独立存在的
谈谈对并发的理解?
同时有多个任务需要执行但是资源有限
所以我们会利用一些手段:多进程多线程协程来完成任务
来提高用户体验,达到多个任务在同一个时间段内同时执行的效果
什么是线程?
轻量级进程,直接被CPu调用,不能独立存在的轻量级进程
同一进程中的多个线程之间数据共享
你对GIL的理解?
全局解释器锁,是用来锁线程的,Cpython解释器提供的
导致了同一时刻只能有一个线程访问Cpu
是一个历史遗留问题
你对异步非阻塞的理解?
异步:一个任务的执行不需要等待另个任务的结束
非阻塞: 没有阻塞
设置非阻塞(socket对象调用setblocking(False))
什么是协程?
协程是用户级的,对操作系统不可见
使用户为了提高一条线程对CPU的利用率才出现的概念
协程能实现一条线程上的多个任务相互切换
为了提高效率,用户可以控制协程在一个任务中遇到IO就切换另一个任务
协程和线程比起来?
协程不存在数据不安全问题
协程不能处分利用多核
但是线程在Cpython解释器下实际上也不能利用多核
所以相对来说,协程实际上在python中是更好的工具
什么是IO多路复用?
操作系统提供的代理,监听网络对象的IO操作
常见的IO多路复用机制?
select:轮询的方式获取每个对象的状态
poll:底层数据结构与select不同,进行了优化,能够储存更多的对象,也是轮询的方式
epoll:不采用轮询的方式来获取每个对象的状态,而是采用回调函数的方式,
所以wait for data 阶段 一收到数据就可以立即通知应用程序
提高了效率,也减轻了操作系统的负担