博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程,多进程使用场景
阅读量:5094 次
发布时间:2019-06-13

本文共 705 字,大约阅读时间需要 2 分钟。

既然有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

你可能感兴趣的文章
JVM笔记——技术点汇总
查看>>
iOS中Storyboard使用要点记录
查看>>
入手腾龙SP AF90mm MACRO
查看>>
ORACLE 递归查询
查看>>
20172315 2017-2018-2 《程序设计与数据结构》实验三报告
查看>>
centos虚拟机克隆
查看>>
【Python】:拓展Queue实现有序不重复队列
查看>>
ehcache讲解及实例
查看>>
ajax java base64 图片储存
查看>>
django1.10.3下admin后台管理老是显示object
查看>>
推荐一个程序员阅读文章资料时的辅助神器
查看>>
http://www.jb51.net/article/51934.htm
查看>>
linux查看防火墙状态及开启关闭命令
查看>>
Java集合——TreeMap源码详解
查看>>
2015,鬼王Xun和GGL比赛,带给我们无尽的欢乐
查看>>
111... 南邮NOJ 1079
查看>>
别把SEO当苦力活,做优化要讲究策略
查看>>
Django项目:CRM(客户关系管理系统)--41--33PerfectCRM实现King_admin编辑整张表限制
查看>>
关于时间
查看>>
面向对象 阶段性总结
查看>>