zoukankan      html  css  js  c++  java
  • 简单理解异步编程(python)和异步编程(nodejs)

    同步编程

    同一时间只能做一件事。python就是同步编程(当然,python也能同步)。

    异步编程

    同一时间可以做多件事。nodejs就是异步编程(同理,nodejs也能异步)。

    举个栗子

    测试文件夹test里有两个空的文本文件1.txt2.txt

    ├─test
       ├─1.txt
       ├─2.txt
    

    我想完成两个任务:

    • 1.txt写入hello
    • 删除2.txt文件

    同步实现

    # 导入模块
    import os
    # 写入操作
    with open('1.txt', 'w') as f:
        f.write('hello')
    print('写入完成')
    # 删除操作
    os.unlink('2.txt')
    print('删除完成')
    '''输出结果
    写入完成
    删除完成
    '''
    

    异步实现

    // 导入模块
    const fs = require('fs')
    // 写入操作
    fs.writeFile('1.txt', 'hello', (err) => {
        if (err) throw err
        console.log('写入完成')
    })
    // 删除操作
    fs.unlink('2.txt', (err) => {
        if (err) throw err
        console.log('删除完成')
    })
    /* 输出结果
    删除完成
    写入完成
    */
    

    运行结果

    • python的代码先输出写入完成,再输出删除完成
    • nodejs的代码先输出删除完成,后输出写入完成

    分析解释

    python是同步编程,同一时间只能做一件事。python的代码按顺序从上到下执行,先执行写入操作,再打印输出,然后执行删除操作,最后打印输出。也就是说python下一步的代码必须等待上一步的代码执行完毕后才能执行,所以python的代码先输出写入完成,再输出删除完成

    nodejs是异步编程,同一时间可以做多件事。nodejs的代码同时执行写入操作和删除两个操作,这两个任务之间无需等待。此外,删除操作直接删就完事了,而写入操作要复杂一些,写入操作的时间要比删除操作的时间长,所以nodejs的代码先输出删除完成,而后输出写入完成

    拓展思维

    很明显,对于举的这个栗子来说,nodejs代码的执行效率要比python代码的执行效率高,因为nodejs是同时执行两个任务,而python是等待一个任务完成后再执行下一个任务。

    这里的文件写入和文件删除两个操作之间互不影响,但很多时候,多个任务或事件之间具有关联性,也就是说你必须先处理任务一,等待任务一完成后你才能处理任务二,异步编程就发挥不出优势了,还得同步编程。

    因此,采用同步编程还是异步编程还得看实际情况。如果你的项目是爬虫这种批量而又互斥的任务时,采用异步编程效率要高很多。但,如果涉及到流程控制类的任务时,还是需要同步编程。

    引用参考

    https://nodejs.org/api/fs.html
    https://docs.python.org/3/library/os.html
    
  • 相关阅读:
    C# using 实现强制资源清理
    MySQL workbench How to create a new model
    无法启动windows audio服务,错误提示126.
    Process of knowledge discovery in databases
    Android 应用程序中资源的引用
    Javadoc使用方法
    Android xml 布局
    load data with matlab
    Android中string.xml使用总结
    Introduction to Indigo
  • 原文地址:https://www.cnblogs.com/ghgxj/p/14219098.html
Copyright © 2011-2022 走看看