白话Python 进程,线程,协程
来源:互联网 发布:手机淘宝客户端改差评 编辑:程序博客网 时间:2024/05/16 10:48
批评一个语言,多半是对这个语言不了解的人,夸奖一个语言,多半也是对这个语言不了解的人。--Q.yuhen
Python被人诟病最多的大概就是性能差,在这里讲一下 Python 的多进程,多线程与协程。首先声明这不是教程,看完这篇文章,大概能够对 Python 的多进程与多线程有一定的了解。
进程
进程是正则执行的程序实例。执行程序的过程中,内核会讲程序代码载入虚拟内存,喂程序变量分配空间,建立 bookkeeping 数据结构,来记录与进程有关的信息,比如进程 ID,用户 ID 等
创建进程的时候,内核会为进程分配一定的资源,并在进程存活的时候不断进行调整,比如内存,进程创建的时候会占有一部分内存。进程结束的时候资源会释放出来,来让其他资源使用。
我们可以把进程理解为一种容器,容器内的资源可多可少,但是在容器内的程序只能使用容器内的东西。
线程
UNIX 中,一个进程中可以执行多个线程。多个线程共享进程内的资源。所以可以将线程可以看成是共享同一虚拟内存以及其他属性的进程。
线程相对于进程的优势在于同一进程下的不同线程之间的数据共享更加容易。
Python被诟病最多的大概就是解释器全局锁(GIL)了,GIL 的存在是为了实现 Python 中对于共享资源访问的互斥。而且是非常霸道的解释器级别的互斥。在 GIL 的机制下,一个线程访问解释器之后,其他的线程就需要等待这个线程释放之后才可以访问。这种处理方法在单处理器下面并没有什么问题,单处理器的本质是无法并行的。但是再多处理器下面,这种方法会导致无法利用多核的优势。
Python 的线程调度跟操作系统的进程调度类似,都属于抢占式的调度。一个进程执行了一定时间之后,发出一个信号,操作系统响应这个时钟中断(信号),开始进程调度。而在 Python 中,则通过软件模拟这种中断,来实现线程调度。
协程
协程我们可以看成是一种用户空间的线程,协程是主动的协作是工作,现有的操作系统线程调度是抢占式。两种的区别在于协作是调度,需要之前的任务主动放弃时间片。
总结
在 Python 中,使用协程来做并发是对于系统资源消耗最小,可以最大化的做高并发,但是,需要我们自己来做调度,操作系统不会主动调度任务。
- 白话Python 进程,线程,协程
- 白话Python 进程,线程,协程
- Python 线程、进程、协程
- Python进程、线程、协程
- python进程、线程、协程
- Python的进程、线程、协程
- Python之进程、线程、协程
- Python线程、进程、进程池、协程
- Python学习之路--进程,线程,协程
- Python 中进程、线程、协程、IO复用
- Python基础:进程、线程、协程(1)
- Python基础:进程、线程、协程(2)
- python 进程和线程
- python进程和线程
- python进程&线程
- Python进程和线程
- Python 进程与线程
- python 线程与进程
- 将c++代码转化为lua代码
- 用mako增强django模板,用法像jsp
- Unity学习之巨魔自动寻径
- opencv Python 的配置
- 画个月食css
- 白话Python 进程,线程,协程
- 神器——Chrome开发者工具(一)
- 从一个序列中获取前K大的数的一种方法
- XML文件格式语法及DTD 的语法
- 简单编程(二十五) 继承试题
- 移动页面布局方法
- 程序员之选-移动开发中几个全新的开源工具
- eclipse里就是看不到设备,run config里选手动也只有avd,找不到真机
- android进阶之Monkey测试