携程-Greenlet

协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。

线程切换的时候会保存到CPU里面。

因此:

协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置。

在单线程下实现并发的效果,就是通过协程来完成的。yield()

协程的好处:

  • 无需线程上下文切换的开销
  • 无需原子操作锁定及同步的开销 (协程就是单线程)
    •   "原子操作(atomic operation)是不需要synchronized",所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序是不可以被打乱,或者切割掉只执行部分。视作整体是原子性的核心。
  • 方便切换控制流,简化编程模型
  • 高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理。

缺点:

  • 无法利用多核资源:协程的本质是个单线程,它不能同时将 单个CPU 的多个核用上,协程需要和进程配合才能运行在多CPU上.当然我们日常所编写的绝大部分应用都没有这个必要,除非是cpu密集型应用。(进程里面跑线程,线程里面跑协程)
  • 进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序
时间: 2024-10-29 19:07:32

携程-Greenlet的相关文章

线程、进程、携程

进程: qq 要以一个整体的形式暴露给操作系统管理,里面包含对各种资源的调用,内存的管理,网络接口的调用等...对各种资源管理的集合 就可以成为 进程 线程: 是操作系统最小的调度单位, 是一串指令的集合(在python中同一时间执行的线程只有一个)python多线程 不适合cpu密集操作型的任务,适合io操作密集型的任务 进程 要操作cpu , 必须要先创建一个线程 ,所有在同一个进程里的线程是共享同一块内存空间的 进程与线程的区别?1.线程共享内存空间,进程的内存是独立的 2.同一个进程的线

微信小程序UI------实现携程首页顶部的界面(弹性布局)

今天写了一个携程界面的UI,利用H5的弹性盒子来实现,学过H5弹性盒子的,来看是比较方便的,因为CSS代码都差不多. 可以看看这篇博客 快速使用CSS 弹性盒子 效果图如下: 主要是携程首页的四个模块: 代码: <view class="page"> <view class="page__bd"> <view class="section__nav"> <view class="left bor

携程apollo源码在idea中启动报错TransportException: Cannot execute request on any known server

com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) at com.sun.jersey.api.client.filter.GZIPConte

携程日处理20亿数据,实时用户行为服务系统架构实践

携程实时用户行为服务作为基础服务,目前普遍应用在多个场景中,比如猜你喜欢(携程的推荐系统).动态广告.用户画像.浏览历史等等. 以猜你喜欢为例,猜你喜欢为应用内用户提供潜在选项,提高成交效率.旅行是一项综合性的需求,用户往往需要不止一个产品.作为一站式的旅游服务平台,跨业务线的推荐,特别是实时推荐,能实际满足用户的需求,因此在上游提供打通各业务线之间的用户行为数据有很大的必要性. 携程原有的实时用户行为系统存在一些问题,包括:1)数据覆盖不全:2)数据输出没有统一格式,对众多使用方提高了接入成本

携程合体去哪儿,与途牛度假旅游市场争高下

作者:楠沨 [IT战略家] 本次度假业务的合并,除了双方在线旅游市场的携手,还包括了地面BU(旅游事业部)的合并,进一步提升双方在包价旅游业务和地面碎片化业务地位的同时,携程旅游将获得去哪儿度假的用户流量,在团队效率上也会有所提高. 近来,携程在资本市场动作频频.先是战略投资旅游百事通,通过后者拥有的5000多家线下门店布局二.三线城市,后又与美国海鸥.纵横.途风三大旅行社战略合作,进军美国旅游市场,扩展线下旅游业务.本次合并去哪儿,是携程整合在线度假市场"生态圈"的又一大动作.同时,

携程事件简单故障分析

互联网安全越来越严峻 自从windowsxp停止更新维护后,世界范围内的安全事件就层出不穷,几乎一发不可收拾. windows漏洞很多,入侵windows服务器基本上不是问题,所以安全事件不可避免. linux最近爆出很多漏洞,还有很多漏洞未爆出. 感觉unix比较安全,比如sinox操作系统.但是只是操作系统层面安全还不够,应用程序安全跟操作系统无关. 应用程序的漏洞,随着应用程序复杂度增加,漏洞可能也增加,而代码安全审核就很重要. 携程故障分析 1.线上数据全部被删,再次发布依旧被删 线上数

携程函数、递归、二分法、import、from。。。import

携程函数 与yield类似 yield: 1:把函数的执行结果封装好__iter__和__next__,即得到一个迭代器 2:与return功能类似,都可以返回值,但不同的是,return只能 返回一次值,而yield可以返回多次值 3:函数暂停与再继续运行的状态是有yield保存 def func(count): print('start') while True: yield count count+=1 g=func(10) print(g) print(next(g)) print(ne

携程第四代架构探秘之运维基础架构升级

作为国内最大的OTA公司,携程为数以亿计的海内外用户提供优质的旅游产品及服务.2014年底携程技术中心的框架.系统和运维团队共同启动了架构改造项目,历时2年,涉及所有业务线.本文回顾了携程在整个技术架构改造过程中的一些实践和收获. 一.写在前面 随着携程业务量迅速增长.业务变化越来越敏捷,对于应用交付的效率也提出了更高的要求.根据统计,截止2014年底携程总应用数在5000个左右,平均每周约有3000次以上的发布需求.所以作为整体交付环节中极为重要的一环,应用的部署和发布是提高交付效率的关键,然

携程transform放大效果

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>携程tab</title> <style type="text/css"> .img{ height: 110px; width: 220px; position: relative; overflow: hidden; } .img img{ width: 220