当前位置: 首页 > 网络应用技术

Python的同步和异步快速执行快速

时间:2023-03-06 18:15:55 网络应用技术

  新版本的Python支持语法。许多文章说,该语法的实施代码将变得快速,但是这种场景受到限制。本文将尝试简单地解释为什么在某些场景中代码更快。

  首先,从一个示例中了解两个调用之间的区别。为了清楚地看到他们的运行时间之间的区别,他们将重复10,000次操作。特定代码如下:

  可以看出,每个人都熟悉语法,语法相对较不同。该功能需要使用开始。同时,调用功能需要使用语法。运行时,功能可以达到相同的效果,但是可以从运行结果的输出中可以看出。

  这样做的原因是,在同一线程执行(CPU单核)下,需要通过某个事件周期调用呼叫,这将产生一些小开销,以使运行时间比这较慢。在同一时间段的纯CPU操作示例中,优势是网络IO操作无法在此场景中发挥优势,但是它将在高分子场景中闪耀。

  注意:目前,据说语法支持网络IO,并且文件系统的异步IO不是很完整。因此,文件系统的异步读写和写入多线程处理而不是coroutine。特定的可见:github.com/python/asyn ...

  为了了解IO方案中的操作优势,首先假设有IO方案WEB背景服务通常需要许多请求。所有请求均来自不同的客户。例如,该图如图所示:

  在这种情况下,客户请求将在短时间内发出。为了在短时间内处理大量请求,并防止在短时间内延迟,服务器将在某种程度上支持并行。

  注意:在操作系统中并行,指的是在开始运行和运行的一段时间内,这些程序在同一处理器上运行,但是在任何时刻,任何时候都可以在处理机上运行一个程序。

  对于语法,可以通过流程,线程或两个来实现此Web背景。他们的并发/并行功能的提供将仅限于Woker的数量。例如,当工作人员时,一个请求将进入阻止等待阶段,直到处理运行运行的4名工人为止。为了允许服务器提供更好的服务,我们都将提供足够的工人。同时,由于过程是好的,并且进行比较,因此每个过程都将占据独立的资源。提供服务的表格。

  注意:该过程是最小的资源分配单元。过度的流程将占据许多系统资源。将不启用一般背景服务的数量。同时,线程是最小的调度单元。因此

  但是,此方法是非常消耗的系统资源(相对于Coroutine),因为线程的操作取决于CPU,并且CPU受到限制。在同一时间,其他线程必须等待调度,这意味着每个线程只能在一次划分中工作,然后将调度系统控制到阻止阶段或就绪阶段。时间可以继续运行。为了模拟同一时刻,多个线程同时运行,并防止其他线程饿死。每个线程的操作时间非常短,线程之间的调度非常频繁。线程是线程时,调度将更加频繁。

  但是,调度线程的开销不大。相对较大的费用是调度线程生成的以下切换和竞争条件(特别是您可以参考“简介”中与过程计划有关的信息。当代码时,它需要将数据加载到CPU缓存并运行再次。当该时间在此时间内运行CPU的线程时,将保存该线程的最新运行数据,然后将加载CPU以准备准备准备。DATA从计划的线程中运行并运行。尽管存款数据的保存比内存更快,并且更接近CPU,比内存更接近内存,寄存器的访问速度没有CPU缓存的快速访问速度。因此,使用了时间来加载数据上的数据。

  与线程调度,上下文切换和夺取类型的调度相比,语法实现的Coroutine是非语义的,而Coroutine的调度则取决于控制循环。该周期是一个非常频繁,高效的任务管理器和计划。同时,无需考虑加载缓存的竞争问题。或上面的图片是一个示例。服务开始时,它将首先启动事件周期。收到请求后,它将创建一个任务来处理客户端发送的请求。权力,垄断整个线程资源并继续执行,直到需要等待外部事件的事件,例如等待数据库返回数据。目前,该任务将告诉事件,它正在等待此事件,然后将执行权交给权利。执行权将转移到最需要的任务中。当执行权利的任务刚刚收到数据库事件时将来的响应,事件周期将其安排到第一个(不同的事件周期实施可能是不同的),当执行权下次切换时,执行权正确,让他继续执行,直到他遇到该执行权下一个等待事件。

  这种切换方法称为协作多任务处理。因为它仅在单个过程或单个线程中运行,因此在切换Coroutine时不需要更改。CPU不需要读取和写入缓存,因此可以节省一些费用。从上面的情况下,可以看出,切换执行权是基于Coroutine的主动性,并且扣押了线程。当线程不遇到IO事件时,它也可能会从运行状态变为现成状态,直到再次被调用为止。这样,以此方式,将有很多计划带来的费用,并且Coroutine将继续运行直到使用特许权切换为止,因此Coroutine计划的数量将远小于线程。在同一时间,可以看到开发人员指定Coroutine的调度(例如上面提到的数据库的返回事件),它是非繁殖的。这意味着无法运行,您只能等到运行的Coroutine手中执行权,因此开发人员必须确保任务不能在CPU上停留太长时间,否则其余任务将饿死。

  在IO方案中,IO的费用比CPU执行代码逻辑要大得多。从这里,您也可以考虑一下。当遇到IO的费用时,代码逻辑需要等待,并且CPU是空闲的,因此我通过了CPU,因此我通过了CPU,所以我通过了CPU,所以我通过了CPU,所以我通过CPU。重复CPU的Coroutine/线程方法,并挤压CPU.MAMEMUME,即语法和语法执行的代码逻辑是相同的,然后可以将快速执行的比较转换为慢速执行的比较。Coroutine和多进程/线程,即Coroutine事件的循环时间表的开销以及多进程/线程Schedulogic比较的时间表,事件循环时间表的开销基本不变(或者是不变的(或更改不大)。除了大量的多进程/线程之外,与事件的开销相比,它还将随着工人的数量而增加。当数量在一定程度上很高时,多进程/多线程的费用将大于Coroutine Switching的费用。目前,语法执行速度将比语法更快。因此,在普通情况下,语法的执行速度将比语法的执行速度快,但是当io计算大于CPU计算时,且高度计算速度。同时场景,语法执行速度将比语法速度快。

  作者:Chen Syu