Python gevent学习(一) 进程,线程,协程
来源:互联网 发布:关于c语言的书 编辑:程序博客网 时间:2024/06/05 20:49
每次一想到进程, 线程,协程,只是有一个模模糊糊的概念,所以这次打算总结下这三者的区别与应用场景,加深下印象(没耐心,直接看最后面的)。
- 操作系统角度:
调度分配
进程:进程是操作系统分配资源的一个独立单位。创建一个进程开销较大
线程:线程是操作系统调度分派的基本单位。一个进程可以创建多个线程,所以开销较小。- 资源空间
进程:有自己独立的空间,因此进程间切换开销比线程大,但是进程间独立性较高,除了共享的全局变量外,不允许其他进程访问当前进程空间
线程:在同一进程间的多线程共享资源,从而线程间切换比较小,但是独立性差。 注:不管是进程间或者是线程间切换都是有操作系统内核完成的,但是协程间的调度完全由用户来控制。
- 通信:
- 进程间不共享任何状态,所以进程间通讯效率比较低(但是还是能够通过信号量,管道,时间等方式进行通讯)某一进程崩溃也不会影响其他无关进程。
线程间共享变量,所以通讯效率比较高,但是对于变量的访问需要锁。
协程:
因为目前主要是数据采集涉及到了IO瓶颈问题,而协程就是能够暂时性的解决IO问题。为什么协程就能够比线程较高的解决IO问题呢? 主要是因为线程间切换是要通过系统内核来操作,但是协程的话任务间的切换只需要保存每个任务的之前的状态,就可以进行下一个协程,协程间的切换如同调用栈(为什么会是栈,因为协程是非抢占式的,就是按照顺序执行的,线程是抢占式的)里面的东西一样,所以切换成本大大降低。
简单几句话
进程
进程是正在运行程序的实例。
优点:具有独立地址空间,是操作系统资源分配的基本单位。
缺点:创建销毁成本高
线程:
线程是程序执行的最小单位。
多线程优点:提高程序的并发性(但是IO密集型会导致线程间阻塞,cpu利用率不高)
缺点线程开销比进程低,但切换成本高,线程间同步变成复杂。
协程:
特点:协程可以认为是一种用户态的线程, 切换成本较低,控制权在程序员手上。
缺点:协程不陷入内核的情况进行上下文切换,没有同步问题,但需要手动切换。而且协程间是基本上没有同步通讯。
使用场景:
根据进程,线程,协程的特点进行使用。
多进程一般适用于:进程间需要独立
多线程一般适用于:线程间需要通讯,并且并发量要求比较高
协程:适用于IO密集,并且非抢占式。
以上纯属个人理解,望大牛不喜轻喷。
- Python gevent学习(一) 进程,线程,协程
- 协程-gevent(python版)
- [python]gevent学习(1)
- python 并发编程(多进程、多线程、gevent)
- 单进程gevent版-TCP服务器(python 版)
- Python gevent协程
- Python - 协程 - Gevent - yield
- python学习笔记(3)-进程和线程(一)-多进程
- python -- 进程与线程 (一)
- [python]gevent学习(3)-snmp
- Python学习之路--进程,线程,协程
- python# 进程/线程/协程 # IO:同步/异步/阻塞/非阻塞 # greenlet gevent # 事件驱动与异步IO # Select\Poll\Epoll异步IO 以及selector
- Python学习----进程和线程
- python进程和线程学习
- Python 线程、进程、协程
- Python进程、线程、协程
- python进程、线程、协程
- Python学习笔记(14)-Python中的进程和线程
- 迭代和递归的区别总结
- DBflow的使用
- git学习-分支介绍
- 三.Git的使用(本地操作)
- java学习之ClassLoader
- Python gevent学习(一) 进程,线程,协程
- 【备忘】【C7】《Java语言程序设计-进阶篇(原书第8版)》PDF 下载
- dagger的使用
- html
- 四.Git管理远程仓库
- 使用liblas实现点云las格式转pcd格式
- iOS多线程开发笔记
- 数据类型转换与负数的存储
- 五.Github Pages 搭建网站