Python并发编程有三种方式:

1、多线程Thread(threading)(读音:思来d,丁)、多进程Process(multiprocessing)、多协程Coroutine(asyncio)

(1)一个进程中科院启动n个线程

(2)一个线程中可以启动n个协程

(3)Thread

优点:  相比进程,更轻量级、占用资源少

缺点:  相比集成,多线程只能并发执行,不能利用多cpu(gIL)

相比协程:启动数目有限制,占用内存资源,有 线程切换

适用于:io密集型计算、同时运行任务数目不多

(4)coroutine(asyncio)协程

优点:内存开销最少,启动协程数量最多

缺点:支持的库有限制,代码实现复杂

比如:requests就不能

适用:io密集型计算,需要超多任务运行,但有现成库支持的场景

(5)Process(multiprocessing)

优点: 可以利用多核cpu并行运算

缺点:占用资源最多,可启动数目比线程少

适用于:cpu密集型计算

(6)选择性

2、CPU密集型(CPU-bound) :

CPU密集型也叫计算密集型,是指I/O在很短的时间就可以完成,CPU需要大量的计算和处理,特点是CPU占用率相当高

例如:压缩解压缩、加密解密、正则表达式搜索

3、Io密集型(I/o bound) :

IO密集型指的是系统运作大部分的状况是CPU在等/O(硬盘/内存)的读/写操作,CPU占用率仍然较低。

例如:例如:文件处理程序、网络爬虫程序读写数据库程序

4 、

=============================================

二、

1、Python速度慢的两大原因

答:背景:相比C/C++/JAVA, Python确实慢,在一些特殊场景下,Python比C++慢100~200倍

由于速度慢的原因,很多公司的基础架构代码依然用C/C++开发
比如各大公司阿里/腾讯/快手的推荐引擎搜索引擎、存储引擎等底层对性能要求高的模块

原因:

(1)动态类型语言,边解释,边运行

(2)GIL无法利用多核cpu并发执行

2、GIL是什么?

全局解释器锁(英语:Global Interpreter Lock,缩写GIL)
是计算机程序设计语言解释器用于同步线程的一种机制,它使得任何时刻仅有一个线程在执行。
即便在多核心处理器上,使用GIL的解释器也只允许同一时间执行一个线程。

3、为什么有GIL这个东西?

主要是:为了解决多线程之间数据完整性和状态同步问题

Python设计初期,为了规避并发问题引入了GIL,现在想去除却去不掉了!

4、怎样规避GIL带来的限制?

1、多线程threading机制依然是有用的,用于IO密集型计算
因为在I/0(read,write,send,recv,etc.)期间,线程会释放GIL,实现CPU和IO的并行因此多线程用于IO密集型计算依然可以大幅提升速度
但是多线程用于CPU密集型计算时,只会更加拖慢速度

========================================

