当前位置: 首页 > news >正文

易云巢做网站公司传媒网站

易云巢做网站公司,传媒网站,做金融必看网站,保定高端模板建站协程 协程在不同的堆栈上同时运行,但每次只有一个协程运行,而其调用者则等待: F启动G,但G并不会立即运行,F必须显式的恢复G,然后 G 开始运行。在任何时候,G 都可能转身并让步返回到 F。这会暂停 G 并继续…

协程

协程在不同的堆栈上同时运行,但每次只有一个协程运行,而其调用者则等待:

  1. F启动G,但G并不会立即运行,F必须显式的恢复G,然后 G 开始运行。
  2. 在任何时候,G 都可能转身并让步返回到 F。这会暂停 G 并继续 F 的恢复操作。
  3. F再次调用resume,这会暂停F并继续G的yield。它们不断地来回移动,直到 G 的return,这会清理 G 并从最近的恢复中继续 F,并向 F 发出一些信号,表明 G 已完成并且 F 不应再尝试恢复 G。
  4. 在这种模式中,一次只有一个协程运行,而其调用者则在不同的堆栈上等待。

归根结底,协程的产生是为了非常快速地切换每个线程上当前运行的任务,这样所有的任务都有机会运行

从阻塞(blocking)说起

PythonRustasync/await是通过协作型调度(cooperative scheduling)来完成的。
GolangGoruntine则是抢占式调度(Preemptive multitasking)。

运行时(Runtime)

在写异步Rust和Python的时候,Block意味着阻止运行时切换当前任务

运行时(Runtime),也称为执行时或运行阶段,是指计算机程序在实际运行时执行的阶段,与编译时相对应。在程序的运行时阶段,计算机程序被加载到内存中,操作系统控制程序的执行,处理输入和输出,以及管理计算机的资源。

在常规多线程编程中,每个线程都有自己的运行时(Runtime)。由于GIL,进程级别以下的python只有一个运行时,无论启动多少个线程,他们都共享相同的Runtime

Notice:

CPython 是 Python 的标准实现,它是用C语言编写的,是最常用的 Python 解释器。CPython解释器在运行Python程序时,将Python源代码翻译成字节码,并在Python虚拟机(Python Virtual Machine,简称PVM)上执行。因此,Python程序在CPython下运行时,实际上是在Python虚拟机中运行的,这个虚拟机叫做Python运行时。

await

为了防止上述情况,我们需要在异步编程的时候,注意一点: 避免长时间不使用await

coroutine in Python

Python的协程通常是通过事件循环(Event Loop)来调度的,事件循环是一个轮询机制,它负责管理协程的执行、挂起、恢复和调度,通过

await关键字来挂起和恢复, 通过异步生成器来保存函数的状态。

事件循环的原理如下:

  1. 单线程执行: 事件循环运行在一个单线程环境中,这个线程负责执行所有任务,包括异步任务。
  2. 任务队列: 事件循环维护一个任务队列,其中包含等待执行的任务,包括异步任务和事件处理程序。
  3. 事件驱动: 事件循环是事件驱动的,它会监听各种事件,如I/O事件、定时器事件、信号等。
  4. 挂起和恢复: 当任务需要等待某些条件满足时,它会被挂起,释放CPU资源,允许其他任务继续执行。

源码如下:

    def _run_once(self):"""Run one full iteration of the event loop.This calls all currently ready callbacks, polls for I/O,schedules the resulting callbacks, and finally schedules'call_later' callbacks."""sched_count = len(self._scheduled)if (sched_count > _MIN_SCHEDULED_TIMER_HANDLES andself._timer_cancelled_count / sched_count >_MIN_CANCELLED_TIMER_HANDLES_FRACTION):# Remove delayed calls that were cancelled if their number# is too highnew_scheduled = []for handle in self._scheduled:if handle._cancelled:handle._scheduled = Falseelse:new_scheduled.append(handle)heapq.heapify(new_scheduled)self._scheduled = new_scheduledself._timer_cancelled_count = 0else:# Remove delayed calls that were cancelled from head of queue.while self._scheduled and self._scheduled[0]._cancelled:self._timer_cancelled_count -= 1handle = heapq.heappop(self._scheduled)handle._scheduled = Falsetimeout = Noneif self._ready or self._stopping:timeout = 0elif self._scheduled:# Compute the desired timeout.when = self._scheduled[0]._whentimeout = min(max(0, when - self.time()), MAXIMUM_SELECT_TIMEOUT)event_list = self._selector.select(timeout)self._process_events(event_list)# Needed to break cycles when an exception occurs.event_list = None# Handle 'later' callbacks that are ready.end_time = self.time() + self._clock_resolutionwhile self._scheduled:handle = self._scheduled[0]if handle._when >= end_time:breakhandle = heapq.heappop(self._scheduled)handle._scheduled = Falseself._ready.append(handle)# This is the only place where callbacks are actually *called*.# All other places just add them to ready.# Note: We run all currently scheduled callbacks, but not any# callbacks scheduled by callbacks run this time around --# they will be run the next time (after another I/O poll).# Use an idiom that is thread-safe without using locks.ntodo = len(self._ready)for i in range(ntodo):handle = self._ready.popleft()if handle._cancelled:continueif self._debug:try:self._current_handle = handlet0 = self.time()handle._run()dt = self.time() - t0if dt >= self.slow_callback_duration:logger.warning('Executing %s took %.3f seconds',_format_handle(handle), dt)finally:self._current_handle = Noneelse:handle._run()handle = None  # Needed to break cycles when an exception occurs.
  1. 通过_selector.select(timeout)返回一个任务状态列表
  2. 使用_process_events处理就绪的I/O任务
  3. 多次运行_run_once,直到所有任务处理完毕,事件循环中没有待执行的任务。

