精华内容
下载资源
问答
  • 两重工作是什么意思
    万次阅读
    2021-01-13 03:12:25

    在调试asp程序时,经常出现“HTTP 500错误” ,这个问题我一直都没能解决好,有时候东弄弄,西弄弄它就好了,也没总结出个经验来,到网上收集了一些,希望对有同样困难的朋友们有所帮助,同时也希望高手们给与批评指正!

    首先,确定错误的原因,让IE显示详细的出错信息:

    菜单--工具--Internet选项--高级--显示友好的HTTP错误信息,去掉这个选择吧,对帮助你确定错误所在非常有帮助!

    1.    Q311766 HOW TO: Troubleshoot "HTTP 500 - Internal Server Error" Message.

    2.    IWAM_computername 帐号密码被修改.

    解决方法:PRB: Configured Identity Is Incorrect for IWAM Account

    3. Metabase 崩溃

    解决方法:Q234429 How to Manually Restore the Metabase When No Backup Exists http://support.microsoft.com/default.aspx?scid=kb;en-us;q234429 .

    4. 请检查组建服务是否有问题

    单击开始,单击程序,单击管理工具,单击组件服务。

    单击展开组件服务,展开计算机,展开我的电脑,展开COM+应用程序。

    COM+应用程序下包含三项: IIS In-Process Applications,IIS Out-Of-Process Pooled Applications and IIS Utilities。

    如果您只能找到其中一项或两项,或在展开的过程中出现错误,请参照下文。若该方法无法解决您的问题,请从一个有效备份中恢复IIS,或者修复、重装IIS。

    Q246309 How to Replace a Missing IIS In-Process Application in MTS

    Cannot Expand "My Computer" in Component Services MMC Snap-In

    5. 重装IIS

    使用添加/删除程序卸载IIS。

    重起计算机

    使用添加/删除程序重装IIS。

    ----------------------------------------------------------

    kuka:500错误可能的原因太多了,程序出错,METABASE,COM+,MDAC,SCRIPT引擎,SQL,WAMUSER或者系统问题,所以上面的办法可能并不能完全解决你的ASP500错误问题,建议的处理办法:

    1.同步WAMUSER帐户密码,

    2.升级MDAC和SCRIPT教本引擎

    3.METABASE,这个很麻烦,有备份的话尽量恢复,(使用METAEDIT,在NT4和WIN2K下,2003下不能使用)

    4.检查程序

    5.完全删除IIS,重启,安装IIS,添加站点(导入的METABASE可能仍然会有问题)

    6.升级或重装系统(不到万般无奈,不要走这一步)

    知道了导致http 500内部错误的原因,解决起来就比较简单了,那就是人工同步iwam账号在active directory、iis metabase数据库和com+应用程序中的密码。

    具体操作分三步,均需要以管理员身份登录计算机以提供足够的操作权限(iwam账号以iwam_myserver为例)。

    (一)更改active directory中iwam_myserver账号的密码

    因iwam账号的密码由系统控制,随机产生,我们并不知道是什么,为完成下面两步的密码同步工作,我们必须将iwam账号的密码设置为一个我们知道的值。

    1、选择“开始”->“程序”->“管理工具”->"active directory用户和计算机",启动“active directory用户和计算机”管理单元。

    2、单击“user”,选中右面的“iwam_myserver”,右击选择“重设密码(t)...”,在跳出的重设密码对方框中给iwam_myserver设置新的密码,这儿我们设置成“aboutnt2001”(没有引号的),确定,等待密码修改成功。

    (二)同步iis metabase中iwam_myserver账号的密码

    可能因为这项改动太敏感和重要,微软并没有为我们修改iis metabase中iwam_myserver账号密码提供一个显式的用户接口,只随iis5提供了一个管理脚本adsutil.vbs,这个脚本位于c:\inetpub\adminscripts子目录下(位置可能会因你安装iis5时设置的不同而有所变动)。

    adsutil.vbs脚本功能强大,参数非常多且用法复杂,这里只提供使用这个脚本修改iwam_myserver账号密码的方法:

    adsutil set w3svc/wamuserpass password

    "password"参数就是要设置的iwam账号的新的密码。因此我们将iis metabase中iwam_myserver账号的密码修改为“aboutnt2001”的命令就是:

    c:\inetpub\adminscripts>adsutil set w3svc/wamuserpass "aboutnt2001"

    修改成功后,系统会有如下提示:

    wamuserpass: (string) "aboutnt2001"

    (三)同步com+应用程序所用的iwam_myserver的密码

    同步com+应用程序所用的iwam_myserver的密码,我们有两种方式可以选择:一种是使用组件服务mmc管理单元,另一种是使用iwam账号同步脚本synciwam.vbs。

    1、使用组件服务mmc管理单元

    (1)启动组件服务管理单元:选择“开始”->“运行”->“mmc”,启动管理控制台,打开“添加/删除管理单元”对话框,将“组件服务”管理单元添加上。

    (2)找到“组件服务”->“计算机”->“我的电脑”->“com+应用程序”->“out-of-process pooled applications”,右击“out-of-process pooled applications”->“属性”。

    (3)切换到“out-of-process pooled applications”属性对话框的“标志”选项卡。“此应用程序在下列账户下运行”选择中“此用户”会被选中,用户名是“iwam_myserver”。这些都是缺省的,不必改动。在下面的“密码”和“确认密码”文本框内输入正确的密码“aboutnt2001”,确定退出。

    (4)系统如果提示“应用程序被一个以上的外部产品创建。你确定要被这些产品支持吗?”时确定即可。

    (5)如果我们在iis中将其它一些web的“应用程序保护”设置为“高(独立的)”,那么这个web所使用的com+应用程序的iwam账号密码也需要同步。重复(1)-(4)步,同步其它相应out of process application的iwam账号密码。

    2、使用iwam账号同步脚本synciwam.vbs

    实际上微软已经发现iwam账号在密码同步方面存在问题,因此在iis5的管理脚本中单独为iwam账号密码同步编写了一个脚本synciwam.vbs,这个脚本位于c:\inetpub\adminscripts子目录下(位置可能会因你安装iis5时设置的不同而有所变动)。

    synciwam.vbs脚本用法比较简单:

    cscript synciwam.vbs [-v|-h]

    “-v”参数表示详细显示脚本执行的整个过程(建议使用),“-h”参数用于显示简单的帮助信息。

    我们要同步iwam_myserver账号在com+应用程序中的密码,只需要执行“cscript synciwam.vbs -v”即可,如下:

    cscript c:\inetpub\adminscripts\synciwam.vbs -v

    microsoft (r) windows script host version 5.6

    版权所有(c) microsoft corporation 1996-2000。保留所有权利。

    wamusername:iwam_myserver

    wamuserpass:aboutnt2001

    iis applications defined:

    name, appisolated, package id

    w3svc, 0,  3d14228c-fbe1-11d0-995d-00c04fd919c1}

    root, 2,

    iishelp, 2,

    iisadmin, 2,

    iissamples, 2,

    msadc, 2,

    root, 2,

    iisadmin, 2,

    iishelp, 2,

    root, 2,

    root, 2,

    out of process applications defined:

    count: 1

    3d14228d-fbe1-11d0-995d-00c04fd919c1}

    updating applications:

    name: iis out-of-process pooled applications key:  3d14228d-fbe1-11d0-995d-00c04fd919c1}

    从上面脚本的执行情况可以看出,使用synciwam.vbs脚本要比使用组件服务的方法更全面和快捷。它首先从iis的metabase数据库找到iwam账号"iwam_myserver"并取出对应的密码“aboutnt2001”,然后查找所有已定义的iis applications和out of process applications,并逐一同步每一个out of process applications应用程序的iwam账号密码。

    使用synciwam.vbs脚本时,要注意一个问题,那就是在你运行synciwam.vbs之前,必须保证iis metabase数据库与active directory中的iwam密码已经一致。因为synciwam.vbs脚本是从iis metabase数据库而不是从active directory取得iwam账号的密码,如果iis metabase中的密码不正确,那synciwam.vbs取得的密码也会不正确,同步操作执行到“updating applications”系统就会报80110414错误,即“找不到应用程序 3d14228d-fbe1-11d0-995d-00c04fd919c1}”。

    好了,到现在为止,iwam账号在active directory、iis metabase数据库和com+应用程序三处的密码已经同步成功,你的asp程序又可以运行了!

    修改成功后,系统会有如下提示:

    ---------------------------------------------------

    经过测试,显示应该是

    wamuserpass: (string) "*******"

    更多相关内容
  • 灰度测试是什么意思

    千次阅读 2021-09-08 07:43:07
    灰度测试就是指如果软件要在不久的将来推出一个全新的功能,或者做一次比较重大的改版的话,要先进行一个小范围的尝试工作,然后再慢慢放量,直到这个全新的功能覆盖到所有的系统用户,也就是说在新功能上线的黑白...

    本文章,百度+论坛+知乎等处查询,了解灰度测试,方便学习。本文章只限学习。文章可能内容多,我进行了网上查询终结,还需细看整理,如有重复内容请见谅,我也正在了解,方便手机携带查看。

    灰度测试就是指如果软件要在不久的将来推出一个全新的功能,或者做一次比较重大的改版的话,要先进行一个小范围的尝试工作,然后再慢慢放量,直到这个全新的功能覆盖到所有的系统用户,也就是说在新功能上线的黑白之间有一个灰,所以这种方法也通常被称为灰度测试。类似于我们通常所说的内测。

    灰度测试就是将自己的产品首先拿出来给一部分目标人群使用,通过她们的使用结果和反馈来修改产品的一些不足,做到查漏补缺,完善产品的功能,使产品的质量得到提高。这样产品尽早的与用户接触能为以后产品的正式发布打下基础。

    定义:灰度测试,就是在某项产品或应用正式发布前,选择特定人群试用,逐步扩大其试用者数量,以便及时发现和纠正其中的问题。

    灰度期:灰度测试开始到结束期间的这一段时间,称为灰度期。

    目前,灰度测试存在两种方式:

    1、软件系统内自带灰度测试发布系统

    2、使用第三方工具来辅助进行

    这两种方法都是可行的。

    灰度测试这种方法可以帮助研究团队快速试验并发现问题并在大规模推向用户之前及时把问题修正过来,很大成度上减少了不少风险的产生,所以灰度测试是很有必要的。要知道只有不断创意并完善的软件才能在激烈的市场竞争中立于不败之地,当有创意的时候,小规模的灰度测试是非常有必要的。不但满足了一部分人抢先体验的愿望同时也可以发展研发团队不容易发现的各种问题,还能收集到真正的用户体验,这些对于优化全新的系统内容都是非常有帮助的,如果没有灰度测试的话,其实和闭门造车的感觉是差不多了,在增加灰度测试以后才能真正把其推向用户。

    灰度测试存在的意义是什么呢?

    现在的许多互联网产品的用户规模都是非常大的,版本更新也比较频繁,每当有新版本进行更新或者上线的时候,新的版本都是要承受非常大的压力,而灰度测试则可以很好的规避这种存在可能性非常大的风险问题。

    灰度发布能及早获得用户的意见反馈,完善产品功能,提升产品质量,让用户参与产品测试,加强与用户互动,降低产品升级所影响的用户范围。

    灰度测试的具体步骤

    第一、确定自己的目标

    既然选用了灰度发布这个方法,就首先要确定自己的目标是什么,比如通过让一部门用户先使用产品,从而通过试用结果和用户的反馈来找出产品的不足,从而想办法来提升产品的品质,还有的除了这个目的之外可能还想要借此机会来推广自己的产品。

    第二、选择策略

    定好目标之后,就要选择策略了,要根据自己产品的规模和功能的多样性来确定互联网灰度发布试用用户的规模和发布的频率,这样才可以提高用户的参与度,全方位的试用产品,这样才能反馈出一个比较全面的结果。包括用户规模、发布频率、功能覆盖度、回滚策略、运营策略、新旧系统部署策略等

    第三、对用户进行筛选

    然后就是要对这些用户进行筛选,用户的选择一定要具有代表性,要选择一部分的新用户和一部分的老用户来交替使用产品,还有就是选择的用户要具有敢问好问的精神,善于发现才能发现问题。选择完用户就是产品系统的部署,然后就是对用户参与的结果进行数据分析,找出产品存在的问题。对用户的筛选包括用户特征、用户数量、用户常用功能、用户范围等

    第四、部署系统

    部署新系统、部署用户行为分析系统(web analytics)、设定分流规则、运营数据分析、分流规则微调

    第五、发布总结

    用户行为分析报告、用户问卷调查、社会化媒体意见收集、形成产品功能改进列表

    第六、产品完善

    第七、新一轮灰度发布或完整发布

    在上述步骤全都完成之后,互联网产品的灰度发布就基本上是完成了,后续最重要的事情就是全身心的投入对产品的改进中,对产品的不足进行完善,如果产品的漏洞比较大,可以进行再一轮的灰度发布,如果只是一些小问题,那么在修改之后就可以正式的发布了。

    什么是灰度发布?
    灰度发布,又名金丝雀发布,或者灰度测试,是指在黑与白之间能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。
    灰度发布是对某一产品的发布逐步扩大使用群体范围,也叫灰度放量。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
    灰度期:灰度发布开始到结束期间的这一段时间,称为灰度期。
    灰度发布的意义
    灰度发布能及早获得用户的意见反馈,完善产品功能,提升产品质量,让用户参与产品测试,加强与用户互动,降低产品升级所影响的用户范围。
    灰度发布步骤

    1. 定义目标
    2. 选定策略:包括用户规模、发布频率、功能覆盖度、回滚策略、运营策略、新旧系统部署策略等
    3. 筛选用户:包括用户特征、用户数量、用户常用功能、用户范围等
    4. 部署系统:部署新系统、部署用户行为分析系统(web analytics)、设定分流规则、运营数据分析、分流规则微调
    5. 发布总结:用户行为分析报告、用户问卷调查、社会化媒体意见收集、形成产品功能改进列表
    6. 产品完善
    7. 新一轮灰度发布或完整发布

    灰度测试环境就是生产环境,生产数据,所影响的也是生产环境,只是范围比测试环境更广,更真实。其实就是小范围的生产环境。类似于游戏内测。

    与现有国内一般的公司发布的做法相比,灰度发布的过程是一个渐进的过程,其实这才是一种正确规范安全的发布过程。正常一个产品开发过程中,会对其进行功能测试,用户体验测试,交互评估等。功能测试可以让产品尽量少的bug;用户体验测试与交互评估等可以在开发过程中,使产品尽可能的满足于用户的使用习惯,以及对功能的可接受程度。但这些都是少部分人的感觉与习惯所产生的结果,只是公司内部的测试+小范围外部测试。

    在标准的软件产品的发布过程中,这充其量只是一个Alpha版本,而一般互联网产品的发布大多数是做到这里就直接上线,替换了原有的版本,这种跳跃式的发布是非常危险的,如果产品影响面大,对项目成员的压力是非常大的。

    灰度发布可以在原有的Alpha版本之后增加了更大范围的外部测试,是一个不断的放量过程,通过这样的发布过程可以是产品的问题暴露出来,而不是影响到全部的用户,最终可以让产品最大程度稳定、适合用户。如果要使用灰度发布,与往常的项目过程不同的是,需要做好提升点的预准备,通过数据分析,日志分析找到改进点;也要考虑在出问题时可以快速的定位到问题,并切换到原有产品;当然放量也是可以有多种多样的,可以通过选取最能让产品改进的用户参与新版本的试用。

    灰度发布可以从业务,功能,性能,用户体验很多方面使产品得以提升,并平滑上线。

    传统软件产品发布过程(例如微软的windows7的发布过程)一般都会经历Pre-Alpha、Alpha、Beta、Release candidate(Rc)\RTM\General availability or General Acceptance(GA)等几个阶段(参考Software release life cycle)从范围来理解,即公式内部—>外部小范围测试->外部大范围测试->正式发布。

    A/Btest其实属于灰度当中的一个小小的分支,做产品,运营数据的都必须要懂。这是国际前沿的产品发布和改版方式,而不是依靠主观去进行。

    灰度测试定义

    灰度测试指的是在同一个时间段内,存在两个不同的应用版本,一个版本叫做黑色版本,而另一个版本叫做白色版本。然后我们通过观测两个同时存在的版本的表现来调整黑色版本和白色版本的比例,如果一切顺利,渐渐地就把所有用户的应用从黑色版本过渡到白色版本。而这种通过共存黑白版本的手段进行测试的过程就叫做灰度测试灰度发布

    灰度测试与A/B测试比较

    灰度发布/灰度测试A/B测试 时间周期一般在新版本发布的早期。版本整个生命周期,都持续不断的做A/B测试。 目的验证新版本工程正确性,如功能特性、性能、可靠性、易用性等。为商业目的,优化用户体验相关的各方面特性。 用户人群一般对用户人群的属性和数量没有特殊要求。对用户人群的属性和数量有较高要求。 是否修改功能特性否,灰度测试过程中一般不修改新版本的功能特性。是,A/B测试是持续不断的修改版本的界面和流程,以便找到最优设计。 实施方法采集数据,分析是否有功能缺陷(bug)、性能问题、稳定性问题、易用性问题等。有规范的过程步骤:提出假设,设定目标,制作版本、分析结果等。有严格的数理统计算法,判断结果

    灰度测试实现方式

    通常情况下,有两种方式来实现灰度测试。第一种是修改代码,通过对代码的修改实现灰度测试的逻辑。修改代码的优点在于开发人员能够非常精细地控制不同版本的细节,无论多么复杂的需求都能够实现,能够较好地满足测试的需求。但是修改代码的方式会较深地侵入代码,同时不能够快速响应需求,开发人员实现需要的功能是需要时间的。

    第二种方法就是通过负载均衡系统实现了,在负载均衡服务器上调整配置,使得用户在访问应用的时候能够自动被分配到不同的版本上去。这种方式的优点在于部署简单,不需要过多的改动。但是这样做就会增加运维人员的负担,改动负载均衡系统的配置具有一定的风险。

    随着云眼A/B测试软件的广泛应用,人们开始利用AB测试软件进行灰度发布和灰度测试,这样不仅能够保证新版的工程正确性,也能保证新版本的商业目的得到科学、准确的验证,并且在整个生命周期里都可以持续不断的优化改进。

    灰度测试指的是系统测试通过后,将测试版本发布到线上环境,替换部分的线上服务器代码进行预测试。当灰度测试结束后,线上版本实现会统一。本质上是上线前的测试,收集用户的反馈。

    A/B测试指的是系统测试通过并发布后,同一个软件功能不同的用户会看到不同的实现方式,收集每个用户的反馈。本质上是上线后的测试,收集用户的反馈。

    灰度测试

    指没有限制的内测。但是还是会限制用户身份,即只有有资格的用户才可以获得内测软件。
    这时一般就是最后一次测试了,然后就是公测版了,可能有较多的bug……

    使用A/B 测试首先需要建立一个测试页面(variation page),这个页面可能在标题字体,背景颜色,措辞等方面与原有页面(control page)有所不同,然后将这两个页面以随机的方式同时推送给所有浏览用户。接下来分别统计两个页面的用户转化率,即可清晰的了解到两种设计的优劣。
    传统的A/B测试,是一种把各组变量随机分配到特定的单变量处理水平,把一个或多个测试组的表现与控制组相比较,进行测试的方式。
    新的A / B测试,不仅仅其范围限制在web分析方面,而是为其注入新生命,即移动设备端分析。Pathmapp联合创始人兼首席执行官亚当Ceresko表示,今天,开发人员需要大大提高优化工具的性能,移动分析已成为A/B测试增长最快的一个领域。

    灰度测试是什么意思?如果您对互联网软件开发行业了解不多,您可能对这个词不太熟悉。事实上,灰度测试是指如果软件要在不久的将来推出新功能,或者进行重大修改,你必须首先做少量的试验工作,然后慢慢增加数量,直到这个新功能覆盖所有系统用户,即新功能上的黑白之间都有灰色,因此这种方法通常也称为灰度测试。

    灰度测试又名金丝雀发布、灰度发布,一种在黑白之间发布平滑过渡的方式。可以对其执行A/B测试,也就是说,一些用户继续使用产品功能A,并且一些用户开始使用产品功能B,如果用户不反对B,则逐渐扩大范围并迁移所有用户到B来。灰度测试可以确保整个系统的稳定性,并且可以在初始灰度级找到并调整问题以确保其影响度。

    灰度期:灰度发布开始到结束期间的这一段时间,称为灰度期。
     



    灰度测试有什么作用?

    灰度测试可以及早获得用户的反馈,改进产品功能,提高产品质量,允许用户参与产品测试,增强与用户的互动,并减少受产品升级影响的用户范围。

    灰度测试步骤:

    1、定义目标

    2、选定的策略:包括用户规模,发布频率,功能覆盖,回滚策略,运营策略,新旧系统部署策略等。

    3、过滤用户:包括用户特征,用户数,用户常用功能,用户范围等。

    4、部署系统:部署新系统,部署用户行为分析系统(web analytics),设置流量规则,运营数据分析和微调流量规则

    5、发布总结:用户行为分析报告,用户问卷,社交媒体意见收集和产品功能改进列表

    6、产品完善

    7、新一轮灰度测试或完整发布



    测试方法

    灰度测试似乎与互联网公司的常见A/B测试相似。外国人似乎没有灰度测试的概念。根据维基百科中A/B测试的定义,A/B测试也称为:A/B/N测试,多变量测试,因此实质上灰度测试可视为A/B测试的特例。只不过为了术语上不至于等同搞混淆,谈谈自己理解的两者的差异。

    灰度发布是对某一产品的发布逐步扩大使用群体范围,也叫灰度放量。A/B测试重点是在几种方案中选择最优方案。

    灰度测试的要点注意

    1、精确的流量分发控制

    这是一切的核心。从运行和维护风险控制的角度来看,有必要在一个精确的范围内控制受影响的流量。在上线前就知道哪部分用户会有问题,而不是真出问题谁受到影响都不知道。一个常见场景是新版本只允许公司内的员工访问它,然后推送到一个城市再到一个省。

    从产品的角度做A/B测试,需要控制测试样本,其中用户是版本A,哪个用户是版本B,应该在发布后修复,而不是一会访问A,一会访问B。传统的负载均衡器策略只能实现粗略的比例分配,并且没有细粒度的流量规则控制。理想的灰度发布系统应具有非常细粒度的流量规则,例如匹配Android用户,匹配特定区域中的用户,甚至组合多个条件以匹配特定人员。

    2、监控系统的支撑

    准确的流量分配只是第一步,获得关键指标的多个版本更为重要。对于操作和维护,可能需要查看系统级指示器,例如错误率,吞吐量,延迟和CPU内存消耗这些系统层面指标。对于产品,可能是由于pv,uv等业务指标的变化。这些需要能够收集和显示数据,以方便后续决策:完全推送还是回滚?使用方案A或B?否则,灰度版本不会带来更多业务推广,也不能帮助您更好地了解业务状态和用户行为。

    3、灵活的发布系统

    从以上描述可以看出,灰度发布不是短暂的过程并且可能持续很长时间。例如,主要框架或系统更新可能会持续很长时间。有可能整个服务在几个月内都是新旧并存,甚至可能需要分别进行两个版本的迭代。从产品的角度来看,它可能更灵活。很可能在线上有五到六个程序来收集数据。每天有了一些新想法都要上一些小版本看效果,每个版本上线后可能都要再各自做优化调整观察效果。这种情况可能线上就永远不会有一个统一的版本灰度反而是个常态来应对不断变化的需求和挑战。

    而发布系统也需要做相应的调整,不在把每个服务看成一个单一版本的运行体,只在更新的短时间内出现多版本共存,只允许全量推和回滚这种粗粒度策略。相反,多版本共存应被视为正常状态,允许迭代每个版本,并且可以在版本之间区分相应的监视日志信息,从而可以将灵活的发布系统与灵活的灰度策略相结合。

    灰度使用黑色调表示物体。 每个灰度对象都具有从 0%(白色)到 灰度

    100%(黑色)的亮度值。 使用黑白或灰度扫描仪生成的图像通常以灰度显示。 使用灰度还可将彩色图稿转换为高质量黑白图稿。 在这种情况下,Adobe Illustrator 放弃原始图稿中的所有颜色信息;转换对象的灰色级别(阴影)表示原始对象的亮度。 将灰度对象转换为 RGB 时,每个对象的颜色值代表对象之前的灰度值。 也可以将灰度对象转换为 CMYK 对象。 自然界中的大部分物体平均灰度为18%。 在物体的边缘呈现灰度的不连续性,图像分割就是基于这个原理。灰度测试 就是测试亮度。

    在一般情况下,升级服务器端应用,需要将应用源码或程序包上传到服务器,然后停止掉老版本服务,再启动新版本。但是这种简单的发布方式存在两个问题,一方面,在新版本升级过程中,服务是暂时中断的,另一方面,如果新版本有BUG,升级失败,回滚起来也非常麻烦,容易造成更长时间的服务不可用。

    为了解决这些问题,人们研究出了多种发布策略,下面我们一一介绍。

    蓝绿部署

    所谓蓝绿部署,是指同时运行两个版本的应用,如上图所示,蓝绿部署的时候,并不停止掉老版本,而是直接部署一套新版本,等新版本运行起来后,再将流量切换到新版本上。但是蓝绿部署要求在升级过程中,同时运行两套程序,对硬件的要求就是日常所需的二倍,比如日常运行时,需要10台服务器支撑业务,那么使用蓝绿部署,你就需要购置二十台服务器。

    滚动发布


    所谓滚动升级,就是在升级过程中,并不一下子启动所有新版本,是先启动一台新版本,再停止一台老版本,然后再启动一台新版本,再停止一台老版本,直到升级完成,这样的话,如果日常需要10台服务器,那么升级过程中也就只需要11台就行了。

    但是滚动升级有一个问题,在开始滚动升级后,流量会直接流向已经启动起来的新版本,但是这个时候,新版本是不一定可用的,比如需要进一步的测试才能确认。那么在滚动升级期间,整个系统就处于非常不稳定的状态,如果发现了问题,也比较难以确定是新版本还是老版本造成的问题。

    为了解决这个问题,我们需要为滚动升级实现流量控制能力。

    灰度发布

    灰度发布也叫金丝雀发布,起源是,矿井工人发现,金丝雀对瓦斯气体很敏感,矿工会在下井之前,先放一只金丝雀到井中,如果金丝雀不叫了,就代表瓦斯浓度高。

    在灰度发布开始后,先启动一个新版本应用,但是并不直接将流量切过来,而是测试人员对新版本进行线上测试,启动的这个新版本应用,就是我们的金丝雀。如果没有问题,那么可以将少量的用户流量导入到新版本上,然后再对新版本做运行状态观察,收集各种运行时数据,如果此时对新旧版本做各种数据对比,就是所谓的A/B测试。

    当确认新版本运行良好后,再逐步将更多的流量导入到新版本上,在此期间,还可以不断地调整新旧两个版本的运行的服务器副本数量,以使得新版本能够承受越来越大的流量压力。直到将100%的流量都切换到新版本上,最后关闭剩下的老版本服务,完成灰度发布。

    如果在灰度发布过程中(灰度期)发现了新版本有问题,就应该立即将流量切回老版本上,这样,就会将负面影响控制在最小范围内。

    ################################################################

    使用脉冲云轻松地实现灰度发布-查看视频

    脉冲云的部署管理可以轻松实现上述的带有流量管理功能的灰度发布。正常编辑应用信息后点击保存,然后脉冲云会提示直接升级或灰度发布。

    直接升级就是使用一般的滚动升级,点击灰度发布后可以人工干预升级过程,进行流量控制。

    选择灰度发布后,就会呈现灰度发布控制面板。

    在这个控制面板上,可以拖拉滑块,快速调整新旧版本的运行副本数量,同时也可以按百分比,将流量导入到新版本上。此外,还可以通过匹配HTTP Header,指定个别用户的流量到新版本上。

    除了匹配用户流量的HTTP请求头,还可以直接指定匹配请求头中的Cookie信息,匹配规则支持精确匹配、包含、正则、前缀、后缀等,甚至还允许反向匹配。

    当确认新版本运行无误后,就可以点击 完成升级 按钮,就会将流量全部切换到新版本上,并且销毁掉所有老版本应用。如果新版本出了问题,可以点击 取消升级 按钮,立即将流量切回老版本,并销毁掉新版本应用。

    总结

    在新版本应用发布时,为了服务器不停机升级,使用灰度发布策略,在灰度发布开始时,使用HTTP Header 匹配指定测试人员的流量到新版本上,然后当新版本内部测试通过后,可以再按百分比,将用户流量一点一点导入到新版本中,比如先导入10%观察一下运行情况,然后再导入20%,如此累加,直到将流量全部导入到新版本上,最后完成升级,如果期间发现问题,就立即取消升级,将流量切回到老版本。

    运用灰度发布,就再也不需要加班到深夜进行停机升级了,在白天就可以放心大胆地、安全地发布新版本。

    A/B测试与灰度发布的理论产品是多维度的,设计体验、交互体验、系统质量、运营支持等等,测试的目的是为了系统最终的交付,一套各方面都足够好的系统,而不是文档上定义的系统,系统是需要不断进化的。测试的质疑贯穿产品的设计到编码到最终的运营过程,并最终促使产品的改善,周而复始。符合互联网思维敏捷的本质。

    1、A/B测试与灰度发布相关的一些术语

    1.1 桶测试(Bucket Testing):这个没有什么地方给出明确的定义,但是通常来说是国外用于测试游泳池是否存在漏水行为的一种比较测试。即将一桶水放到泳池中,分别标明内外水位,放置一段时间后,如果外部水位明显下降(超过XXX英寸),则证明水池漏水。这个和软件测试没有什么直接关系,但是他是一种两个方案之间的对比性测试,用于识别缺陷。

    1.2 多变量测试(Multivariate Testing):这个使用市场营销的一个术语,通常用于在多个变量的复杂环境下,对营销方案效果的比较技术。

    1.3 A/B测试(A/B Testing):Wikipedia的定义,“是Web设计(通常指用户体验)中用于区分两种网页设计对收益最大化目标(如点击率)效果支撑程度的一种试验手段”。主要用于比较两种设计的优劣程度。桶测试(Bucket Test)、多变量测试(Multivariate Testing)是A/B测试的变体,因为可能涉及到多种场景的比较。A/B测试还用于市场营销渠道的比较,这和定义是一致的,因为网页就是一种营销渠道。

    1.4 灰度交付:“灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。”

    2、A/B测试和灰度发布和传统的测试的不同点

    2.1 可以有多个现成的产品来,实实在在的去测试(桶测试)

    2.2 A/B测试是支持多变量测试的一种方式

    2.3 A/B测试时一套系统,是灰度发布的一种实现方式

    到此为止,测试与运维已经集成到一个过程当中了

    3、A/B测试与灰度发布的运用

    3.1 推荐系统之间不同算法的比较,不同变量的比较

    3.2 设计方案中不同方案的比较

    3.3 设计调整,方案调整

    3.4 故障控制

    如果你系统需要优化一些你自己无法预测和控制的领域的时候。

    试试A/B测试吧,有利于控制未来的风险

    数据是优化系统的重要依据 ,想要在哪方面做优化,就在哪方面积累数据。

    后面再写点A/B测试与灰度发布系统实战

    在淘宝仲明的一个访谈中第一次看到灰度测试这个词,其解释是灰度测试的专业说法是Bucket Test。这两个术语都可以互联网应用的测试扯上关系,但是含义还确实不同。

    • A/B测试(A/B Testing):Wikipedia的定义,“是Web设计(通常指用户体验)中用于区分两种网页设计对收益最大化目标(如点击率)效果支撑程度的一种试验手段”。主要用于比较两种设计的优劣程度。桶测试(Bucket Test)、多变量测试(Multivariate Testing)是A/B测试的变体,因为可能涉及到多种场景的比较。A/B测试还用于市场营销渠道的比较,这和定义是一致的,因为网页就是一种营销渠道。
    • 多变量测试(Multivariate Testing):这个使用市场营销的一个术语,通常用于在多个变量的复杂环境下,对营销方案效果的比较技术。
    • 桶测试(Bucket Testing):这个没有什么地方给出明确的定义,但是通常来说是国外用于测试游泳池是否存在漏水行为的一种比较测试。即将一桶水放到泳池中,分别标明内外水位,放置一段时间后,如果外部水位明显下降(超过XXX英寸),则证明水池漏水。这个和软件测试没有什么直接关系,但是他是一种两个方案之间的对比性测试,用于识别缺陷。
    • 测试驱动开发(TDD):Kent Beck在TDD一书中也提到了水桶和编程的关系,“设想把编程看成是转动曲柄从井里提一桶水上来的过程。如果水桶比较小,那么仅需一个能自由转动的曲柄就可以了。如果水桶比较大而且装满水,那么还没等水桶全部被提上来你就会很累了。你需要一个防倒转的装置,以保证每转一次可以休息一会儿。水桶越重,防倒转的棘齿相距越近。 测试驱动开发中的测试程序就是防倒转装置上的棘齿。一旦我们的某个测试程序能工作了,你就知道,它从现在开始并且以后永远都可以工作了。相比于测试程序没有通过,你距离让所有的测试程序都工作又近了一步。现在我们的工作是让下一个测试程序工作,然后再下一个,就这样一直进行。分析表明,要编程解决的问题越难,每次测试所覆盖的范围就应该越小”这个里面实际上和桶测试(Bucket Testing)没有任何关系,仅仅是一个类比,不用桶,用其他机械装置也是一样对比。
    • 灰度交付:百度百科的定义,“灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

    回到正题上,互联网应用在交付上线过程中(运维部门的职能),需要经过灰度交付和A/B测试两个环节,前者用于检验系统是否稳定可靠,满足上线要求,需要收集和分析性能数据来决定;后者用于检验到底新版本好还是旧版本好,需要收集和分析用户访问数据来决定。

    因此结论是灰度交付和A/B测试(桶测试)有不同的目标和手段。

    下图是阿里软件的发布引擎,支持灰度交付。

    灰度测试是什么意思呢?如果对互联网软件研发行业不太了解的话,可能对这个词还是很陌生的,其实灰度测试就是指如果软件要在不久的将来推出一个全新的功能,或者做一次比较重大的改版的话,要先进行一个小范围的尝试工作,然后再慢慢放量,直到这个全新的功能覆盖到所有的系统用户,也就是说在新功能上线的黑白之间有一个灰,所以这种方法也通常被称为灰度测试。

    从目前来看,灰度测试存在两种方式,一种是软件系统内自带灰度测试发布系统,另一种方式就是使用第三方工具来辅助进行,这两种方法都是可行的。

    灰度测试这种方法可以帮助研究团队快速试验并发现问题并在大规模推向用户之前及时把问题修正过来,很大成度上减少了不少风险的产生,所以灰度测试是很有必要的。要知道只有不断创意并完善的软件才能在激烈的市场竞争中立于不败之地,当有创意的时候,小规模的灰度测试是非常有必要的。不但满足了一部分人抢先体验的愿望同时也可以发展研发团队不容易发现的各种问题,还能收集到真正的用户体验,这些对于优化全新的系统内容都是非常有帮助的,如果没有灰度测试的话,其实和闭门造车的感觉是差不多了,在增加灰度测试以后才能真正把其推向用户。

    灰度测试存在的意义是什么呢?要知道现在很多互联网产品都存在用户规模非常大,版本更新过于频繁的问题,每当有新版本进行更新或者上线的时候,新的版本都是要承受非常大的压力的,而灰度测试的使用则可以很好的规避这种存在可能性非常大的风险问题。

    例子:

    摘要:滴滴开放灰度测试是什么情况?滴滴开放灰度测试具体怎么回事?据知情人士透露,滴滴顺风车上周在小范围内开放灰度测试。4月23日,有网友向记者反映,滴滴在内测新的拼车产品,用户需要预约15~30分钟之内出发的车辆,可选择乘车人数。该产品无论使用体验和价格都和原来的顺风车类似。

      滴滴开放灰度测试是什么情况?滴滴开放灰度测试具体怎么回事?据知情人士透露,滴滴顺风车上周在小范围内开放灰度测试。4月23日,有网友向记者反映,滴滴在内测新的拼车产品,用户需要预约15~30分钟之内出发的车辆,可选择乘车人数。该产品无论使用体验和价格都和原来的顺风车类似。


      根据界面新闻拿到的一张截图显示,上海用户已成功显示顺风车预约界面及价格。顺风车的入口位于公众评议右侧。而据滴滴官方表示,公众评议于去年11月2号正式上线,会不定期出现在滴滴的APP内。此前,滴滴内部员工向界面新闻记者透露,顺风车业务线的领导希望今年六月能上线,目前产品已经准备好,不过公司层面还没有做好决策。
      延伸:滴滴顺风车
      滴滴顺风车是北京小桔科技有限公司推出的一款拼车软件,继“滴滴打车”、“滴滴专车”、滴滴企业出行服务后在移动出行领域推出的第四款产品。
      2018年8月24日,温州乐清发生滴滴顺风车司机强奸杀人案件,现嫌疑人已被警方控制。2018年8月25日下午,浙江省道路运输管理局紧急约谈滴滴平台浙江区负责人,鉴于滴滴平台顺风车业务存在重大安全隐患,浙江省道路运输管理局要求滴滴平台立即整改,整改期间暂停其在浙江区域的顺风车业务。
    2:

    灰度:使用黑色调表示物体,即用黑色为基准色,不同的饱和度的黑色来显示图像。 每个灰度对象都具有从0%(白色)到100%(黑色)的亮度值。(注意这个百分比是以纯黑为基准的百分比。与RGB正好相反,百分比越高颜色越偏黑,百分比越低颜色越偏白。科普一下:RGB即Red红色、Green绿色、Blue蓝色。RGB色彩模式是工业界的一种颜色标准,是通过红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,这个标准几乎包括了人类视力所能感知的所有颜色。)

    简而言之,灰度指不饱和的黑色。

    自然界中的大部分物体平均灰度为18%。我们平常所说的黑白照片、黑白电视,实际上都应该称为灰度照片、灰度电视才确切。灰度色中不包含任何色相,即不存在红色、黄色这样的颜色。

    以上可以认为是废话,转入今天的标题。

    2015年5月31日,马化腾在香港大学李兆基会议中心大礼堂举办了一场创业演讲,演讲中爆了一个大料:微信的诞生史。

    微信在诞生之前,在腾讯内部有三个团队在同时做微信,主要竞争者为张小龙的e-mail团队和手机QQ团队。做这个产品之前,腾讯内部并没有给这个产品定一个完整的基调,而是让公司内部形成一个激烈的竞争,通过观察用户对产品的喜好程度和产品的实际完成情况决定上线结果。

    马化腾的灰度机制是这样的:很多公司在一开始做产品定义时,要么确定它是黑的,要么确定它是白的。但是马化腾发现,互联网产品的定义是有用户投票决定的。在一开始,我们不定义它是黑,还是白,有一个灰度的周期。在这个灰度周期里,让用户的口碑决定它是生是死,是白还是黑。

    说的再直接点,这也是马化腾创新上的灰度机制:容忍失败,允许适度浪费,鼓励内部竞争内部试错。马化腾说过,在产品研发过程中,我们还会有一个困惑:自己做的这个产品万一失败了怎么办?“我的经验是,在面对创新的问题上,要允许适度的浪费。怎么理解?就是在资源许可的前提下,即使有一两个团队同时研发一款产品也是可以接受的,只要你认为这个项目是你在战略上必须做的。很多人都看到了微信的成功,但大家不知道,其实在腾讯内部,先后有几个团队都在同时研发基于手机的通讯软件,每个团队的设计理念和实现方式都不一样,最后微信受到了更多用户的青睐。你能说这是资源的浪费吗?我认为不是,没有竞争就意味着创新的死亡。即使最后有的团队在竞争中失败,但它依然是激发成功者灵感的源泉,可以把它理解为内部试错。”

    总结一下,马化腾的“灰度机制”包括7个维度

    具体内容,请参考:《马化腾致信合作伙伴:灰度法则的七个维度

    1. 需求度:用户需求是产品核心,产品对需求的体现程度,就是企业被生态所需要的程度;
    2. 速度:快速实现单点突破,角度、锐度尤其是速度,是产品在生态中存在发展的根本;
    3. 灵活度:敏捷企业、快速迭代产品的关键是主动变化,主动变化比应变能力更重要;
    4. 冗余度:容忍失败,允许适度浪费,鼓励内部竞争内部试错,不尝试失败就没有成功;
    5. 开放协作度:最大程度地扩展协作,互联网很多恶性竞争都可以转向协作型创新;
    6. 进化度:构建生物型组织,让企业组织本身在无控过程中拥有自进化、自组织能力;
    7. 创新度:创新并非刻意为之,而是充满可能性、多样性的生物型组织的必然产物。

    下面说说灰度上线

    楼主在去哪儿工作时,发现自己和同事手机里的APP展示页面不同,于是就问什么情况,为什么没有自动更新。PM告诉我是ABtest,当时还不知道什么意思。

    先来看看百度百科的定义:

    灰度发布:是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

    传统的产品研发模式大致可以分为:

    产品调研-架构评估-产品启动-需求分析-产品设计-产品开发-产品发布

    七大阶段。

    实际情况中,你会发现,从产品调研到产品发布,总是一拖到底。这样的做法对于范围比较大,周期比较长的项目,尤其是用户体验类项目而言,存在较大的弊端:我们很可能在没有足够清楚用户需求的情况下,定制了过多的辅助功能,这样即拉长了项目周期,又无谓的投入了过多的人力。

    灰度上线,简单点理解就是按产品需求优先级,抽出核心需求,在满足用户基本要求的情况下快速上线,并通过限制流量、白名单等机制进行产品试用,以此收集用户的意见,从而萃取出用户潜在的需求,形成后续更有针对性的设计方案。

    和传统研发模式相比,这么做唯一的区别就在于将原先一锅粥式的需求和功能点进行了轻重缓急的排序,并以此将项目从原来的单长线作战转化为多迭代短线循环,让产品的生命周期不再昙花一现。

    如此一来,需求分析阶段显得尤为关键,我们必须清晰的将需求按优先级归纳分类为几个序列,如:p1,p2,p3…核心功能和必备的体验在p1序列,辅助功能点和辅助型体验列在p2序列,争执不定的需求点可以放在p3序列。需求排序后,我们可以将项目发布点有序的分成(>2期),第一期只确保主要的核心功能和基础体验快速灰度上线,随后通过用户访谈、产品的tracker&session数据、业务数据等手段分析出用户对产品的真实反应,并以此调整二期需求,该加的加,该砍的砍,做到有的放矢。

    下面是百度百科定义的灰度发布的步骤:

    1. 定义目标;
    2. 选定策略:包括用户规模、发布频率、功能覆盖度、回滚策略、运营策略、新旧系统部署策略等;
    3. 筛选用户:包括用户特征、用户数量、用户常用功能、用户范围等;
    4. 部署系统:部署新系统、部署用户行为分析系统(web analytics)、设定分流规则、运营数据分析、分流规则微调;
    5. 发布总结:用户行为分析报告、用户问卷调查、社会化媒体意见收集、形成产品功能改进列表;
    6. 产品完善;
    7. 新一轮灰度发布或完整发布。

    虽然,灰度、灰度机制、灰度发布之间的概念完全不一致,但是都包含着从黑到白的过程。所以,瞎扯了一通。

    展开全文
  • 原因有点:1、版权问题,国内一些视频的版权问题。2、国内视频都被转烂了。 那么,国外有哪些视频网站? 1、YouTube,世界上最大的视频网站。YouTube上拥有各种形式的视频,它提供的服务包括电影频道、视频...

    在短视频这一风口下,国内各大社交媒体、个性化资讯平台、新闻客户端等纷纷将短视频作为提升用户活跃度、增加使 用时长的利器,不惜斥巨资投入。适合碎片化消费场景的短视频越来越受追捧,而各个平台的短视频竞争也就越来越激 烈。微博当然也不列外。

    在这里插入图片描述

    那么,上百万的播放量如何做到呢?

    首先做视频引流,你得有视频渠道,一种是自己制作,另外一种是搬运,自己自作难度太大,有能力的朋友可以投入试 试。关于搬运,大部分人都是去快手等国内短视频平台搬运,其实这里小编还是建议去国外搬运比较好。

    原因有两点:1、版权问题,国内一些视频的版权问题。2、国内视频都被转烂了。

    那么,国外有哪些视频网站?

    1、YouTube,世界上最大的视频网站。YouTube上拥有各种形式的视频,它提供的服务包括电影频道、视频上传、付费频 道、直播、翻译字幕等,因此可以去此网站寻找各种视频影视,再放到微博上。

    2、Twitter,是一家社交网络及微博客服务的网站,也是全球互联网上访问量最大的十个网站之一。基于社交性和微博差不多,Twitter上也有很多视频,网友会上传许多关于奇闻趣事的相关视频,可运用的内容很多。

    3、MetaCafe,是一家视频分享站点,也是全球最大在线视频网站之一,它通过奖励制度吸引人们上传了大量的原创视频。该网站所推荐的内容大多属于软色情,而且根据他们的机制,播放量高的视频会显示在头部,在尾部则是其他个性 化的视频。

    4、Vimeo,是一个高清视频播客网站,它独特之处在于允许上传1280X700的高清视频,同时还支持通过Email把手机里的视频上传,并且上传之后可以保存成2个版本:高清版和普通版。更让大家高兴的是它的源视频文件可以自由下载,而且 下载的视频不会有网站的logo。

    5、Dailymotion,是一家视频分享网站,用户可以在该网站上传、分享和观看视频。它被人所推崇的特点之一即其视频可以使用HTML5视频元素然后支持开放格式ogg的视频,并且它比同类型的其他Flash视频分享网站画面更高清。

    6、LiveLeak,也是一家视频分享网站,侧重时事、政治、世界大事记等方面视频分享。这个网站上的视频以地方时政及现实生活为主,比如各地的战争场景。

    7、Hulu,是一家美国的视频网站,它可以帮助用户在任意时刻、地点及方式查找并欣赏专业的媒体内容,用户可以在自己的博客或社交网站上重新上传整部影片或任何片断。视频内容包括电视剧、电影和剪辑等,还有一些电影、电视节目 及部分网络工作室的幕后花絮。

    8、Viewster,是一家按需网络流媒体供应商,它可以提供一系列广告支持的免费电影,在此网站看电影不用安装软件也不用注册。

    9、Twitch,是一个面向视频游戏的实时流媒体视频平台。该网站上的视频多为关于游戏类,几乎涵盖了市面上所有游戏种类,视频游戏玩家可以实时地观看其它玩家的游戏情况,从而可以从其他玩家那里学习游戏战略。

    10、Netflix,是一家在线影片租赁提供商,公司能够提供Netflix超大数量的DVD,而且能够让顾客快速方便的挑选影片,同时免费递送。

    展开全文
  • 什么是入?

    千次阅读 多人点赞 2019-04-29 21:22:18
            我写博文不一定是按照一个系列来写得:比如今天写得是内核相关的博文,那么我不一定...而是今天遇到了什么问题,然后觉得大家工作中可能也会遇到,或者是感觉这个方法有价值,写下来和...

            我写博文不一定是按照一个系列来写得:比如今天写得是内核相关的博文,那么我不一定这几天都是写有关内核的博文。因为我不是研究人员,我是工作人员,不是天天研究一个问题。而是今天遇到了什么问题,然后觉得大家工作中可能也会遇到,或者是感觉这个方法有价值,写下来和大家共享还有供自己以后查看的资料。而已。

            今天我突然遇到一个问题,是工作中同事随口说的一个问题。我觉得有价值,所以记录下来,供大家参考下。问题就是:什么是可重入?其实这个问题在面试的时候也可能会问到。这里先不分什么可重入函数,可重入代码之类的。只先来说下什么是可重入?

            提到可重入,首先要有前提条件:内核环境(内核中常有中断异步发生)或者多进程、多线程,总之是异步环境下。然后我用我自己的话来解释下什么是可重入:很简单,就是可以重新再进入。就是在运行某个函数或者代码时因为某个原因(中断或者抢占资源问题)而中止函数或代码的运行,等到问题解决后,重新进入该函数或者代码继续运行。其结果不会受到影响(和没有被打断时,运行结果一样)。那么这个函数或者代码就称为可重入的,个人为了好记所以理解为:可以再重新进入。

            内核中断情况下:用可重入函数来分析下在内核发生中断时运行情况,当CPU执行到该函数内时,突然接到一个中断信号,CPU将对保存现场(把一些参数,返回地址,执行状态之类的保存到堆栈中去),然后去执行中断服务程序;当执行完中断服务程序后,CPU就会还原现场,把一些参数,返回地址,执行状态之类的进行出栈,然后CPU再次进入该函数,从上次执行的地方开始执行,最后得到的结果记为:A。另一种情况下就是在执行该函数时内核没有发生中断,CPU一直都在该函数内运行,最后得到的结果记为:B。那么如果结果A和结果B相等(每一次都要相等,因为一两相等可能是偶然性),就可以说该函数是可重入函数。即:如果执行结果和没有发生中断时执行得到的结果是一样的就表明该函数是可重入的。(是不管有没有异步事件发生,该函数执行的结果都是一样的才算是可重入函数)。可重入代码也是一样的。其实应该说明下,上面情况的本质就是服务子程序能不能修改函数中所要操作的变量,如果能修改的话该函数就不是可重入的。因为运行函数时,发生中断后,调用中断服务子程序,中断程序修改了函数中接下来要操作的变量数据;等中断程序结束后,函数继续运行,但它没察觉操作的变量其实已经被更改了;那么得到的结果不可能每次都是一样的了。

            多进程多线程情况下:用可重入函数来分析下其在多进程环境下的运行情况,假设有2个进程或者线程都可以。当进程1 执行到该函数时,发现缺少了一个执行下去的资源(如果没有该资源,进程就不能执行下去),于是进程就会循环等待其他占有该资源的进程释放(其实就是监听拥有该资源的进程,等待它把资源释放)。就在进程1 循环等待资源释放时,假设有个进程2 在修改进程1 中本来要用来下一步操作的数据。当进程1获取到资源后,会从等待的地方开始继续执行下去,不会检测操作的数据是否改变过,CPU也不知道下一步所要操作的数据其实早就被其他进程做了手脚。所以如果进程2(或者其他进程)能修改函数中的变量,那么该函数就不是可重入函数了。因为你不知道其他进程怎么修改函数中的变量,所以得到的结果也是未知的。上面说到的循环等待资源,其实是为了大家好理解特意扩大了时间段(好让其他进程去修改数据)。在实际中就算进程1 不循环等待资源的释放,其他进程也有可能修改掉函数中的变量。所以只要函数中的数据能被多个进程或者线程共享,那么这个函数就一定不是可重入函数了。

            不可重入会带来不能预见的结果,尤其在内核中,如果操作不当会让系统直接死掉。所以内核代码一定要是可重入的。

            代码实现:用简单代码来说明下情况吧(在用户空间,多进程或者多线程环境)

             

            用内核中断情况来分析:

                    发生中断情况:CPU开始在test1()函数中执行,当执行完第13行时,突然发生中断;CPU就会保存现场,然后去处理中断服务子程序,假设中断服务子程序是test2()函数;中断程序test2()函数中会把global变量自增,现在其实 global = 2 了;当处理完中断程序test2()后,还原现场,CPU重新到test1()函数中第14行继续执行;因为global是全局变量,大家都共享同一个。所以这时候的global其实是等于2了。但CPU不知道global被修改过了,或者说不去管它有没有被修改过。而继续往下执行,得到的结果为: 4

                    没发生中断情况:没发生中断就好计算了,直接顺序执行到底。最后结果为: 2

                    所以两种情况下得到的结果不一样,那么说该函数不是可重入的。

            用多进程多线程情况来分析:

                    这里没有用循环等待资源释放,但也能说明问题。首先进程 1 运行到第13行代码时,睡眠10秒(10秒对CPU来说是非常漫长的时间);刚好进程 2运行到第14行,那么最后test1()函数运行的结果为:4; 如果进程1 执行第13行时,进程2还没有执行第12行时,那等进程1醒来执行第14行的时候,进程2 还没有醒来,来不及执行第14行。那test()函数运行的结果为:2;又或者进程2 一直就没被调用过,那结果也是为:2;所以说这是个不能预料到的结果,那么该函数也是不可重入的了。

            最后来说下可重入函数(可重入代码也一样)有什么条件:

            不能含有静态(全局)非常量数据;不能返回静态(全局)非常量数据的地址;不能有指向alloc申请的内存变量;只能处理由调用者提供的数据;不能调用(call)不可重入的函数(有呼叫(call)到的函数需满足前述条件)。其实总结起来就一句话不能有可被其他函数或者代码所共享的数据。所以在写有关可重入函数或者代码时,所有函数内都应该只处理本函数内的数据,而不要去操作共享数据,也不要通过地址去操作其他函数内部的数据。

    展开全文
  • 双路cpu是什么意思?下面就一起来了解一下。双路CPU是指计算机系统用块独立的物理CPU,整套系统靠主板协调块同时工作,性能理论上是CPU的倍,双CPU一般应用于服务器高计算要求的系统上,由于高工耗和高成本,且...
  • 什么是重定位?为什么需要定位?

    万次阅读 多人点赞 2018-06-15 17:30:15
    1、链接地址和运行地址。①运行地址,顾名思义就是程序运行的时候的地址,也就是你用工具将代码下载到RAM的...为什么需要链接脚本指定地址呢?你想一下,在c语言编程中,当我们需要调用一个A函数的时候,编译器是...
  • 2020 网络安全保日记

    千次阅读 2020-11-27 16:11:17
    2020 年双节前夕,国内...安保工作如火如荼,天存信息的技术工程人员也相继奔赴各个信息工作现场。 一、安全措施与前期建设 1.1 个人心理建设 轮流值守在三个重点客户的工作现场期间,我需要时刻紧盯日志审计平台,
  • (你或许不知道t检验的理论,这里的例子目的在于给读者一个大致的印象,什么是“真正的”统计输出。t检验的完整介绍将在第5章给出。) 参数mu=22.5对一个形式参数mu赋值,其中的mu代表希腊字母__,通常用来表示理论...
  • 并且同学间分差很小,数学分析学分又,加的这五分足够在期末排名中超过到三个人。突然给谁加上五分都不公平。大家都不希望别人额外多出五分,又不想自己占这个便宜影响同学关系。以班为单位看,我们只有负收益。...
  • 一个模块这个概念比较抽象,可以说是一个编程语言文件,也可以说是一个人所作的工作,也可能说是一个具体功能。 无论如何,模块之间都要有一定的联系,比如说我的网络链接模块需要用你数据库模块的数据,这个懂吧。...
  • slam是什么意思?一文带你读懂SLAM

    万次阅读 2018-09-17 14:11:10
    这带来了定位、场景分类上无可比拟的巨大优势。同时,视觉信息可以较为容易的被用来跟踪和预测场景中的动态目标,如行人、车辆等,对于在复杂动态场景中的应用这是至关重要的。 通过对比我们发现,激光SLAM和...
  • 死锁、活锁和饥饿是什么意思

    千次阅读 多人点赞 2021-04-14 23:52:46
    死锁是指个或者个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,他们将无法推进下去。 如果线程的智力不够, 且都秉承着“谦让”的原则,主动将资源释放给他人使用,...
  • 阻抗匹配是什么意思?阻抗匹配原理详解

    万次阅读 多人点赞 2019-06-12 20:00:53
    阻抗匹配是什么意思_阻抗匹配原理详解 -------本文轉載自<...  本文主要详解什么是阻抗匹配,首先介绍了输入及输出阻抗是什么,其次介绍了阻抗匹配的原理,最后阐述了阻抗匹...
  • 纸张多少克代表什么意思

    千次阅读 2019-01-16 16:30:07
    不过是为了在现实工作中方面顾客选用适宜厚度的纸张来制作合适产品时使用的一种相对概念。    一、纸张形态  从造纸厂制造出来的纸张,一般有种形态:1. 卷筒纸、2. 平板纸。  1. 卷筒纸:卷筒纸就是卷筒...
  • 从今天开始,我们会开启“小教程”的兄弟栏目——小科普,给大家介绍在配电脑或玩游戏过程中经常会遇到的专业名词。 第一期“小科普”我们来讲讲游戏中经常会遇到的一个画面选项——垂直同步 ...它有什么缺点吗?
  • TCP是什么?看完你就知道了

    千次阅读 多人点赞 2019-11-13 01:39:54
    当数据包丢失的时候,TCP会根据传策略(后面会介绍)进行消息传,传策略包含快速传,还有超时种场景。 3.4、数据段数据校验和 TCP校验和 (Checksum)是一个端到端的校验和,由发送端计算,然后由...
  • socket是什么意思(1)

    万次阅读 多人点赞 2016-04-12 09:23:54
    SOCK_DGRAM 所做的校验工作少,所以效率比 SOCK_STREAM 高。 QQ 视频聊天和语音聊天就使用 SOCK_DGRAM 传输数据,因为首先要保证通信的效率,尽量减小延迟,而数据的正确性是次要的,即使丢失很小的一部分...
  • 波特率9600是什么意思  波特率是一个电子信号上的术语,用于描述信道的数据传输速度。所谓信道,可以是无线的,也可以是有线的,说白了就是个东西之间传输数据。 波特率通常单位是bit/s,也就是 二进制位/秒。...
  • 先理解ACK的基本工作原理,当发送端发送第N-1个包后,接收端答复的ACK序列号实际上跟发送端发送下一个包,也就是第N个包的序列号一致。 假设有个主机ISN是5000,发送500字节报文至接收方。一旦报文接收之后,接收端...
  • DevOps工程师到底是做什么的?

    万次阅读 2019-07-20 11:01:00
    点击上方“朱小厮的博客”,选择“设为星标”做积极的人,而不是积极废人DevOps是当前的最新趋势,但是有很多朋友还是不知道DevOps工程师到底是做什么的?DevOps工...
  • 大学计算机系最努力的同学都是如何学习的?

    万次阅读 多人点赞 2021-06-21 09:15:04
    经常会被同学们问到这个问题,要怎么努力才能找到好工作? 学习好就能进好公司? 屁! 被学校教育坑的一把鼻涕一把泪的老学长来回答一波。 我上大学时,连续三年得过国家励志奖学金,英语过六级,以为软考有用,...
  • 面试官:说说什么是 Java 内存模型(JMM)?

    万次阅读 多人点赞 2021-05-05 23:23:20
    本文禁止转载 1. 为什么要有内存模型...在面试中,面试官经常喜欢问:『说说什么是Java内存模型(JMM)?』 面试者内心狂喜,这题刚背过:『Java内存主要分为五大块:堆、方法区、虚拟机栈、本地方法栈、PC寄存器,ba.
  • 车辆识别

    万次阅读 多人点赞 2019-04-28 17:35:00
    这是一篇语言严谨优美,结构分明清晰,内容充实丰富的文章,特别值得一看。 题目:A Deep Learning-Based Approach to Progressive Vehicle Re-...大部分现有的车辆识别方法实现了有限的表现,因为这...
  • 一文带你了解爬虫

    万次阅读 多人点赞 2019-06-25 08:42:07
    前段时间我妈突然问我:儿子,爬虫是什么?我当时既惊讶又为难,惊讶的是为什么我妈会对爬虫好奇?为难的是我该怎么给她解释呢? 老板:小明给你个重要任务。 小明:就算996我也在所不辞(第一次接到老板的直接需求...
  • 装不能正常工作 更新某些“继承的窗口小部件”中的值时丢失导航器状态 等等… 但是这一切的原因是什么?我们如何解决它? didUpdateWidget问题 注意:在本节中,我将详细介绍FutureBuilder的工作...
  • 01近年来IT行业火热,有些人转行去学编程,IT培训机构就应运而生了。但培训完之后就发现了这样一个问题,刚从培训机构出来的没有工作经验工作该如何找工作?后台有位读者分享了他的求职经历:我...
  • Nginx是什么 ? 能干嘛 ?

    万次阅读 多人点赞 2019-02-18 10:22:00
    明白了什么是正向代理,我们继续看关于反向代理的处理方式,举例如我大天朝的某宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了,此时就出现了一个大家耳熟能详的...
  • 交换机工作原理 交换机负责局域网内主机之间的数据转发 交换机内部有一个MAC地址表,记录了MAC地址与交换机端口的对应信息,当数据需要转发时主机将数据包发送给交换机,交换机将数据包中的源地址映射到端口,并缓存到...
  • 【转】CT的FOV是什么含义

    千次阅读 2021-08-27 11:36:37
    在光学中FOV是什么意思 - :视场角(FOV): 一个光学系统所能成像的角度范围. 角度越大, 则这个光学系统所能成像的范围越宽, 反之则越窄. 在实际产品当中, 又有光学FOV和机械FOV之分, 光学FOV是指SENSOR或胶片所能真正...
  • 什么是重参数化;2.参数化的应用——增强模型性能;3.参数化的应用——模型裁剪;4.参数化的应用——NAS;5.关于结构与参数的思考。 首先,丁肖汉介绍了参数化的概念。 部署时的模型需要一些参数来完成推理...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 180,564
精华内容 72,225
关键字:

两重工作是什么意思