软件测试肖sir__多线程、多进程、多协程的更多相关文章

  1. web服务-2、四种方法实现并发服务器-多线程,多进程,协程,(单进程-单线程-非堵塞)

    知识点:1.使用多线程,多进程,协程完成web并发服务器 2.单进程-单线程-非堵塞也可以实现并发服务器 1.多进程和协程的代码在下面注释掉的部分,我把三种写在一起了 import socket im ...

  2. Python多线程、多进程和协程的实例讲解

    线程.进程和协程是什么 线程.进程和协程的详细概念解释和原理剖析不是本文的重点,本文重点讲述在Python中怎样实际使用这三种东西 参考: 进程.线程.协程之概念理解 进程(Process)是计算机中 ...

  3. 多线程、多进程、协程、IO多路复用请求百度

    最近学习了多线程.多进程.协程以及IO多路复用,那么对于爬取数据来说,这几个方式哪个最快呢,今天就来稍微测试一下 普通方式请求百度5次 import socket import time import ...

  4. 物无定味适口者珍,Python3并发场景(CPU密集/IO密集)任务的并发方式的场景抉择(多线程threading/多进程multiprocessing/协程asyncio)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_221 一般情况下,大家对Python原生的并发/并行工作方式:进程.线程和协程的关系与区别都能讲清楚.甚至具体的对象名称.内置方法 ...

  5. 进击的Python【第十章】:Python的socket高级应用(多进程,协程与异步)

    Python的socket高级应用(多进程,协程与异步)

  6. windows下多进程加协程并发模式

    好久没更新博客了.正好最近要整理一下最近这段时间做过的项目以及学习python的一些心得.如标题所示,今天就来说说windows下多进程加协程并发模式.其实网上还是蛮多在linux下的多进程加协程并发 ...

  7. 都2019年了,Java为什么还在坚持多线程不选择协程?

    都2019年了,Java为什么还在坚持多线程不选择协程? - 知乎 https://www.zhihu.com/question/332042250/answer/734051666

  8. 多线程、多进程、协程、缓存(memcache、redis)

    本节内容: 线程: a:基本的使用: 创建线程: 1:方法 import threading def f1(x): print(x) if __name__=='__main__': t=thread ...

  9. python学习之路-11 多线程、多进程、协程

    python内置队列模块 queue queue的四种队列 q = queue.Queue() # 先进先出队列 q = queue.LifoQueue() # 后进先出队列 q = queue.Pr ...

  10. python多进程并发和多线程并发和协程

    为什么需要并发编程? 如果程序中包含I/O操作,程序会有很高的延迟,CPU会处于等待状态,这样会浪费系统资源,浪费时间 1.Python的并发编程分为多进程并发和多线程并发 多进程并发:运行多个独立的 ...

随机推荐

  1. [Unity]Update()与FixedUpdate()

    Update()介绍 首先我们从官方文档的介绍了解: MonoBehaviour.Update() Description Update is called every frame, if the M ...

  2. py教学之字典

    字典简介 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示: ...

  3. Python爬取cnnvd

    利用python监控CNNVD上面的新出漏洞实例,可以配合邮箱推送获取最新的漏洞情报 爬取cnnvd import requests from bs4 import BeautifulSoup imp ...

  4. Node.js+Koa2+TypeScript技术概览

    最近几年一直使用Node.js作为后端服务平台,通过Koa2框架中间件快速搭建Web服务,但是使用JavaScript开发大型后端服务时会使程序变得难以维护,继而使用TypeScript语言开发,使编 ...

  5. RA-Depth: Resolution Adaptive Self-Supervised Monocular Depth Estimation

    注:刚入门depth estimation,这也是以后的主要研究方向,欢迎同一个方向的加入QQ群(602708168)交流. 1. 论文简介 论文题目:RA-Depth: Resolution Ada ...

  6. C#DataTable(转List /JSON/字典 互转)

    1 #region 数据表DataTable 转键值对集合 List 2 /// <summary> 3 /// 数据表DataTable 转键值对集合 List 4 /// 把DataT ...

  7. 微信小程序数字转中文wxs

    场景: 传入数字,转换成天数,比如:index = 1 转换后则为 一,在页面中的应用就是<view>第{{index}}天</view>,转为第几天. <view> ...

  8. echarts的颜色渐变

    官网文档解释 // 线性渐变,前四个参数分别是 x0, y0, x2, y2, //范围从 0 - 1,相当于在图形包围盒中的百分比, //如果 global 为 `true`,则该四个值是绝对的像素 ...

  9. layui 手机端时间不能滑动问题

    // 滑动问题 .laydate-time-list ol{overflow-x: hidden !important ;overflow-y: auto !important ;} //去除秒的显示 ...

  10. KingbaseES DBLink 介绍

    DBLink 扩展插件功能与 Kingbase_FDW 类似,用于远程访问KingbaseES 数据库.相比于Kingbase_FDW,DBLink 功能更强大,可以执行DML,还可以通过 begin ...