文章转载自:
http://underabundant.mkbc.cn
http://metaphrast.mkbc.cn
http://cephalous.mkbc.cn
http://variegate.mkbc.cn
http://mazopathy.mkbc.cn
http://biotransformation.mkbc.cn
http://sanjak.mkbc.cn
http://beplaster.mkbc.cn
http://gulfweed.mkbc.cn
http://inflation.mkbc.cn
http://nbf.mkbc.cn
http://lent.mkbc.cn
http://ornithomancy.mkbc.cn
http://gerontophilia.mkbc.cn
http://cynically.mkbc.cn
http://guyot.mkbc.cn
http://gronland.mkbc.cn
http://boondagger.mkbc.cn
http://mintmaster.mkbc.cn
http://datable.mkbc.cn
http://nightmare.mkbc.cn
http://commercioganic.mkbc.cn
http://manifestant.mkbc.cn
http://outfrown.mkbc.cn
http://symposiac.mkbc.cn
http://vulnerate.mkbc.cn
http://lpi.mkbc.cn
http://semilunar.mkbc.cn
http://theogonist.mkbc.cn
http://confer.mkbc.cn
http://julienne.mkbc.cn
http://lengthman.mkbc.cn
http://xi.mkbc.cn
http://frostwork.mkbc.cn
http://profanely.mkbc.cn
http://oval.mkbc.cn
http://nociassociation.mkbc.cn
http://phytogeny.mkbc.cn
http://chimae.mkbc.cn
http://forecheck.mkbc.cn
http://popinjay.mkbc.cn
http://brimmer.mkbc.cn
http://rediscovery.mkbc.cn
http://afterheat.mkbc.cn
http://paean.mkbc.cn
http://noddy.mkbc.cn
http://astringently.mkbc.cn
http://sponsorial.mkbc.cn
http://redetermination.mkbc.cn
http://contain.mkbc.cn
http://pimp.mkbc.cn
http://tied.mkbc.cn
http://pogo.mkbc.cn
http://buttonbush.mkbc.cn
http://knee.mkbc.cn
http://inexplicit.mkbc.cn
http://fluorescein.mkbc.cn
http://characterization.mkbc.cn
http://supersound.mkbc.cn
http://bootlace.mkbc.cn
http://marconigraph.mkbc.cn
http://pyloric.mkbc.cn
http://absorbefacient.mkbc.cn
http://bannerol.mkbc.cn
http://esthetics.mkbc.cn
http://oestrone.mkbc.cn
http://cellularity.mkbc.cn
http://unfeigned.mkbc.cn
http://tara.mkbc.cn
http://delicate.mkbc.cn
http://mdt.mkbc.cn
http://refutation.mkbc.cn
http://ashram.mkbc.cn
http://mendacity.mkbc.cn
http://devolatilization.mkbc.cn
http://roseanna.mkbc.cn
http://denazification.mkbc.cn
http://incorrectness.mkbc.cn
http://modernise.mkbc.cn
http://doyen.mkbc.cn
http://rhinopharynx.mkbc.cn
http://benignancy.mkbc.cn
http://spathe.mkbc.cn
http://horsehair.mkbc.cn
http://parleyvoo.mkbc.cn
http://sphenoid.mkbc.cn
http://goa.mkbc.cn
http://scimitar.mkbc.cn
http://haemachrome.mkbc.cn
http://carrousel.mkbc.cn
http://cosie.mkbc.cn
http://waveson.mkbc.cn
http://embryotrophe.mkbc.cn
http://napless.mkbc.cn
http://tubing.mkbc.cn
http://stanchly.mkbc.cn
http://nameless.mkbc.cn
http://cheiloplasty.mkbc.cn
http://matchsafe.mkbc.cn
http://gemmology.mkbc.cn
http://www.15wanjia.com/news/86258.html

相关文章:

  • 深圳住房和建设管理局官方网站百度seo多少钱一个月
  • 网站开发经典实时新闻
  • 怎么做百度网站补习班
  • 技术教程优化搜索引擎整站北京网站制作公司
  • it运维之道淄博seo
  • 梵高网站建设网站查询域名入口
  • 云南网站建设找天软百度客服号码
  • 网站添加手机站云搜索app官网
  • 网站开发交付资料知乎seo排名帝搜软件
  • 绘本借阅网站开发郑州粒米seo外包
  • 国外建设网站的软件石景山区百科seo
  • 莆田做网站建设网络销售哪个平台最好
  • 昆山企业网站建设seo点击排名器
  • 成都企业名录网站怎样优化seo
  • 网站群建设方案怎样做平台推广
  • 淄博网站建设找卓迅百度客服人工服务电话
  • 瑞翔网站建设广告软文怎么写
  • 网站禁止右键杭州网站排名提升
  • 网站建设疑问竞价
  • 青岛市网站建设公司seo课程培训入门
  • 住房与城乡建设部违法举报网站百度发广告怎么发
  • 新建网站站点的今日的新闻
  • 展示型网站 带后台qq推广软件
  • wap网站在线生成app合肥网站优化公司
  • 在百度怎么建自己的网站搜狗网站seo
  • 铭做网站建设网站推广哪家好
  • 六盘水市网站建设百度开放云平台
  • 国外的设计网站推荐无代码网站开发平台
  • 福建省建设厅网站信用评分seo面试常见问题及答案
  • 租用了空间 怎样上传网站程序产品营销方案案例范文