Python的线程、进程和协程
进程:一个进程就是一个正在运行的程序,它是计CPU分配资源的最小单位。每个进程都有自己独立的内存空间。能同时执行的进程数最多不超过内核数,也就是每个内核
同一时刻只能执行一个进程。那么多进程就是能【同时】运行多个进程(比如同时听音乐和写代码),这里的【同时】可以指CPU通过极快地在进程间来回切换来实现,所
以即使是单核CPU也能运行多进程。
线程:线程是CPU执行的基本单元。线程存在于进程中。一个进程中至少有一个线程,多个线程能够共享进程的大部分资源,并参与CPU的调度。意味着它能够在进程间进行
切换,实现【并发】,这就是多线程。多线程(比如看视频时既能看到画面也能听到声音)是为了同步完成多项任务、提高资源利用率,从而提高系统的效率。
协程:协程也可以称作微线程,是单一线程。它通过在内部多个子程序(函数)的中断和返回继续执行来实现多任务。比如在一个线程中执行任务A的过程中,可以随时中断,
去执行B任务,B也可能在执行过程中中断再去执行A。协程的调度不来自于CPU,而是完全来自于用户控制(可以理解为用代码控制流程)。它的切换不是线程切换,而是内
部子程序的切换。只要线程越多,协程的性能优势就越明显。协程不需要多线程的锁机制,只需要判断状态即可。不过协程本身无法利用多核CPU,因为它是单一线程。
它们之间的比较:
多进程:占用内存多;通信复杂、数据同步简单;各进程相互独立;创建、销毁及切换复杂,速度慢
多线程:占用内存少;通信简单、数据同步复杂;一个线程挂掉会导致整个进程挂掉;创建、销毁及切换简单,速度快
多协程:占用内存极少;共享单线程的代码段、公有数据;切换的开销最小、速度最快(不用切换到内核态)
Python的多进程可由 multiprocessing 库实现;多线程可由 threading 库实现;协程可由 gevent 、asyncio 或 yield 实现。
Python的线程、进程和协程的更多相关文章
- Python 多线程、进程、协程上手体验
浅谈 Python 多线程.进程.协程上手体验 前言:浅谈 Python 很多人都认为 Python 的多线程是垃圾(GIL 说这锅甩不掉啊~):本章节主要给你体验下 Python 的两个库 Thre ...
- python 38 线程队列与协程
目录 1. 线程队列 1.1 先进先出(FIFO) 1.2 后进先出(LIFO)堆栈 1.3 优先级队列 2. 事件event 3. 协程 4. Greenlet 模块 5. Gevent模块 1. ...
- Python 线程&进程与协程
Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...
- Python档案袋( 进程与协程 )
Python的进程和线程是使用的操作系统的原生线程和进程,其是去调用操作系统的相应接口实现 进程:之间不可直接共享数据,是资源的集合,进程必须有一个线程 线程:基于进程,之间可直接共享数据,可执行,只 ...
- Python多线程、进程、协程
本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...
- Python之线程、进程和协程
python之线程.进程和协程 目录: 引言 一.线程 1.1 普通的多线程 1.2 自定义线程类 1.3 线程锁 1.3.1 未使用锁 1.3.2 普通锁Lock和RLock 1.3.3 信号量(S ...
- Python之路【第七篇】:线程、进程和协程
Python之路[第七篇]:线程.进程和协程 Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. 1 2 3 4 5 6 7 8 9 10 11 12 1 ...
- python运维开发(十一)----线程、进程、协程
内容目录: 线程 基本使用 线程锁 自定义线程池 进程 基本使用 进程锁 进程数据共享 进程池 协程 线程 线程使用的两种方式,一种为我们直接调用thread模块上的方法,另一种我们自定义方式 方式一 ...
- Python 线程和进程和协程总结
Python 线程和进程和协程总结 线程和进程和协程 进程 进程是程序执行时的一个实例,是担当分配系统资源(CPU时间.内存等)的基本单位: 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其 ...
- python并发编程之Queue线程、进程、协程通信(五)
单线程.多线程之间.进程之间.协程之间很多时候需要协同完成工作,这个时候它们需要进行通讯.或者说为了解耦,普遍采用Queue,生产消费模式. 系列文章 python并发编程之threading线程(一 ...
随机推荐
- 决策树——ID3
参考网址:https://www.cnblogs.com/further-further-further/p/9429257.html ID3算法 最优决策树生成 -- coding: utf-8 - ...
- 优雅关闭web服务的方式
优雅关闭web服务 DBHelper, err = gorm.Open("mysql", "root:root@(115.159.59.129:3306)/test?ch ...
- git version info & svn version info map(七)
To generate the same version number as SVN, we can generate the same version number as SVN with the ...
- Vigil 发送多人邮件通知的处理
Vigil 默认是只能发送单人邮件,但是我们有需要发送多个的场景. 解决方法: 大家使用一样的账户登陆 使用邮件组 修改下源码 为了学习下Vigil 的构建,以及原理,我简单通过修改源码的方式(目前支 ...
- CSS块元素、行内元素、行内块元素的转换
一.块元素转行内元素:display:inline 二.行内元素转块元素:display:block div{ display: inline; /*无效 width: 500px; height: ...
- 【loj3045】【ZJOI2019】开关
题目 \(n\)个开关,一开始处于关闭状态,你需要将他们按成\(s\)状态,按成了之后就停止操作; 每次按下开关的i概率为\(\frac{p_i}{\sum_{i=1}^{n}p_i}\) ,问期望步 ...
- e3s10 网络管理
1. host上设置 iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE # https://www.unixtutorial.org/how-t ...
- mysql round()函数以及convert()函数,保留n位小数
mysql> ); +----------------+ | round() | +----------------+ | 2.23 | +----------------+ row in se ...
- 【POJ1068】Parencodings
题目传送门 本题知识点:模拟 这是一道恐怖的括号题.题意稍微理解以下还是可以的. 我们针对样例来理解一下 S.P.W 到底是什么意思: S:( ( ( ( ) ( ) ( ) ) ) ) P: \(P ...
- 基于Docker部署ETCD集群
基于Docker部署ETCD集群 关于ETCD要不要使用TLS? 首先TLS的目的是为了鉴权为了防止别人任意的连接上你的etcd集群.其实意思就是说如果你要放到公网上的ETCD集群,并开放端口,我建议 ...