0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python中的多核CPU共享数据之协程详解

马哥Linux运维 2017-12-07 10:23 次阅读

一 : 科普一分钟

尽管进程间是独立存在的,不能相互访问彼此的数据,但是在python中却存在进程间的通信方法,来帮助我们可以利用多核CPU也能共享数据.

对于多线程其实也是存在一些缺点的,不是任何场景我们都用多线程来完成并发处理任务,因为CPU操作线程,所以线程多了,对于计算机的资源消耗是十分严重的,多线程适合IO操作密集的任务,那么怎么办呢, 协程的出现帮我们解决了这个问题 ,协程是比线程更小的一个单位,但是它的作用却不容忽视.

二 : 多进程

1.多进程简单了解 :

进程之间是独立的,是操作系统自己来维护和管理的,python通过C接口起了一个进程,多进程可以充分的利用多核CPU

2. 多进程的创建 :

3. 多进程间的通信 :

进程间独立,如果想相互访问,就必须有一个中间翻译,下面提供了几种进程间通信的方法。

进程Queue

解析 :

Queue通信,相当于父进程赋值了一个Queue给子进程,子进程在这个Queue放好数据后,序列化一个中间翻译,然后在反序列化返回给父进程,

因为进程之间内存独立,不能传递对象传递的其实就是序列化的数据

Pipe

多进程还有一种数据传递方式叫管道原理和Queue相同

4. 进程锁

虽然内存独立,但是即使是打印也会造成打印数据错误,为了防止进程间抢屏幕打印输出,加了进程锁。

5. 进程池

创建一个子进程相当于copy一份父进程内存数据,为了防止频繁创建,导致内存不足,所以有了进程池作为限制。

三 : 协程

1. 协程的简单了解 :

协程又称微线程,coroutne,协程是一种用户态的轻量级线程。通俗点讲就是周末我在家里休息,假如我先洗漱,再煮饭,再下载电影看会很慢,用了协程的效果就好比,我在下载电影的时候去点火煮饭,此时我马上洗漱,等我洗漱好了,饭也好了,吃完饭了,电影下好了,我可以看了。

2. 协程的创建和使用:

gevent是一个三方库,可以轻松通过gevent实现并发同步或者异步编程

解析:尝试运行发现,运行时间为Sleep最长的时间,也就是说协程能绕过IO,进行执行,极大的提高了效率.

IO(从硬盘上读一块数据,从网络读数据,从内存里读一块数据) 操作不占用CPU,计算占用CPU

3. 协程简单爬网页 :

4. 协程实现socketServer:

通过协程,我们可以写出一个socketServer,真正socketServer的底层是用多线程来实现,我们用写成写出的效率很高,而且非常节省内存

四 : 总结

协程的优点:

线程在单线程下切换,减少资源消耗

无需原子操作控制流,简化编程模型

高并发,高扩展,低成本.

无论是多进程,多线程还是协程在不同的场景用不同的模型才能高效的完成任务.

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10411

    浏览量

    206465
  • python
    +关注

    关注

    51

    文章

    4667

    浏览量

    83440

原文标题:Python篇-多进程与协程的理解与使用

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    多核CPU下的多线程编程

    优先级调度 2)按照FIFO调度 3)按照时间片调度等等当然,除了CPU资源之外,系统还有一些其他的资源需要共享,比如说内存、文件、端口、socket等。既然前面说到系统的资源是有
    发表于 12-26 15:17

    Python存储数据详解

    Python开发数据存储、读取是必不可少的环节,而且可以采用的存储方式也很多,常用的方法有json文件、csv文件、MySQL数据库、Redis
    发表于 03-29 15:47

    SYS/BIOS 多核 共享变量的方法

            最近在做SYS/BIOS多核相关的内容,我是这样规划的,主核用来控制,从核用来接收数据,两个核之间有些变量要共享,比如主核改变了一个变量,从核要根据改变的值来接收数据
    发表于 06-21 11:16

    Pythonipython详解

    Pyipython:Pythonipython的简介、安装、使用方法详细攻略
    发表于 12-26 10:50

    Pythondocx详解

    Pydocx:Pythondocx简介、安装、使用方法详细攻略
    发表于 12-27 16:44

    python数据可视化画折线图

    python数据可视化画折线图,散点图
    发表于 05-27 08:09

    分享Python 流畅的Python

    14.10 Python 3.3新出现的句法:yield from 14.11 可迭代的归约函数 14.12 深入分析iter函数14.13 案例分析:在数据库转换工具中使用生成器 14.14 把
    发表于 09-23 20:39

    和线程有什么区别

    和线程的区别和线程的共同目的之一是实现系统资源的上下文调用,不过它们的实现层级不同;线程(Thraed)是比进程小一级的的运行单位,多线程实现系统资源上下文调用,是编程语言交付
    发表于 12-10 06:23

    怎样使用C语言去实现Linux系统

    Linux系统编程练手项目:使用C语言实现 6年嵌入式开发经验,在多家半...
    发表于 12-23 06:58

    什么是多任务系统?FreeRTOS任务与简析

    功能,初学者必须先掌握——任务的创建、删除、挂起和恢复等操作。本章节分为如下几部分:*什么是多任务系统*FreeRTOS任务与*初次使用*任务状态*任务优先级*任务实现*任务控制块*任务堆栈一、什么是多任务系统单片机一般都是在main函数中用while(1)做一个大循
    发表于 02-18 06:38

    基于共享内存多核数据结构研究

    随着计算机硬件技术的发展,如今我们已经迈入了多核CPU时代.然而,作为软件核心的数据结构仍然是按照单核CPU和顺序型准则来设计的.在基于共享
    发表于 01-15 11:34 0次下载

    基于64位多核处理器的共享缓存结构电路设计

    高速缓存作为中央处理器 (CPU) 与主存之间的小规模快速存储器,解决了两者数据处理速度的平衡和匹配问题,有助于提高系统整体性能。多处理器 (SMP) 支持共享和私有数据的缓存,Cac
    发表于 07-10 10:54 1533次阅读

    python经典实例详解

    python经典实例详解说明。
    发表于 04-26 10:14 32次下载

    [源代码]Python算法详解

    [源代码]Python算法详解[源代码]Python算法详解
    发表于 06-06 17:50 0次下载

    多核CPU的启动方式

    工作中遇到的多核 ARM CPU 越来越多,总结分享一些多核启动的知识,希望能帮助更多小伙伴。 在 ARM64 架构下如果想要启动多核,有 spin-table 和 psci 两种方式
    的头像 发表于 06-22 10:04 1122次阅读