zoukankan      html  css  js  c++  java
  • 11.13

    一、同步 异步 阻塞 非阻塞

      

    线程的三种状态:
    1.就绪
    2.运行
    3.阻塞

    阻塞 遇到了IO操作 代码卡主 无法执行下一行 CPU会切换到其他任务

    非阻塞 与阻塞相反 代码正在执行(运行状态) 或处于就绪状态
    阻塞和非阻塞描述的是运行的状态

    同步 :提交任务必须等待任务完成,才能执行下一行
    异步 :提交任务不需要等待任务完成,立即执行下一行
    指的是一种提交任务的方式

      

    二、异步回调

      

    为什么需要回调?
    子进程帮助主进程完成任务 处理任务的结果应该交还给准进程
    其他方式也可以将数据交还给主进程
    1.shutdown 主进程会等到所有任务完成
    2.result函数 会阻塞直到任务完成
    都会阻塞 导致效率降低 所以使用回调
    注意:
    回调函数什么时候被执行? 子进程任务完成时
    谁在执行回调函数? 主进程
    线程的异步回调
    使用方式都相同 唯一的不同是执行回调函数 是子线程在执行

    三、线程队列

    普通队列 先进先出
    q = queue.Queue()

    堆栈队列  先进后出 后进先出  函数调用就是进栈  函数结束就出栈 递归造成栈溢出

    q2 = queue.LifoQueue()
    优先级队列,数值越小优先级越高  优先级相同时 比较大小 小的先取

    q3 = queue.PriorityQueue()

    四、协程

      

    协程的目的是在单线程下实现并发
    为什么出现协程? 因为cpython 由于GIL 导致同一时间只有一个线程再跑
    意味着 如果你的程序时计算密集 多线程效率也不会提升
    如果是io密集型 有没有必要再单线程下实现并发
    没有 我会开启多线程来处理io 子线遇到io cpu切走 但是请问 你能保证一定切到主线吗? 不能保证
    有 如果可以 我在遇到io的时候转而去做计算 这样一来可以保证cpu一直在处理你的程序 当然时间太长也要切走

    总结一下:单线下实现并发 将io阻塞时间用于执行计算 可以提高效率 原理:一直使用CPU直到超时

  • 相关阅读:
    jquery 复制粘贴上传图片插件
    chrome插件的开发
    js获取剪切板内容,js控制图片粘贴
    记录前端常用的插件
    如何快速搭建node.js项目,app.js详解
    原型和原型链
    js 上传文件功能
    前端模块化开发发展史
    闭包实例
    5月8日疯狂猜成语-----对孔祥安组的测试版
  • 原文地址:https://www.cnblogs.com/zhanggq/p/9954743.html
Copyright © 2011-2022 走看看