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密集型计算时,只会更加拖慢速度

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

最新文章

  1. RabbitMQ + PHP (一)入门与安装
  2. The currently selected variant "arm-debug" uses split APKs, but none of the 1 split apks are compatible with the current device with density "213" and ABIs "x86".
  3. Gson--Gson解析=等号出现乱码?
  4. ActivityGroup、TabHost之子页面不刷新——getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法
  5. CentOS 7系统挂载NTFS分区的移动硬盘(转载及体验 CentOS6.5系统挂载NTFS分区的移动硬盘)
  6. sns社区架构设计案例分享(二)
  7. mysql以ROOT权限提权方法
  8. Blocks_DP&&矩阵快速幂
  9. win7 共享的问题,"您可能没有权限使用网络资源"的解决办法
  10. Microsoft SQL2000 错误代码 (@@error)
  11. (二)ROS系统架构及概念 ROS Architecture and Concepts 以Kinetic为主更新 附课件PPT
  12. 2017/2/14:JSTL标签与el表达式
  13. Ubuntu 14.04 安装 DevStack与遇到的的问题记录
  14. tcpdump-根据IP查看程序与服务都用了哪些端口
  15. key寻址算法
  16. 【POJ2420】A star not a tree?
  17. maven部署Tomcat(出现空白页面,最终解决)
  18. Luogu-3705 [SDOI2017]新生舞会
  19. vue组件 $children,$refs,$parent的使用
  20. pl/sql的控制结构,分支、循环、控制

热门文章

  1. 物以类聚人以群分,通过GensimLda文本聚类构建人工智能个性化推荐系统(Python3.10)
  2. Python网络爬虫get方法出现乱码的解决的三种方案
  3. P8855 [POI2002]商务旅行
  4. Linux 驱动像单片机一样读取一帧dmx512串口数据
  5. 初探富文本之OT协同实例
  6. OpenMP 线程同步 Construct 实现原理以及源码分析(上)
  7. 新版Bing 搜索后台的.NET 技术栈
  8. Vue3源码阅读梳理
  9. Selenium中对于颜色的处理及拓展
  10. RestTemplate的超全讲解(全)转