首页 > 编程语言 >并发编程(三)

并发编程(三)

时间:2023-04-01 14:35:36浏览次数:42  
标签:解释器 Python 编程 python 并发 线程 GIL PyPy

1、多线程

  1.1、GIL(Global Interpreter Lock)全局解释器锁

    其他语言,CPU是多核时,是支持多个线程同时执行,但在python中,无论是单核还是多核,在任意时刻只能有一个线程在执行。其根源是GIL的存在。

GIL:来源是python设计之初,为了数据安全所做的决定。某个线程想要执行,必须先拿到GIL看作是“通行证”,并且在一个python进程中,GIL中只有一个,拿不到GIL的线程,无法进入CPU执行

  1.2、目前的python解释器:

    (1)、CPython:CPython是用C语言实现的Python解释器。 作为官方实现,它是最广泛使用的Python解释器。

    (2)、PyPy:PyPy是用RPython实现的解释器。RPython是Python的子集, 具有静态类型。这个解释器的特点是即时编译,支持多重后端(C, CLI, JVM)。PyPy旨在提高性能,同时保持最大兼容性(参考CPython的实现)。

    (3)、Jython:Jython是一个将Python代码编译成Java字节码的实现,运行在JVM (Java Virtual Machine) 上。另外,它可以像是用Python模块一样,导入并使用任何Java类。

    (4)、IronPython:IronPython是一个针对 .NET 框架的Python实现。它可以用Python和 .NET framework的库,也能将Python代码暴露给 .NET框架中的其他语言。

    GIL只在CPython中才有,而在PyPy和Jython中是没有GIL的。

    由于GIL锁存在,Python里一个进程永远只能同时执行一个线程(拿到GIL的线程才能执行),这就是为什么在多核CPU上,Python 的多线程效率并不高的根本原因

 

2、多进程

  Python要进行多进程操作,需要用到muiltprocessing库,其中的Process类跟threading模块的Thread类很相似。

标签:解释器,Python,编程,python,并发,线程,GIL,PyPy
From: https://www.cnblogs.com/shixiaogu/p/17278575.html

相关文章

  • 《Mysql基础》【Mysql触发器 新建触发器、修改触发器、删除触发器、举例】 编程入门
     --mysql数据库程序设计笔记:--=========第八章:触发器========================触发器:触发执行特定事件。(关联表对象,当特定事件出现时,触发激活)目的:保护表数据,(保证表数据完整性和一致性。)1、新建触发器:格式:createtrigger数据库名.触发器名称触发时刻inserton表名f......
  • 并发编程背景知识
    目录一、开篇介绍二、为什么要有操作系统三、什么是操作系统四、操作系统发展史手工操作——穿孔卡片联机批处理系统脱机批处理系统五、多道程序系统单道技术多道技术一、开篇介绍顾名思义,进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。进程的概念起源于操作系......
  • 《Mysql基础》【Mysql表查询、去重、表连接、左连接 右连接、子表查询、排序、分组等
     --mysql数据库程序设计笔记:第三章:查询1、单表查询:1)、简单查询查所有列:格式:select*from表名;举例:mysql>select*fromtb_student;+----+-----------+-------------+------+------------+----------+--------+---------+-------------------+|id|studentNo|s......
  • 实验3 函数应用编程
    1.实验任务1task1.c1#include<stdio.h>2#include<stdlib.h>3#include<time.h>4#include<windows.h>5#defineN8067voidprint_text(intline,intcol,chartext[]);//函数声明8voidprint_spaces(intn);//函数声明9voidprint_bla......
  • c++socket编程之客户端编写
    开头用WINAPI完成了socket客户端的编写cursor很适合用于写这种单文件的WINAPI代码编写,写的很规范,它帮助我完成了API的调用,参数的选择和异常值处理,自己去写还挺费时间但不得不吐槽下,我提的几个处理中文和处理多任务的需求,无论我换何种说法,它实现的都不太好,甚至还有错误功......
  • c++ socket编程之成品展示
    开头前面两篇介绍了服务端和客户端的编写,本篇展示运行效果多次测试,修复了bug,目前运行稳定,能够用于生产环境支持多个连接,能够同时处理多个数据传输任务效果展示服务端初始界面......
  • 《Mysql基础》【Mysql表的基本操作 新建表、修改表、删除表、外键约束、主键约束、完
     --mysql数据库程序设计笔记:表基本操作:1、新建表:格式如:1)、建表加主键:createtable表名(idintNOTNULLauto_incrementcomment'自增主键id',列名类型(范围)comment'列备注',...primarykey(id))engine=InnoDB;2)、建表加候选键副键约束createtable表名......
  • c++ socket编程之服务端编写
    开头想要写一个带界面、功能全面、传输高效、运行稳定的马儿,能够在生产环境下工作在cursor的帮助下,用一天时间完成了服务端和客户端的编写另外一天时间卡在了中文消息传输处理和大文件传输粘包、分包问题上功能收发消息,支持中文消息发送命令执行并显示命令执行结果任意......
  • 《Mysql基础》【Mysql删除数据库、新建数据库、修改数据库】 编程入门 学习分享 【公
     --mysql数据库程序设计笔记:数据定义:1、创建数据库:如:createdatabasedb_pro_1defaultcharsetgb2312collategb2312_chinese_ci;QueryOK,1rowaffected(0.00sec)或:createdatabasedb_pro_2defaultcharactersetgb2312defaultcollategb2312_chinese_ci;......
  • C# Task异步编程
    1.   在C#中,Task是一种用于异步编程的重要概念。它代表了一个异步操作的单元,可以在后台执行一个操作并返回结果。具体来说,Task包含了如下几个重要的概念:异步操作:Task可以用来表示一个异步操作,例如异步下载网页内容、异步读取文件等。线程池:Task会将异步操作放到线程池中执......