zoukankan      html  css  js  c++  java
  • 理解Python和Node.js的异步原理

    问题介绍

    众所周知,python 的 aysnc/await 和 node.js 都是单线程实现的异步操作,很多人都告诉我“node.js”自带多线程功能,关于原理又一问三不知。
    实际上两者实现异步的原理十分简单。


    异步原理

    事实上,所谓的“单线程实现异步操作”,本质上是一个线程在调度现在该执行的语句,而大家所说的多线程并发编程,指的是cpu调度多线程。
    一个是主线程决定接下来该执行哪个语句,一个是cpu决定现在该运行哪个线程,区别就显而易见了吧。

    既然知道了async/await只用了一个线程在实现异步操作,那为什么能变快呢?
    事实上,异步功能是为了解决网络/进程通讯带来不必要等待的问题。
    若不使用异步编程,你的网络请求发出后,主线程就会干等着另一方接受请求并作出回应,然而这个时间是可以被充分利用的,因此才有了异步操作。

    由此看来,你等待的请求必须得是另外的机器或者进程在进行计算,这个计算不能占用你的主线程的资源,否则就和同步操作没有任何区别,这也是很多人产生误区的地方。

    使用方法

    Python

    python 的使用方法是,在aysnc函数中,你先发出若干个请求,发出请求后可以做一些其他的事情,最后再await这些请求即可。
    具体的实例网上有很多,就不过多介绍。

    node.js

    node.js的调度和python不太一样,node.js有一个回调函数,在请求得到回应后会通知主线程请求已经完成了,并执行回调函数,因此写出来的代码看起来就像“自带多线程”一样。

  • 相关阅读:
    在form里面,放了四个UEditor,怎么在后台分别获取它们值
    在form里面,放了四个UEditor,怎么在后台分别获取它们值
    把二叉树转变为左孩子右兄弟树
    把二叉树转变为左孩子右兄弟树
    把二叉树转变为左孩子右兄弟树
    把二叉树转变为左孩子右兄弟树
    atom安装插件
    atom安装插件
    python request 发送form-data 格式数据
    苏宁易购:前后端分离架构的落地思考
  • 原文地址:https://www.cnblogs.com/Yuzao/p/15152782.html
Copyright © 2011-2022 走看看