既然有GIL锁,为什么还使用多线程?

CPU运行程序的时候,从内存中读取数据块,但是内存不支持断电保存的功能。一旦断电,数据就会丢失。所以需要把数据存到物理磁盘中,所以CPU运行程序的时候需要先从磁盘中读出来,放到内存中,CPU才能取到数据。磁盘的读取比较慢,CPU在物理磁盘中取数据时,需要等待磁盘准备数据,什么时候数据准备好了,CPU才能使用数据,这样造成了资源的浪费,写数据是一样的,当CPU往磁盘写入数据的时候就会等待,等数据存入到磁盘中了CPU才能执行别的程序。造成了CPU空闲阻塞状态,如果有大量的IO操作,就会频繁出现阻塞行为,那么GIL锁就会自动被释放,这样就会保证多线程同时运行的效果,虽然不是全部的。一跳主线运行的时候,大概运行了100条指令的时候就会释放GIL锁,或者出现阻塞的时候就会释放GIL锁。

多线程的应用场景:

CPU密集型的程序,整个程序运行中过程中不需要等待任何的IO操作,只有大量的CPU进行运算,这种线程不合适,进程实现更加合适,因为每个进程中都有一个线程,独享一个GIL锁,这样就不涉及抢的问题了,各自运行各自的程序。所以进程实现更加合适、

协程的使用场景:

协程内部是线程内容划分的更小的单位,协程跟操作系统没有关系,只是程序员自己划分出来的,类似于一个线程中的一跳主线中的两个函数交替运行,达到同时运行的效果,用yield关键字可以让函数暂停下来,next()函数可以让程序继续运行,互相配合达到了协程的效果,上下文切换快速,不需要竞争资源,一条主线。

转载于:https://www.cnblogs.com/zhangshuyang/p/8064899.html

多线程,多进程使用场景相关推荐

  1. Python多线程多进程应用场景

    IO密集型: 推荐使用多线程 CPU密集型: 推荐使用多进程 为什么Python多线程在CPU密集型中是鸡肋?通过一段代码来测试 单线程执行从1亿递减到0 import datetimedef run ...

  2. python适用场景_你真的了解Python吗?什么场景使用多线程,什么场景使用多进程?...

    引言 涉及并发的场景,大家想到使用多线程或多进程解决并发问题; 一般情况下,解决多并发场景问题,多数语言采用多线程编程模式(线程是轻量级的进程,共用一份进程空间). 也同样适用于Python多并发处理 ...

  3. Python多进程和多线程的使用场景

    Python多进程适用的场景:计算密集型(CPU密集型)任务 Python多线程适用的场景:IO密集型任务 计算密集型任务一般指需要做大量的逻辑运算,比如上亿次的加减乘除,使用多核CPU可以并发提高计 ...

  4. 多进程和多线程的使用场景

    多进程和多线程的使用场景 多进程模型的优势是CPU,多线程模型的优势是线程间切换代价较小 多线程模型适用于I/O密集型的工作场景,因此I/O密集型的工作场景经常会由于I/O阻塞导致频繁的切换线程.同时 ...

  5. python:一文搞懂多线程,多进程,异步协程的使用场景

    本文将使用场景化为案例,将单线程,多线程,多进程,异步协程的速度进行对比 对比速度时,   >表示 速度快于  >>表示速度远快于  =表示速度差不多 >>>> ...

  6. 【Python】单线程异步多线程多进程实例

    上一篇文章主要介绍了多任务场景下单线程异步.多线程.多进程如何选择,链接:多任务场景下单线程异步多线程多进程 这里主要通过三个实例去验证一下简单的多任务场景下,三种方式的耗时情况,假设有10个互不关联 ...

  7. linux 进程间界面嵌套,WPF 同一窗口内的多线程/多进程 UI(使用 SetParent 嵌入另一个窗口)...

    WPF 的 UI 逻辑只在同一个线程中,这是学习 WPF 开发中大家几乎都会学习到的经验.如果希望做不同线程的 UI,大家也会想到使用另一个窗口来实现,让每个窗口拥有自己的 UI 线程.然而,就不能让 ...

  8. 多线程的应用场景以及其实现方式

    一.线程的概要绍 从员工搬货看多线程 现在有一大推货物堆着,如果我有5个员工搬,肯定会比一个员工搬要快速.但是若是有15个员工搬同一堆货物,中间肯定会因为空间以及货物争抢而产生摩擦,甚至会互相掐架.所 ...

  9. SparkMapReduce的区别、多线程多进程的区别

    Spark&MapReduce的区别.多线程&多进程的区别 1.spark与hadoop区别: 2.Spark多线程运行, MR多进程运行 3.MR存在的问题: 4.线程和进程的区别: ...

  10. Python多线程多进程、异步、异常处理等高级用法

    文章目录 前言 多线程多进程 多线程 多进程 协程 总结 异步 基本概念 异步编程 asyncio aiohttp 异常 常见异常 异常处理 自定义异常 lambda表达式 lambda表达式用法 高 ...

最新文章

  1. 7步搞定Python数据可视化,业界大牛出品教程,Jupyter、Colab都有在线版
  2. Sun公司因为不懂销售和运营,导致陨落,最终软件还是打败了硬件
  3. AI 人工智能 探索 (八)
  4. 【网络流专练一】UVA五题(UVA12125,UVA11082,UVA10983,UVA1306,UVA10735)
  5. Hadoop:简单介绍
  6. vue-cli部署ngixs_Vue-cli项目部署到Nginx
  7. 向虚拟机发短信(android SMS 调试)
  8. HTTP响应码及其含义
  9. 计算机考研408真题2021年,2021年408考研科目真题及答案_文得学习网
  10. 串口uart编程——基于imx6ull
  11. 在手机上模拟kali系统(bochs)
  12. Microsoft Remote Desktop 10 - 微软官方免费远程桌面控制 Windows 的软件 APP
  13. 求两函数交点c语言,怎样求两个函数关系式的交点坐标
  14. s3c6410 开发板Linux系统支持 K9GAG08U0E的方法(第二篇)
  15. 【Houdini MAYA】从MAYA到Houdini入门学习笔记(三)
  16. 跳过selenium检测爬取淘宝直通车
  17. 显卡性能暴涨,2K高清+144hz显示器飞入寻常百姓家
  18. trello01:后端的搭建
  19. 取得df的列名的列表,取得df的列宽,把df的列融入成为其他df的列
  20. 后端php接口,PHP_TP5框架开发后端接口(代码编写思路)

热门文章

  1. php文档注释提取工具phpdocumentor的使用
  2. 用Java开源项目JOONE实现人工智能编程
  3. iOS 开发之动画篇 - 从 UIView 动画说起
  4. python移动文件
  5. ORACEL使用脚本来修改表结构
  6. 买入股票后必须遵守的八项原则
  7. PHP文件上传后缀名与文件类型对照表
  8. ubuntu16.04 安装Opencv 3.1.0 import cv2 报错ImportError: No module named hdf5
  9. css中的背景、边框、补丁相关属性
  10. datagridview 不显示行号的问题