• Python-02进阶-04多进程多线程


    Python 进阶-04 进程线程协程并发等.md

    tags: Python 多进程 并发 进阶 必备知识 2019 年

    本节主要描述:

    1. Python进程线程协程并发等术语
    2. 以及如何高效利用Python编写高性能程序.
    

    术语

    协程

    “协程是一种用户级的轻量级线程”,应用场景多用于 IO 密集型, 他有高并发的特点, 不适用于 CPU 密集型的场景。

    协程主要是利用迭代器来实现多线程的效果,

    相对于多线程的优势在于:

    1. 减少系统调用(切换线程需要系统级调用)的开销,
    2. 多协程运行于单线程中, 所以内存安全的, 不会产生脏数据, 也不会去竞争 GIL.
    3. 然后多进程+多协程可以达到充分利用 cpu 的效果

    协程的关键在于
    yield 迭代器(generator)
    send, yield 是把迭代器里的值返回出来, send 就是把值写进迭代器,
    yield from, “yield from iterable 本质上等于 for item in iterable: yield item 的缩写版”, yield from 的出现是为了解决 嵌套的迭代器问题
    asyncio, 一个基于事件循环的异步 I/O 模块, 类似的有 gevent, tornado 等, 在 asyncio 中, yield from 就发挥了很大的作用, 因为有大量的消息需要隔层传递. 在 asyncio 中, 主要这样几个概念, 首先有一个 event_loop 事件循环, 它是一个无限循环程序

    https://www.jianshu.com/p/90ada937c90d

    asyncio 主要流程应该是: 定义协程函数, 如果有耗时的操作用 await 挂起 —> 创建一个事件循环 ----> 创建 task ----> 绑定回调 —> 注册 task —> 从 task 的 result 获取结果.
    搭配进程可以开多条 事件循环, 多核的并行操作.
    搭配线程还可以动态的注册 task.
    搭配 aiohttp 进行异步的 http 请求.

    并行:多个 CPU 核心,不同的程序就分配给不同的 CPU 来运行。可以让多个程序同时执行
    并发:单个 CPU 核心,在一个时间切片里一次只能运行一个程序,如果需要运行多个程序,则串行执行

    批处理:指一个处理完了另一个再处理;

    进程:即每个程序的执行的代码(全部流程),加上执行现场(当前执行场景);

    并发:因为多个程序在一个 CPU 上不断切换,人类看起来如同程序在同时执行,这就是并发;
    并行:即多个程序同时在多个 CPU 上执行,就是并行;

    线程:进程内部,有多个执行流程(加上每个流程的执行场景),这个流程就是线程;

    协程:即线程内部,转换运行控制权;

    进程是:一个 CPU 情况下,多个程序分别使用机器资源(CPU 或硬盘等)的概念;
    线程是:一个进程情况下,多个执行流程(即线程)分别使用分配给该进程的机器资源的概念;
    协程是:一个线程情况下,多个执行流程(即协程)由线程控制,分别使用分配给该线程的机器资源的概念;

    进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源;
    线程是处理器调度的基本单位;
    协程可以理解为线程内部调度的基本单位。
    协程的优势在于:处理器调度(即线程)会有很大的场景切换消耗,而对处理器来说,协程属于同一个调度,切换消耗较小。
    本质就是各种抽象,用于提升小路,不用纠结太深,只要可以更好的解决问题提升效率即可。

    附件

    参考链接

    Python 之路[9] - 进程、线程、携程篇

  • 相关阅读:
    00005-js 获取uuid
    00004-form 表单的清空、重置 (jquery)
    使用Socket进行通信
    使用ServerSocket创建TCP服务器端
    TCP协议基础
    基于TCP协议的网络通信
    3D MAX在立方体的使用
    应用纹理贴图
    使用OpenGL ES绘制3D图形
    GL10控制图形旋转
  • 原文地址:https://www.cnblogs.com/superscfan/p/12256982.html
Copyright © 2020-2023  润新知