线程进程协程-面试

本文探讨了Python中的线程、进程和协程。Python的线程受到全局解释器锁(GIL)限制,无法充分利用多核CPU。进程作为独立的执行单元,可以有多个线程并行运行,但默认不共享内存。协程是一种用户级线程,提供了轻量级的上下文切换,特别适合于异步IO操作,减少了线程切换的开销,提高了效率。
摘要由CSDN通过智能技术生成

线程 进程 协程

我觉得写python 刚开始接触的比较少的 然后后面的话 可能会比较多的

用到这些东西 比如你自己写的 可能用用线程会多一点 因为Python 的就是 索引 API 还是相对来说 比较好用的 就跟什么 pthread 的这种比起来 算是更好用的 但 Python 就是它的线程 是会被全局锁 这个影响的 所以它没办法 利用所有的CPU 资源 始终只能在一个核心上面跑

所以Python 线程跟传统的那些 就是操作系统上的线程 还是有点区别的

然后进程的话 咱们现在各个操作系统上面 就是一个任务的 就是一个核心单元 然后一个进程里面 可以包含多个线程

然后进程 和 进程之间 通常来说 默认是不会共享内存的 ,但是你可以
通过一些系统调用 或者 特殊的参数 , 来做到它们的共享 一块内存

然后线程的默认之间 大家都共享一个相同的全局上下文
然后协程的话 跟前两者都不太一样
它不是一个操作系统API

然后协程次是用户态的一个线程
其实也不能说是 应该说是自己实现的 一个调度机制
因此本质上 你在线程它有个问题 它在做切换的时候 因为线程一旦就在操作系统里面 ,你调度不同的线程的时候

实际上会给每个线程 分配不同的CPU 时间 然后过了一段时间
比如 有两个线程的话 可能一个会休息一段时间 然后CPU 会给另一个线程使用 然后这个时候调度
它就会把所有的那些放在什么 寄存器 然后堆栈上的信息 全部都给它保存下来 就是上下文 然后暂停 然后切换过程 其实就是消耗是比较高的

所以 协程出现其实 主要还是为了解决 频繁切换的问题 它能比如说 你线程可能能跑个 同时跑个 几百个 几千个 然后可能 就花费大量的时间 在切换上面 然后线程本身 运行的时间 能拿到的CPU 的时间是很少的

然后调度化的CPU 时间是很多的 但你如果用协程的话 调度时间是很少的 因为它不需要 它是比线程 更加轻量的一个实现 它就是一个线上里面跑 它本质上 只是把 本质上它是一个单线程应用 然后在上下文切换这块 它这个过程是非常轻量的 当然它也有上下文切换 然后另外它把IO 给异步化了 它比如说你会用什么 它比如说你会用什么 poll epoll 这种技术 把你的网络 IO 或者是文件 IO 然后就绪之后 再把需要的程序 就那个代码给唤醒 就是被它暂停的那些协程给 唤醒 然后但是线程的话

你要做这个事情 因为开销就非常高 然后你协程的话 做这个事情开销就非常低 它出现还是为了 异步 IO , 就能做异步 IO 还有然后减少切换过程中 CPU 消耗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值