肉毒杆菌多久打一次打到神经上会怎样 我现在打了神经痛得厉害1图片搜索拉菩萨具体随时随刻入团申请书傻吧啪啪吧1

&p&没人说说咸海中间那个岛吗?生化危机BIOHAZARD这个单词鼎鼎大名啊!&/p&&p&挖个坑吧&/p&&hr&&p&半个月后,我终于来填坑了!&/p&&p&本文内容收集整理自网络,其中大部分内容来自原作者&a class=&member_mention& href=&//www.zhihu.com/people/9c659e319ba8ec59abe5eb633ccc99c7& data-hash=&9c659e319ba8ec59abe5eb633ccc99c7& data-hovercard=&p$b$9c659e319ba8ec59abe5eb633ccc99c7&&@眠眠&/a& 的 &a href=&https://zhuanlan.zhihu.com/mianmian& class=&internal&&眠眠冰室&/a&&/p&&p&本文有大量的文字和图片内容,请谨慎阅读。&/p&&p&&br&&/p&&p&&b&一、斯维尔德罗夫斯克&/b&&/p&&p&&br&&/p&&p&在《生化危机3》的结局,政府为了遏制浣熊镇的那场可怕事故,最终选择的方案是用一枚核弹彻底毁灭了这个城市。然而在现实里,这种办法可能并不一定真的像游戏中那么简单有效,一了百了。&/p&&p&这起由炭疽引发的大规模炭疽热,也被称为历史上的 “生物切尔诺贝利”。&/p&&p&1979年,一份由苏联流亡者经营的小报登了一条惊人的消息:斯维尔德洛夫斯克州首府叶卡捷琳堡的一家军工厂发生爆炸,泄露出的致命细菌造成上千人死亡!由于当时苏联已经签署了著名的《禁止生物武器公约》,因此这条消息迅速引起了西方国家的注意。他们纷纷指责苏联军工厂生产生物武器,违反了公约的规定。不过,莫斯科当局迅速做出反驳,他们宣称是&b&“食用肉类遭到了炭疽的污染,进而导致有人得病死亡”&/b&,并且否认了任何关于违反联合国公约的指控。但事实上,苏联人已经成功掩盖了一起历史上最严重的生化武器泄露事故——&b&斯维尔德洛夫斯克炭疽泄露事件&/b&。&/p&&p&虽然苏联的炭疽泄漏与恐怖分子无关,但却揭露了“生化武器”禁而未止的事实,让人不寒而栗。&/p&&p&又因为苏联当局的隐瞒,这起恶性事件直到苏联解体后,真相才一点点浮出水面。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-befb8fe40c9b97b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&500& data-rawheight=&230& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic2.zhimg.com/50/v2-befb8fe40c9b97b_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/50/v2-3d4d80ae86e57aaf7db84e0_b.jpg& data-size=&normal& data-rawwidth=&637& data-rawheight=&354& class=&origin_image zh-lightbox-thumb& width=&637& data-original=&https://pic3.zhimg.com/50/v2-3d4d80ae86e57aaf7db84e0_r.jpg&&&figcaption&1979年的叶卡捷琳堡,城内一片熙熙攘攘的热闹景象&/figcaption&&/figure&&p&1979年春天,莫斯科以东的一座城市 斯维尔德罗夫斯克 (Sverdlovsk,现属俄罗斯叫叶卡捷琳堡), 出现了一种 怪病 。&/p&&p&据当时苏联的报道,这次疾病的爆发至少有近一百名居民患病。&/p&&p&起初,病人的症状与流行性感冒极度相似,都是发热、干咳、胸痛等。&/p&&p&但几天后,他们的病症便直接升级为高热、呼吸困难、休克,以及大量内出血等多种严重并发症。&/p&&p&很快,68人死于非命。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-958ebf02fe8c6ff9c15d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&400& data-rawheight=&300& class=&content_image& width=&400&&&/figure&&p&虽然后来又出现了一些新的死亡病例,但确切的死亡人数已无法查证。&/p&&p&只是当时负责该城流行病爆发的贝比奇博士回忆道:&/p&&p&最严重时,有的人直接死在家中,或是行驶的电车上,一切都来得那么突然,根本来不及叫救护车。&/p&&p&当时的克格勃(苏联国家安全委员会)一致对外宣称,这是市民在私人屠宰场,购买并食用了被炭疽杆菌污染的坏肉,引起的 肠炭疽 感染 事故。&/p&&p&但事情又怎会如此简单?&/p&&blockquote&1979年4月的一天,前苏联工业重镇斯维尔德洛夫斯克市(Sverdlovsk,现名叶卡捷琳娜堡)的24号医院里,忽然送来了三位症状相似的病人,他们都表现为发高烧、头痛胸闷、喘不过气。&br&接手这几位病人的,是24号医院呼吸科的主治大夫玛格丽特·伊莉延科(Margarita Ilyenko)。她一开始以为是肺炎症状,但很快发现病人的病情恶化比他想象得要迅速得多。刚刚第二天凌晨,三位病人中就有两名已经死亡了,剩下的一名也奄奄一息:他的口鼻不断溢出渗血的黏液,因为呼吸极度困难已经陷入了昏迷。&br&就在第二天,城市中另一家20号医院里,也出现了同样的事情。&br&“我们这儿有几个病人很不对劲,高烧不退,一直剧烈咳嗽,还不断呕吐……”20号医院的呼吸科主治大夫雅科夫·克利普尼策尔(Yakov Klipnitzer)通过电话向伊莉延科焦虑地讨论病情。&br&“我们这里也是,一天之内大厅里就挤满了病人,病床上到处都是打着寒颤的人,很多病人的皮肤上都长出了黑色的水泡,看起来很恐怖。”伊莉延科回应道。&br&“这是怎么回事?难道是某种传染病吗……”&br&医生们的猜测并没有错,这些病人们的确感染了什么,只是他们从来没有接触过类似的病例,也不知道该如何医治。&br&短短一天之内,死亡人数就急剧上升到数十名,很快24号医院的停尸房里已经堆满了尸体,死神在这座中型城市里肆虐着……所有市民都开始惶恐起来,但却不知道这瘟疫是从何而起。&br&通过整理病人的档案,伊莉延科发现了病人们的某种共性:他们似乎都来自于城市32区,也就是奇卡洛夫斯基区的一家陶瓷厂。难道这家陶瓷厂内存在某种感染源吗?&br&此刻的陶瓷厂,已经暂时封闭。身穿严密防护服的疾控中心主任维克托·罗曼诺科(Viktor Romanenko)正在安排消毒人员不停地用氯气喷洒消毒。如果陶瓷厂正常工作时,可以透过厂房巨大的窗户,看见工厂内部挤满了上百名忙忙碌碌的工人。&br&很快,政府对外公布了结论,这是因为陶瓷厂工人们集体食用了某私人屠宰场贩卖的,被污染的肉类,才导致的瘟疫死亡事件。&br&“他们纯粹在胡扯,”在这家厂子上班的尼古拉·布米斯特罗夫(Nikolai Burmistrov)根本不相信这种解释,“我们很多人也吃了他们家的肉,为啥我们都没事?”&br&工人们的质疑是完全有道理的,特别是结合当时苏联的国际环境,再考虑到斯维尔德洛夫斯克市的城市定位,就不难猜测到,政府一定在隐瞒着某种可怕的真相……&/blockquote&&p&这样一看,斯维尔德罗夫斯克的炭疽感染事件,确实有蹊跷。&/p&&p&首先在历史上,就算是感染率最高的皮毛工人,都未曾出现过如此大规模的炭疽感染死亡事件。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-1fad64dd60a796de46aa_b.jpg& data-size=&normal& data-rawwidth=&677& data-rawheight=&1024& class=&origin_image zh-lightbox-thumb& width=&677& data-original=&https://pic4.zhimg.com/50/v2-1fad64dd60a796de46aa_r.jpg&&&figcaption&斯维尔德罗斯克地区炭疽杆菌50公里直线感染区域。来源:1994年《科学杂志》&/figcaption&&/figure&&p&而且,仔细观察感染者在地图上的分布,病人竟都处于一条直线上。&/p&&p&引用后来负责调查此事件的哈佛生物学教授马修·梅塞尔逊(Matthew Meselson)的说法就是:“工人们吃肉并不会造成50公里内直线型区域感染的分布形状,只有风可以做到这一点”。他的妻子珍妮·吉列(Jeanne Guillemin)同样参与了此事件调查,并在1999年发布了一本专门介绍此事件的书:《炭疽:致命疫情的调查》(Anthrax: The Investigation of a Deadly Outbreak)。书中提到不仅仅是工人和市民,当地还有很多牲畜也同样感染了炭疽。&/p&&p&再结合当天的天气情况,当时风向正是朝着陶瓷厂刮过去,那么传播原因也就不言自明了。如此一来剩下的谜团只有一个:为什么炭疽会从19区的生化实验室里泄露出来?&/p&&p&答案来了:&/p&&p&冷战结束后逃到西方的苏联生物备战研究所副主任肯·阿里贝,他是一名哈萨克斯坦人,写于1999年的其个人回忆录名称正是取自著名电子游戏:《生化危机》&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-773ceeec717b3a_b.jpg& data-size=&normal& data-rawwidth=&330& data-rawheight=&492& class=&content_image& width=&330&&&figcaption&肯·阿里贝的回忆录《生化危机》&/figcaption&&/figure&&blockquote&“第19号营地是最繁忙的生化武器工厂,工人们三班倒地轮流工作,为苏联军火库制造一种干燥的粉末状炭疽武器。这是一项充满压力和危险的工作,发酵的炭疽菌必须从它们的液体基中分离出来,然后才能被磨成粉末,以便在弹头爆炸时形成气溶胶。尽管厂区里面的工人会定期接种疫苗,完全不用担心被炭疽感染,但是隔绝炭疽菌与外部世界接触的唯一一道防线,就是干燥机上面的排气管过滤网。在每次换班的时候,干燥机都会被关闭,进行例行检修维护。&br&在3月30日下午,技工在进行例行检修的时候发现一台干燥机的过滤网被堵住了,于是他们便将这个滤网拆下来清洗,并且准备让晚班的同事将滤网装回去。根据苏联军队的规定,当天下午的值班主管尼古拉中校,应该要在记录本上记下滤网已经被拆下的备注。但是这位中校看起来似乎非常急切地想要回家,或者只是他的确太累了,他忘记在记录本上记下关于滤网的信息!&br&当晚班的值班主管上工的时候,他没有在记录本上发现任何与滤网相关的信息,于是这位主管便让工人像往常那样启动机器,继续工作。就这样,武器级的炭疽病菌在干燥机的废气推动下,飞散到夜空之中。数小时后,操作干燥机的工人惊讶地发现,干燥机的滤网居然还放在地上!尽管他们迅速地把滤网装进了机器,但是大祸已经酿成了:一阵凉爽的晚风将致命的炭疽病菌带到了附近的陶瓷制品厂,感染了在这里上班的夜班工人,几乎所有工人都在一周之内因为病发死亡了!&br&在疫情爆发之前,斯维尔德洛夫斯克市政府当局完全被蒙在了鼓里。随后,军队和苏维埃高层迅速采取了掩盖行动。军队在疫区周边设立了隔离区,而苏联高层则对外宣称被污染的肉类是罪魁祸首。数百只流浪狗因此被枪杀,而黑市食品小贩则因‘传播受污染的食物’而被捕。KGB的特工人员摧毁了医院的记录和疫情的疫情报告,所有受害者的尸体被沐浴在化学战消毒剂中,以清除炭疽孢子留下的证据。&br&当地的领导人显然已经获悉了工厂里有危险物质泄露,他命令市政工人擦洗和修剪城市里的树木,喷洗道路和屋顶。结果,刚刚沉淀下来的炭疽孢子被工人们再次搅动,形成气溶胶继续扩散,导致城市中产生了多例皮肤炭疽病。”&/blockquote&&figure&&img src=&https://pic2.zhimg.com/50/v2-eaffb11719d_b.jpg& data-size=&normal& data-rawwidth=&896& data-rawheight=&618& class=&origin_image zh-lightbox-thumb& width=&896& data-original=&https://pic2.zhimg.com/50/v2-eaffb11719d_r.jpg&&&figcaption&19营区上空&/figcaption&&/figure&&figure&&img src=&https://pic2.zhimg.com/50/v2-390ab27cb5fa910e4d62_b.jpg& data-size=&normal& data-rawwidth=&600& data-rawheight=&387& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic2.zhimg.com/50/v2-390ab27cb5fa910e4d62_r.jpg&&&figcaption&炭疽粉末&/figcaption&&/figure&&figure&&img src=&https://pic2.zhimg.com/50/v2-f05eefa33cf87cf9e675_b.jpg& data-size=&normal& data-rawwidth=&1280& data-rawheight=&846& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/50/v2-f05eefa33cf87cf9e675_r.jpg&&&figcaption&苏联时期哈萨克斯坦一处化武工厂的冷却装置&/figcaption&&/figure&&p&那时无人知晓有多少炭疽芽孢从19号营区飘出,但有专家估计 污染物不超过1千克 ,其中包含 不超过1克的炭疽芽孢 。&/p&&p&假设这些孢子能广泛扩散,就能致使 几十万居民 染病。&/p&&p&不过幸运的是,当时的炭疽孢子并没有落到市中心,因为风向刚好吹向了人烟稀少的地区。&/p&&p&&b&截至5月,至少有99名苏联民众在这场史上最严重的生化武器泄露事件中被炭疽感染,64人因此死亡。不过,但根据阿里贝书中的说法,总死亡人数可能接近105人。&/b&而附近30英里范围内的羊圈中,牧羊人则纷纷表示有羊上了炭疽病——因为羊比起人类更加容易感染这种传染病。由于这起事件的严重性,日后的生物学者将斯维尔德洛夫斯克炭疽泄露事件称为“生化版的切尔诺贝利事件”。&/p&&p&对炭疽来说,及早确诊与 使用抗生素 ,是病人能否存活的关键。但是,就算是致死率不高的皮肤性炭疽,如无适当治疗就极易演化为九死一生的吸入性肺炭疽。&/p&&p&若当时医院能早点知道病因,或许就能挽回一些病人的生命。&/p&&p&但是,苏联军方并没有向任何人透露这种怪病爆发的原因, 包括当地的卫生组织 。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-87bce7bfd2636_b.jpg& data-size=&normal& data-rawwidth=&850& data-rawheight=&478& class=&origin_image zh-lightbox-thumb& width=&850& data-original=&https://pic2.zhimg.com/50/v2-87bce7bfd2636_r.jpg&&&figcaption&一位老人正在清理儿子的墓碑&/figcaption&&/figure&&p&然而,在所有人都还没搞清楚状况时,一个紧急事务小组就奔赴此地,没收了当时所有病人的医疗数据和尸检报告。&/p&&p&医院和平民区都被大量喷洒氯水,甚至连街道表面的泥土都被推土机挖走一层。&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-9ddea8700cbc09effbefc8f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&400& data-rawheight=&400& class=&content_image& width=&400&&&/figure&&p&苏联当局只想极力把此事压下,因为事情败露也将意味着受到全世界的谴责。&/p&&p&毕竟,多个国家(包括苏联和美国),共同签署的那份 《禁止生物武器公约》 ,就摆在那儿。&/p&&p&但纸始终包不住火,1979年10月,西德法兰克福一家俄语报社便了解到情况,并率先报道了此事。&/p&&p&随后,德国的《图片报》更是剑指苏联生化武器泄漏,说明了这次灾难的源头。&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-c16aea104b1ddd769e506ba2_b.jpg& data-size=&normal& data-rawwidth=&400& data-rawheight=&323& class=&content_image& width=&400&&&figcaption&1972年签署《禁止生物武器公约》&/figcaption&&/figure&&p&虽说苏联对外公布的死亡人数,与在众多灾难相比并不算多。&/p&&p&但是这起事故揭露的事实,却能让人震惊之余,又不寒而栗。&/p&&p&如果苏联真的有生物武器项目,也就意味着《禁止生物武器公约》,形同一纸废书。&/p&&p&或许除苏联外,还有许多国家都未曾停止生物武器的研发。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-f8b46d74e5f1aefd7a0a08_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&507& data-rawheight=&338& class=&origin_image zh-lightbox-thumb& width=&507& data-original=&https://pic2.zhimg.com/50/v2-f8b46d74e5f1aefd7a0a08_r.jpg&&&/figure&&p&虽然许多消息都直指背后真相,但是耍赖对一个大国来说并不是什么难事。&/p&&p&苏联坚称炭疽暴发是 自然爆发 , 拒不承认源于生物武器泄漏。&/p&&p&此外,苏联还反指责“美国的指责”会加剧两国紧张关系,并表示这是对1972年《禁止生物武器合约》合法性的质疑。&/p&&p&而在这之后的20年里,19营区的大门就紧闭着,从未有外国人获准许进去查证。&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-4abeac7f6750_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&650& data-rawheight=&365& class=&origin_image zh-lightbox-thumb& width=&650& data-original=&https://pic3.zhimg.com/50/v2-4abeac7f6750_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/50/v2-352fceda549f283a820bb_b.jpg& data-size=&normal& data-rawwidth=&410& data-rawheight=&257& class=&content_image& width=&410&&&figcaption&叶利钦&/figcaption&&/figure&&p&直至苏联解体之后,俄罗斯总统鲍里斯·叶利钦才在一次演讲上委婉地承认了这场泄露事件&/p&&p&直到苏联解体后的1993年,俄罗斯总统鲍里斯·叶利钦才在一次演讲中,以非常委婉的措辞承认斯维尔德洛夫斯克炭疽泄露事件。与此同时,前乌拉尔军区特别部门负责人安德烈·米罗纽科,也在2008年的一份杂志上承认了这次化武事故。这些描述间接支持了肯·阿里贝回忆录中的说法。不过,一些俄罗斯的官员至今依然坚持着“肉类中含有炭疽病菌”的说法,甚至宣称是美国间谍在肉食品中投毒,但是他们却无法提供令人信服的证据。&/p&&p&当时,叶利钦也准许来自哈佛的分子生物学小组,对此次炭疽泄漏事故进行实地调查。&/p&&p&除了还原事故发生经过,他们还从一位俄罗斯医生那里获得了一些 病人尸检样本 ,并带回美国深入研究。&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-ea7fc52fa2bf912de736d5d957eac250_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&500& data-rawheight=&376& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic1.zhimg.com/50/v2-ea7fc52fa2bf912de736d5d957eac250_r.jpg&&&/figure&&p&到2015年,技术的进步也终于让美国科学家,重新构建出涉事炭疽的“真实身份”。&/p&&p&结果显示,这些炭疽杆菌竟属于著名的 “跨欧亚” 品系——与中国大陆境内广泛培养的疫苗株非常接近。&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-0ff717b4f1c941f4eafcfa3ce4947878_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&550& data-rawheight=&288& class=&origin_image zh-lightbox-thumb& width=&550& data-original=&https://pic1.zhimg.com/50/v2-0ff717b4f1c941f4eafcfa3ce4947878_r.jpg&&&/figure&&p&估计每一个中国人都不会忘记日本在中国横行的 “731部队” 。&/p&&p&在罪恶的731部队中,便有一条月产200公斤炭疽孢子粉末的生产线。&/p&&p&中国大量的平民都曾被当做小白鼠做实验,吸入大量炭疽粉末。&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-23c06fc747dc0b73d0b5c_b.jpg& data-size=&normal& data-rawwidth=&320& data-rawheight=&463& class=&content_image& width=&320&&&figcaption&中国炭疽菌受害幸存者&/figcaption&&/figure&&p&从1939年到1942年间,731部队生产的炭疽等病菌,就多达 数十吨 。&/p&&p&在日本战败后,731部队更是直接把不易携带的大部分炭疽等细菌散播在华中一带,只带了部分样品离开。&/p&&p&这也正是,1979年苏联生物武器泄漏的炭疽,竟与中国大陆广泛疫苗株相似的原因。&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-f011c1cba16d393c0f301dc65c6c3ab0_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&510& data-rawheight=&278& class=&origin_image zh-lightbox-thumb& width=&510& data-original=&https://pic3.zhimg.com/50/v2-f011c1cba16d393c0f301dc65c6c3ab0_r.jpg&&&/figure&&p&据专家推测,苏联的生物武器项目的建立,正是使用了大量日本731部队的文件和样品。&/p&&p&也就是说, 苏联的炭疽细菌武器,正是日本“731部队”的遗毒。&/p&&hr&&p&&b&二、炭疽&/b&&/p&&p&其实在历史上,炭疽曾被多国制成生物武器已是人尽皆知之事。&/p&&p&1876年,细菌学之父 罗伯特·科赫 就发现了能致牛羊、牧人死亡的炭疽杆菌。&/p&&p&虽然在自然界感染率不高,但炭疽还是凭着自身的多个优点受到 “生物武器” 的青睐。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-fcb51ad7c74fb46aad3e2f6e_b.jpg& data-size=&normal& data-rawwidth=&612& data-rawheight=&332& class=&origin_image zh-lightbox-thumb& width=&612& data-original=&https://pic2.zhimg.com/50/v2-fcb51ad7c74fb46aad3e2f6e_r.jpg&&&figcaption&罗伯特·科赫&/figcaption&&/figure&&p&生物武器,常常被称为 “穷人的核武器” 。&/p&&p&曾经有微生物学家指出:&/p&&p&“如果恐怖分子想在全球肆虐,生物武器将会是首选。因为想要造成一平方公里内50%的死亡率,用常规武器需要2000美元,核武器需要800美元,化学武器则需600美元,而 生物武器 才是最便宜的, 只需 一美元足以 。”&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-2b88fc3ca3b57eb63f716f7b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&478& data-rawheight=&286& class=&origin_image zh-lightbox-thumb& width=&478& data-original=&https://pic3.zhimg.com/50/v2-2b88fc3ca3b57eb63f716f7b_r.jpg&&&/figure&&p&上文里也说了,炭疽病(anthrax)是以炭疽杆菌的孢子作为传播媒介,它的得名来源于古希腊语中的“炭(anthrakos)”,这是因为当它接触皮肤后,会留下黑炭一般的焦黑色水泡,周围还会产生肿胀。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-672829bcc74c1be56ae4c_b.jpg& data-size=&normal& data-rawwidth=&290& data-rawheight=&230& class=&content_image& width=&290&&&figcaption&皮肤炭疽&/figcaption&&/figure&&p&除了皮肤传染之外,炭疽病还可以通过呼吸道和消化系统传入,可以说是无孔不入了……&/p&&p&所有传播渠道中,呼吸道传播是最可怕的:一旦炭疽孢子通过呼吸道进入身体,它会首先潜入淋巴结,并在那里开始大量孵化繁殖……惊人数量的孢子最终会入侵血管,并引发大面积的组织损伤和内出血。&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-0cfd64cfdaa5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&226& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic3.zhimg.com/50/v2-0cfd64cfdaa5_r.jpg&&&/figure&&p&如果没有及时治疗,呼吸道感染的炭疽病致死率高达85%(即便得到治疗致死率也达到45%……)&/p&&p&作为一种古老的,人畜共患的疾病,炭疽病早在古巴比伦时期就被发现了,在西方的《圣经》和我国的《黄帝内经》中均有所记载,是一种恐怖的瘟疫。1607年,中欧就有6万人死于炭疽病,俄国更是炭疽肆虐,仅1875年就有10万只牲畜死于炭疽病,因此炭疽病又被称为“西伯利亚病”。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-02ec37eabcaf97a387510dc_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&375& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic4.zhimg.com/50/v2-02ec37eabcaf97a387510dc_r.jpg&&&/figure&&p&炭疽杆菌的孢子拥有相当强大的生存能力,很多普通的灭活方式都对它无效,无论用消毒剂浸泡,还是加温180摄氏度两分钟以内,都无法有效杀死炭疽孢子。甚至埋藏于地底的炭疽孢子,依然可以存活数百年之久。&/p&&p&比如中世纪苏格兰医院废墟上的考古挖掘中,就发现了炭疽孢子,以及几百年前用来杀死它们的石灰残骸,谁都没有想到,重见天日的这些孢子竟然复活了。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-7d647b85ab6db5c3d22a3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&407& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic2.zhimg.com/50/v2-7d647b85ab6db5c3d22a3_r.jpg&&&/figure&&p&而集成本低廉和致死率高这两个优点于一身的炭疽杆菌,也成了历史上经久不衰的 最强生物武器之一 。&/p&&p&又因为肺炭疽早期症状与正常流行性感冒极为相似。&/p&&p&所以经常出现误诊,使患者错过最佳治疗时间,一命呜呼。&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-2ca41ecfacec_b.jpg& data-size=&normal& data-rawwidth=&1280& data-rawheight=&619& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/50/v2-2ca41ecfacec_r.jpg&&&figcaption&2001年炭疽邮件中的炭疽孢子&/figcaption&&/figure&&p&就算被感染的宿主尸体已经腐化,炭疽孢子还是能躲在土地里,等待 下一次“复活” 。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-ba7fc65e468296fcc3f014_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&320& data-rawheight=&240& class=&content_image& width=&320&&&/figure&&p&在二战时期的英国,一场小小的实验,就足以让人类见识到炭疽武器的厉害。&/p&&p&那时,英国策划了名为 “素食行动” 的炭疽武器计划,设想通过向德国境内投放污染饲料,消灭牲畜以造成食物短缺。&/p&&p&当时的研究人员在报告中总结,如果对德国使用该武器,将令所有的城市陷入瘫痪,往后数十年将无法居住。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-4e5f1d9c00f_b.jpg& data-size=&normal& data-rawwidth=&500& data-rawheight=&309& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic2.zhimg.com/50/v2-4e5f1d9c00f_r.jpg&&&figcaption&格鲁伊纳岛上的警示牌&/figcaption&&/figure&&p&虽说素食行动最后未曾实施,但被用来作实验的 格林纳德岛, 却遭了殃。&/p&&p&1942年,英国人选择了苏格兰高地附近一座名叫格林纳德(Gruinard)的无人荒岛,在岛上用围栏围住了上百只绵羊,并通过飞机投弹和爆炸的方式,在岛上进行大规模炭疽武器实验。仅仅三天之后,绵羊就开始大规模死亡,岛上到处都留下它们浑身流血的尸体。&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-f0309bfa0716f6fad41b0fea9d162666_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&478& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic1.zhimg.com/50/v2-f0309bfa0716f6fad41b0fea9d162666_r.jpg&&&/figure&&p&虽然科研人员立刻对尸体进行的焚烧和掩埋处理,但在30多年之后的1979年,对岛上土壤的采样显示,每克土壤中依然存活着个炭疽孢子。最后,英国人只能用近300吨甲醛杀毒液洒满了岛上每一寸土地,才算解除了生化危机。只不过,这座岛至今仍然是荒芜的无人岛。&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-baaafac37bbbe978a61db_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&353& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic3.zhimg.com/50/v2-baaafac37bbbe978a61db_r.jpg&&&/figure&&hr&&p&&b&三、剧毒之岛&/b&&/p&&p&&br&&/p&&p&可惜斯维尔德洛夫斯克炭疽泄露事件之后,苏联人当年并没有立刻吸取教训。&/p&&p&1971年时,一群前苏联渔业科学家搭乘一艘名为雷夫·博格号(Lev Berg)的科考船,来到中亚咸海中一座名叫沃兹罗日杰尼耶(Vozrozhdeniya)的无人岛附近时考察当地水质时,因为小岛复杂的地形而迷了路。&/p&&p&博格号驶入了小岛深处,并在这里忽然遭遇了一团诡异的褐色烟雾。&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-a2c3ec01bffc8c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&550& data-rawheight=&704& class=&origin_image zh-lightbox-thumb& width=&550& data-original=&https://pic3.zhimg.com/50/v2-a2c3ec01bffc8c_r.jpg&&&/figure&&p&当船只从烟雾中离开时,一名年轻的女科学家开始剧烈地咳嗽。&/p&&p&几天后,她开始出现发高烧38.9℃,头痛,肌肉酸痛的症状,并在就医后检查出她感染了天花,并立刻服用了抗生素和阿司匹林。虽然这位女科学家早前就接种过天花疫苗,但她的背部、面部和头皮上仍然长出了大片的皮疹。&/p&&p&因为治疗及时,这位女科学家幸运地逃过一死,但另外9名感染者就没那么好运气了,其中有三人死亡,包括她的弟弟。&/p&&p&一年之后,又有人发现小岛附近漂浮着两具当地渔民的尸体。在此之后,这座岛周围又出现了大量死亡的鱼类。根据附近渔民的说法,后来还有两个探险的户外爱好者上了岛之后,就再也没能回来……&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-12b848f279b78611fcccfe_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&338& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic3.zhimg.com/50/v2-12b848f279b78611fcccfe_r.jpg&&&/figure&&p&显然,岛上存在着什么致命的东西,让一起敢于接近它的生物,全都死于非命。&/p&&p&从外表上看,这座位于哈萨克斯坦和乌兹别克斯坦边境的小岛,并没有任何特别之处。&/p&&p&但是,通过中情局的机密航拍照片,可以看到这座岛上不但有码头,有渔民工作的木棚,还有一些类似于靶场和兵营的建筑。&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-97debdb79_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&420& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic3.zhimg.com/50/v2-97debdb79_r.jpg&&&/figure&&p&更诡异的是,岛上还有数量可观的动物围栏,和一些看似科研机构的建筑……&/p&&p&这不能不令人联想到,英国的那座死亡之岛——格林纳德。&/p&&p&事实上,这座与世隔绝且长期以来几乎无人知晓的小岛,很早就被苏联人看中了。1948年时,他们在这座岛上,建立了一个绝密的生物武器实验室。这做实验室隶属于一个被称为Aralsk-7的高度机密项目,整个项目的最终任务只有一个:规模化生产生物武器。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-ee43ad412adcbf53f18d86d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&374& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic4.zhimg.com/50/v2-ee43ad412adcbf53f18d86d_r.jpg&&&/figure&&p&因此,女科学家应该值得庆幸,1971年她只是遭遇了天花感染,更恐怖的东西,要到几年后才会降临岛上。&/p&&p&&b&1979年的斯维尔德洛夫斯克炭疽泄露事件爆发后,苏联人并没有舍得销毁那些他们苦心研究的宝贝。而是将大量的炭疽孢子混合在抑制其生长的漂白剂中,并成批地转移到了沃兹罗日杰尼耶岛上。&/b&&/p&&p&据估计,最终转移到岛上的炭疽孢子,竟然有100至200吨之多……&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-dd698c1e979f0c9acbd549_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&343& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic3.zhimg.com/50/v2-dd698c1e979f0c9acbd549_r.jpg&&&/figure&&p&可以想象一下,如果这些剧毒之物大量扩散出来,显然威胁性绝对远远超越切尔诺贝利事件。当年,这些炭疽孢子被放置在岛上一个叫做坎特贝克(Kantubek)的小镇附近。说是小镇,其实就是当年的实验基地和住宅区。&/p&&p&在这座连地图上都找不到的前苏联机密基地里,不仅存放有炭疽杆菌和天花病毒,还有伯纳特氏立克次体、土拉弗朗西斯杆菌、猪布鲁氏杆菌、普氏立克次体、鼠疫耶尔森氏杆菌、肉毒杆菌毒素和委内瑞拉马脑炎病毒等多种生物武器。&/p&&p&更不可思议的是,这里曾经还是一个集幼儿园、中小学、游乐场于一体的小社会(简直有种《辐射》背景的感觉)。&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-3eb5f603d2bffba8385728_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&395& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic1.zhimg.com/50/v2-3eb5f603d2bffba8385728_r.jpg&&&/figure&&p&更恐怖的是,1991年苏联解体后,这里的科研人员便开始大批撤离,他们留下了大量未经妥善处理的生化武器,并在此后的多年里数次泄露,最终让这座小岛变成了不折不扣的剧毒之岛。&/p&&p&2001年时,一批穿着严密的防护服的美国科学家,来到沃兹罗日杰尼耶岛上进行生化危害考察。&/p&&p&此时的岛上已经是一片荒芜,曾经的实验室已然只剩下断壁残垣,曾经用来饲养豚鼠、仓鼠和兔子的数百个笼子散落得到处都是。从实验室遗迹里的那些熔化的试管和培养皿就能看出,苏联人离开时显然放了一把大火,想把一切都焚毁。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-fa79df5433972aeed38a2ec_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&389& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic2.zhimg.com/50/v2-fa79df5433972aeed38a2ec_r.jpg&&&/figure&&p&生化实验基地两公里开外的露天试验场,是用来测试生化炸弹的有效范围和扩散速度的。旷野里时不时有老鼠和昆虫出没,小队成员全都小心翼翼地躲开它们。理论上而言,生命力强悍的它们,如今也是病毒和细菌的绝佳载体。&/p&&p&如今虽然除了小队成员岛上空无一人,但谁都不敢掉以轻心,毕竟这里四下潜伏着比人类更加可怕的生命体。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-fe8bd020_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic2.zhimg.com/50/v2-fe8bd020_r.jpg&&&/figure&&p&通过一番调查,这帮冒险家吃惊地发现,因为岛上的植被稀疏,加上沙漠气候的炎热天气(夏季温度可达60℃),大部分病毒和微生物都被杀死了。但是,依然还有一个唯一的例外,你们都想象得到的:炭疽。&/p&&p&由于某些区域有炭疽的存在,仅仅十五分钟后,队员的防毒面罩过滤器就开始报警:呼吸器的滤芯已经饱和,不能再使用了……&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-22e23c3b2c66f04faaca1a97ed48ac6b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&375& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic4.zhimg.com/50/v2-22e23c3b2c66f04faaca1a97ed48ac6b_r.jpg&&&/figure&&p&考察队员决定当天就离开沃兹罗日杰尼耶岛,在临行前,一名队员在笔记本上写下了这样的笔记:岛上的污染状况比想象中好很多,如果能够进行一次彻底的消毒喷洒,也许可以消除危险。希望这座“重生之岛(岛名的意思就是rebirth)”上,炭疽永不重生。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-b7bd1a88f4d5d395ddb5e34f051b74b5_b.jpg& data-size=&normal& data-rawwidth=&876& data-rawheight=&685& class=&origin_image zh-lightbox-thumb& width=&876& data-original=&https://pic2.zhimg.com/50/v2-b7bd1a88f4d5d395ddb5e34f051b74b5_r.jpg&&&figcaption&今天的沃兹罗日杰尼耶(Vozrozhdeniya)岛上的基地遗址&/figcaption&&/figure&&p&全文完。&/p&
没人说说咸海中间那个岛吗?生化危机BIOHAZARD这个单词鼎鼎大名啊!挖个坑吧半个月后,我终于来填坑了!本文内容收集整理自网络,其中大部分内容来自原作者 的 本文有大量的文字和图片内容,请谨慎阅读。 一、斯维尔德罗夫斯克 在《生化危机3…
&p&TL;DR:&/p&&p&System.Int32类型重写了&code&object.Equals(object)&/code&方法,当对象是int时,它能与参数进行数值比较,所以在o1.Equals(o2)时,使用了重写的&code&int.Equals(object)&/code&,方法,进行了数值比较,返回True。&/p&&p&根据重载方法的静态分派原则,o1 == o2由于都是object引用类型引用,所以调用了==操作符的&code&bool object.operator==(object, object)&/code&版本,这个重载版本调用了&code&object.ReferenceEquals(object,object)&/code&方法,直接比较两个对象的地址。由于o1和o2的地址不同,所以返回False。&/p&&hr&&p&长一点的答案:&/p&&p&&br&&/p&&p&这个问题涉及到值类型的&b&装箱(boxing)&/b&以及&b&多态的静态和动态分派(static/dynamic dispatch)。&/b&&/p&&p&&br&&/p&&p&先介绍一个方法:&/p&&p&&code&object.ReferenceEquals(object,object)&/code& &/p&&p&比较两个对象的地址,若相同返回True,反之返回False。&/p&&p&&br&&/p&&p&并强调重载(overload)和重写(override)的区别:&/p&&p&&b&重载&/b&,为同一个方法名有多种不同签名的实现,它们&b&实际上是不同的方法,只是名字恰好一样&/b&。对于&code&==&/code&操作符,有&b&不同的重载版本&/b&,例如&code&bool operator==(int, int)&/code&以及&code&bool operator==(object, object)&/code&即为两个不同的版本。 在实际调用时,会根据&b&引用&/b&(不是实际对象)的类型来调用不同的版本。&/p&&p&&b&重写&/b&,为类继承里,子类重新实现了父类的方法。对于&code&object.Equals(object)&/code&方法,object类有一个默认实现;而对任何一个派生于object的类,都可以重写Equals方法,使这个方法在这个对应类的实例上调用时,使用不同的版本。比如Int32类型重写了这个方法(&code&int.Equals(object)&/code&)。在实际调用时,会根据&b&实际对象&/b&(而不是引用)的类型来选择方法。&/p&&p&&br&&/p&&p&int(Int32)是一个值类型,产生值类型对象的过程是:&/p&&ol&&li&在&b&栈&/b&上产生对象&/li&&li&在栈上返回对这个值类型对象的引用,为了方便简称&b&值类型引用&/b&&/li&&/ol&&p&值类型引用有如下特点:&/p&&ol&&li&默认没有&code&==&/code&操作符实现,可以自己重载;&/li&&li&Equals方法的默认实现为,当且仅当所有成员的Equals方法都返回True时,返回True;反之返回False。&/li&&/ol&&p&具体请看下面的代码。&/p&&div class=&highlight&&&pre&&code class=&language-text&&struct A
public A(int a) { this.a = }
A a1 = new A(1);
A a2 = new A(1);
// a1 == a2; 值类型引用默认不能使用==操作符,编译不通过。
a1.Equals(a2);
// True。int成员a相等(实际上是所有成员变量Equals方法返回True)
object.ReferenceEquals(a1, a2); // False,地址不同。
&/code&&/pre&&/div&&p&所以,如果题主的代码如下,那么&/p&&div class=&highlight&&&pre&&code class=&language-text&&int o1 = 1; // 值类型引用
int o2 = 1;
o1 == o2; // True。使用版本:int.operator==(int, int);
o1.Equals(o2); //True。使用版本:int.Equals(int);
object.ReferenceEquals(o1, o2); // False。地址不同。
&/code&&/pre&&/div&&p&&br&&/p&&p&但是,题主的前两句是&/p&&div class=&highlight&&&pre&&code class=&language-text&&object o1 = 1;
object o2 = 1;
&/code&&/pre&&/div&&p&那么这里就发生了值类型的&b&装箱&/b&操作。装箱的过程可以理解为&/p&&ol&&li&在&b&堆&/b&上产生对象;&/li&&li&在&b&栈&/b&上产生了&b&指向这个引用类型(object)对象的引用&/b&,简称引用类型引用。&/li&&/ol&&p&所以,这里o1和o2不再是&b&值类型引用&/b&,而是&b&引用类型引用&/b&。而引用类型引用的特点有:&/p&&ol&&li&有默认&code&==&/code&操作符重载版本(&code&bool object.operator ==(object, object)&/code&)&/li&&li&有默认Equals实现(在object类中,是虚方法,可重写)&/li&&li&&b&默认&code&==&/code&操作符和Equals方法的实现都是调用ReferenceEquals(重要!)&/b&&/li&&/ol&&p&&br&&/p&&p&所以,对一个普通的&b&没有重写Equals方法&/b&的两个引用类型引用,会有以下的结果&/p&&div class=&highlight&&&pre&&code class=&language-text&&class B
public B(int b) { this.b = }
B b1 = new B(2);
B b2 = new B(2);
object.ReferenceEquals(b1, b2); // False
// 直接比较引用的地址,地址不同。
b1 == b2; // False
// 使用版本bool object.operator==(object, object),
// 默认实现为调用ReferenceEquals方法,等价于上一行
null == b2; // False
// 使用版本bool object.operator==(object, object),
// 默认实现为调用ReferenceEquals方法,等价于第一行
b1.Equals(b2);
// 使用版本object.Equals(object),
// 默认实现为调用ReferenceEquals方法,等价于第一行。
&/code&&/pre&&/div&&p&&b&然而,我们知道int类是重写了Equals方法的!&/b&&/p&&p&所以,回到题目,如果我们将题目中的o1和o2拿来跑这些代码的话,其结果是:&/p&&div class=&highlight&&&pre&&code class=&language-text&&object o1 = 1; //引用类型引用
object o2 = 1;
object.ReferenceEquals(o1, o2); // False
o1 == o2; // False
// 静态分派,根据o1和o2的引用的类型,选择了bool operator==(object, object)版本
null == o2; // False
o1.Equals(o2);
// 动态分派,o1的实际类型是int,使用了int.Equals(object)方法,进行了数值比较。
&/code&&/pre&&/div&
TL;DR:System.Int32类型重写了object.Equals(object)方法,当对象是int时,它能与参数进行数值比较,所以在o1.Equals(o2)时,使用了重写的int.Equals(object),方法,进行了数值比较,返回True。根据重载方法的静态分派原则,o1 == o2由于都是object引用类…
&figure&&img src=&https://pic4.zhimg.com/v2-0b35a3df0b2ef_b.jpg& data-rawwidth=&728& data-rawheight=&397& class=&origin_image zh-lightbox-thumb& width=&728& data-original=&https://pic4.zhimg.com/v2-0b35a3df0b2ef_r.jpg&&&/figure&&h2&&b&&i&前言&/i&&/b&&/h2&&p&我们都知道,javascript从诞生之日起就是一门单线程的非阻塞的脚本语言。这是由其最初的用途来决定的:与浏览器交互。&/p&&p&单线程意味着,javascript代码在执行的任何时候,都只有一个主线程来处理所有的任务。&/p&&p&而非阻塞则是当代码需要进行一项异步任务(无法立刻返回结果,需要花一定时间才能返回的任务,如I/O事件)的时候,主线程会挂起(pending)这个任务,然后在异步任务返回结果的时候再根据一定规则去执行相应的回调。&/p&&p&单线程是必要的,也是javascript这门语言的基石,原因之一在其最初也是最主要的执行环境——浏览器中,我们需要进行各种各样的dom操作。试想一下 如果javascript是多线程的,那么当两个线程同时对dom进行一项操作,例如一个向其添加事件,而另一个删除了这个dom,此时该如何处理呢?因此,为了保证不会 发生类似于这个例子中的情景,javascript选择只用一个主线程来执行代码,这样就保证了程序执行的一致性。&/p&&p&当然,现如今人们也意识到,单线程在保证了执行顺序的同时也限制了javascript的效率,因此开发出了web worker技术。这项技术号称让javascript成为一门多线程语言。&/p&&p&然而,使用web worker技术开的多线程有着诸多限制,例如:所有新线程都受主线程的完全控制,不能独立执行。这意味着这些“线程” 实际上应属于主线程的子线程。另外,这些子线程并没有执行I/O操作的权限,只能为主线程分担一些诸如计算等任务。所以严格来讲这些线程并没有完整的功能,也因此这项技术并非改变了javascript语言的单线程本质。&/p&&p&可以预见,未来的javascript也会一直是一门单线程的语言。&/p&&p&话说回来,前面提到javascript的另一个特点是“非阻塞”,那么javascript引擎到底是如何实现的这一点呢?答案就是今天这篇文章的主角——event loop(事件循环)。&/p&&p&&i&注:虽然nodejs中的也存在与传统浏览器环境下的相似的事件循环。然而两者间却有着诸多不同,故把两者分开,单独解释。&/i&&/p&&h2&&b&&i&正文&/i&&/b&&/h2&&h2&&b&浏览器环境下js引擎的事件循环机制&/b&&/h2&&h2&&b&1.执行栈与事件队列&/b&&/h2&&p&当javascript代码执行的时候会将不同的变量存于内存中的不同位置:堆(heap)和栈(stack)中来加以区分。其中,堆里存放着一些对象。而栈中则存放着一些基础类型变量以及对象的指针。 但是我们这里说的执行栈和上面这个栈的意义却有些不同。&/p&&p&我们知道,当我们调用一个方法的时候,js会生成一个与这个方法对应的执行环境(context),又叫执行上下文。这个执行环境中存在着这个方法的私有作用域,上层作用域的指向,方法的参数,这个作用域中定义的变量以及这个作用域的this对象。 而当一系列方法被依次调用的时候,因为js是单线程的,同一时间只能执行一个方法,于是这些方法被排队在一个单独的地方。这个地方被称为执行栈。&/p&&p&当一个脚本第一次执行的时候,js引擎会解析这段代码,并将其中的同步代码按照执行顺序加入执行栈中,然后从头开始执行。如果当前执行的是一个方法,那么js会向执行栈中添加这个方法的执行环境,然后进入这个执行环境继续执行其中的代码。当这个执行环境中的代码 执行完毕并返回结果后,js会退出这个执行环境并把这个执行环境销毁,回到上一个方法的执行环境。。这个过程反复进行,直到执行栈中的代码全部执行完毕。&/p&&p&下面这个图片非常直观的展示了这个过程,其中的global就是初次运行脚本时向执行栈中加入的代码:&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-2f761eb83b50f53d741e6aa1f15a9db1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&390& data-rawheight=&259& data-thumbnail=&https://pic1.zhimg.com/v2-2f761eb83b50f53d741e6aa1f15a9db1_b.jpg& class=&content_image& width=&390&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&从图片可知,一个方法执行会向执行栈中加入这个方法的执行环境,在这个执行环境中还可以调用其他方法,甚至是自己,其结果不过是在执行栈中再添加一个执行环境。这个过程可以是无限进行下去的,除非发生了栈溢出,即超过了所能使用内存的最大值。&/p&&p&以上的过程说的都是同步代码的执行。那么当一个异步代码(如发送ajax请求数据)执行后会如何呢?前文提过,js的另一大特点是非阻塞,实现这一点的关键在于下面要说的这项机制——事件队列(Task Queue)。&/p&&p&js引擎遇到一个异步事件后并不会一直等待其返回结果,而是会将这个事件挂起,继续执行执行栈中的其他任务。当一个异步事件返回结果后,js会将这个事件加入与当前执行栈不同的另一个队列,我们称之为事件队列。被放入事件队列不会立刻执行其回调,而是等待当前执行栈中的所有任务都执行完毕, 主线程处于闲置状态时,主线程会去查找事件队列是否有任务。如果有,那么主线程会从中取出排在第一位的事件,并把这个事件对应的回调放入执行栈中,然后执行其中的同步代码...,如此反复,这样就形成了一个无限的循环。这就是这个过程被称为“事件循环(Event Loop)”的原因。&/p&&p&这里还有一张图来展示这个过程:&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-da078fa3eadf3db4bff84b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&601& data-rawheight=&527& class=&origin_image zh-lightbox-thumb& width=&601& data-original=&https://pic2.zhimg.com/v2-da078fa3eadf3db4bff84b_r.jpg&&&/figure&&p&&br&&/p&&p&图中的stack表示我们所说的执行栈,web apis则是代表一些异步事件,而callback queue即事件队列。&/p&&h2&&b&2.macro task与micro task&/b&&/h2&&p&以上的事件循环过程是一个宏观的表述,实际上因为异步任务之间并不相同,因此他们的执行优先级也有区别。不同的异步任务被分为两类:微任务(micro task)和宏任务(macro task)。&/p&&p&以下事件属于宏任务:&/p&&ul&&li&&code&setInterval()&/code&&/li&&li&&code&setTimeout()&/code&&/li&&/ul&&p&以下事件属于微任务&/p&&ul&&li&&code&new Promise()&/code&&/li&&li&&code&new MutaionObserver()&/code&&/li&&/ul&&p&前面我们介绍过,在一个事件循环中,异步事件返回结果后会被放到一个任务队列中。然而,根据这个异步事件的类型,这个事件实际上会被对应的宏任务队列或者微任务队列中去。并且在当前执行栈为空的时候,主线程会 查看微任务队列是否有事件存在。如果不存在,那么再去宏任务队列中取出一个事件并把对应的回到加入当前执行栈;如果存在,则会依次执行队列中事件对应的回调,直到微任务队列为空,然后去宏任务队列中取出最前面的一个事件,把对应的回调加入当前执行栈...如此反复,进入循环。&/p&&p&我们只需记住&b&当当前执行栈执行完毕时会立刻先处理所有微任务队列中的事件,然后再去宏任务队列中取出一个事件。同一次事件循环中,微任务永远在宏任务之前执行&/b&。&/p&&p&这样就能解释下面这段代码的结果:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&setTimeout(function () {
console.log(1);
new Promise(function(resolve,reject){
console.log(2)
resolve(3)
}).then(function(val){
console.log(val);
&/code&&/pre&&/div&&p&结果为:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&2
&/code&&/pre&&/div&&h2&&b&node环境下的事件循环机制&/b&&/h2&&h2&&b&1.与浏览器环境有何不同?&/b&&/h2&&p&在node中,事件循环表现出的状态与浏览器中大致相同。不同的是node中有一套自己的模型。node中事件循环的实现是依靠的libuv引擎。我们知道node选择chrome v8引擎作为js解释器,v8引擎将js代码分析后去调用对应的node api,而这些api最后则由libuv引擎驱动,执行对应的任务,并把不同的事件放在不同的队列中等待主线程执行。 因此实际上node中的事件循环存在于libuv引擎中。&/p&&h2&&b&2.事件循环模型&/b&&/h2&&p&下面是一个libuv引擎中的事件循环的模型:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span& ┌───────────────────────┐
└──────────┬────────────┘
┌──────────┴────────────┐
I/O callbacks
└──────────┬────────────┘
┌──────────┴────────────┐
idle, prepare
└──────────┬────────────┘
┌───────────────┐
┌──────────┴────────────┐
│&──connections───
└──────────┬────────────┘
data, etc.
┌──────────┴────────────┐
└───────────────┘
└──────────┬────────────┘
┌──────────┴────────────┐
close callbacks
└───────────────────────┘
&/code&&/pre&&/div&&p&&i&注:模型中的每一个方块代表事件循环的一个阶段&/i&&/p&&p&这个模型是node官网上的一篇文章中给出的,我下面的解释也都来源于这篇文章。我会在文末把文章地址贴出来,有兴趣的朋友可以亲自与看看原文。&/p&&h2&&b&3.事件循环各阶段详解&/b&&/h2&&p&从上面这个模型中,我们可以大致分析出node中的事件循环的顺序:&/p&&p&外部输入数据--&轮询阶段(poll)--&检查阶段(check)--&关闭事件回调阶段(close callback)--&定时器检测阶段(timer)--&I/O事件回调阶段(I/O callbacks)--&闲置阶段(idle, prepare)--&轮询阶段...&/p&&p&以上各阶段的名称是根据我个人理解的翻译,为了避免错误和歧义,下面解释的时候会用英文来表示这些阶段。&/p&&p&这些阶段大致的功能如下:&/p&&ul&&li&timers: 这个阶段执行定时器队列中的回调如 &code&setTimeout()&/code& 和 &code&setInterval()&/code&。&/li&&li&I/O callbacks: 这个阶段执行几乎所有的回调。但是不包括close事件,定时器和&code&setImmediate()&/code&的回调。&/li&&li&idle, prepare: 这个阶段仅在内部使用,可以不必理会。&/li&&li&poll: 等待新的I/O事件,node在一些特殊情况下会阻塞在这里。&/li&&li&check: &code&setImmediate()&/code&的回调会在这个阶段执行。&/li&&li&close callbacks: 例如&code&socket.on('close', ...)&/code&这种close事件的回调。&/li&&/ul&&p&下面我们来按照代码第一次进入libuv引擎后的顺序来详细解说这些阶段:&/p&&h2&&b&poll阶段&/b&&/h2&&p&当个v8引擎将js代码解析后传入libuv引擎后,循环首先进入poll阶段。poll阶段的执行逻辑如下: 先查看poll queue中是否有事件,有任务就按先进先出的顺序依次执行回调。 当queue为空时,会检查是否有setImmediate()的callback,如果有就进入check阶段执行这些callback。但同时也会检查是否有到期的timer,如果有,就把这些到期的timer的callback按照调用顺序放到timer queue中,之后循环会进入timer阶段执行queue中的 callback。 这两者的顺序是不固定的,收到代码运行的环境的影响。如果两者的queue都是空的,那么loop会在poll阶段停留,直到有一个i/o事件返回,循环会进入i/o callback阶段并立即执行这个事件的callback。&/p&&p&值得注意的是,poll阶段在执行poll queue中的回调时实际上不会无限的执行下去。有两种情况poll阶段会终止执行poll queue中的下一个回调:1.所有回调执行完毕。2.执行数超过了node的限制。&/p&&h2&&b&check阶段&/b&&/h2&&p&check阶段专门用来执行&code&setImmediate()&/code&方法的回调,当poll阶段进入空闲状态,并且setImmediate queue中有callback时,事件循环进入这个阶段。&/p&&h2&&b&close阶段&/b&&/h2&&p&当一个socket连接或者一个handle被突然关闭时(例如调用了&code&socket.destroy()&/code&方法),close事件会被发送到这个阶段执行回调。否则事件会用&code&process.nextTick()&/code&方法发送出去。&/p&&h2&&b&timer阶段&/b&&/h2&&p&这个阶段以先进先出的方式执行所有到期的timer加入timer队列里的callback,一个timer callback指得是一个通过setTimeout或者setInterval函数设置的回调函数。&/p&&h2&&b&I/O callback阶段&/b&&/h2&&p&如上文所言,这个阶段主要执行大部分I/O事件的回调,包括一些为操作系统执行的回调。例如一个TCP连接生错误时,系统需要执行回调来获得这个错误的报告。&/p&&h2&&b&4.process.nextTick,setTimeout与setImmediate的区别与使用场景&/b&&/h2&&p&在node中有三个常用的用来推迟任务执行的方法:process.nextTick,setTimeout(setInterval与之相同)与setImmediate&/p&&p&这三者间存在着一些非常不同的区别:&/p&&h2&&b&process.nextTick()&/b&&/h2&&p&尽管没有提及,但是实际上node中存在着一个特殊的队列,即nextTick queue。这个队列中的回调执行虽然没有被表示为一个阶段,当时这些事件却会在每一个阶段执行完毕准备进入下一个阶段时优先执行。当事件循环准备进入下一个阶段之前,会先检查nextTick queue中是否有任务,如果有,那么会先清空这个队列。与执行poll queue中的任务不同的是,这个操作在队列清空前是不会停止的。这也就意味着,错误的使用&code&process.nextTick()&/code&方法会导致node进入一个死循环。。直到内存泄漏。&/p&&p&那么合适使用这个方法比较合适呢?下面有一个例子:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&const server = net.createServer(() =& {}).listen(8080);
server.on('listening', () =& {});
&/code&&/pre&&/div&&p&这个例子中当,当listen方法被调用时,除非端口被占用,否则会立刻绑定在对应的端口上。这意味着此时这个端口可以立刻触发listening事件并执行其回调。然而,这时候&code&on('listening)&/code&还没有将callback设置好,自然没有callback可以执行。为了避免出现这种情况,node会在listen事件中使用&code&process.nextTick()&/code&方法,确保事件在回调函数绑定后被触发。&/p&&h2&&b&setTimeout()和setImmediate()&/b&&/h2&&p&在三个方法中,这两个方法最容易被弄混。实际上,某些情况下这两个方法的表现也非常相似。然而实际上,这两个方法的意义却大为不同。&/p&&p&&code&setTimeout()&/code&方法是定义一个回调,并且希望这个回调在我们所指定的时间间隔后第一时间去执行。注意这个“第一时间执行”,这意味着,受到操作系统和当前执行任务的诸多影响,该回调并不会在我们预期的时间间隔后精准的执行。执行的时间存在一定的延迟和误差,这是不可避免的。node会在可以执行timer回调的第一时间去执行你所设定的任务。&/p&&p&&code&setImmediate()&/code&方法从意义上将是立刻执行的意思,但是实际上它却是在一个固定的阶段才会执行回调,即poll阶段之后。有趣的是,这个名字的意义和之前提到过的&code&process.nextTick()&/code&方法才是最匹配的。node的开发者们也清楚这两个方法的命名上存在一定的混淆,他们表示不会把这两个方法的名字调换过来---因为有大量的node程序使用着这两个方法,调换命名所带来的好处与它的影响相比不值一提。&/p&&p&&code&setTimeout()&/code&和不设置时间间隔的&code&setImmediate()&/code&表现上及其相似。猜猜下面这段代码的结果是什么?&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&setTimeout(() =& {
console.log('timeout');
setImmediate(() =& {
console.log('immediate');
&/code&&/pre&&/div&&p&实际上,答案是不一定。没错,就连node的开发者都无法准确的判断这两者的顺序谁前谁后。这取决于这段代码的运行环境。运行环境中的各种复杂的情况会导致在同步队列里两个方法的顺序随机决定。但是,在一种情况下可以准确判断两个方法回调的执行顺序,那就是在一个I/O事件的回调中。下面这段代码的顺序永远是固定的:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&const fs = require('fs');
fs.readFile(__filename, () =& {
setTimeout(() =& {
console.log('timeout');
setImmediate(() =& {
console.log('immediate');
&/code&&/pre&&/div&&p&答案永远是:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&immediate
&/code&&/pre&&/div&&p&因为在I/O事件的回调中,setImmediate方法的回调永远在timer的回调前执行。&/p&&h2&&b&&i&尾声&/i&&/b&&/h2&&p&javascrit的事件循环是这门语言中非常重要且基础的概念。清楚的了解了事件循环的执行顺序和每一个阶段的特点,可以使我们对一段异步代码的执行顺序有一个清晰的认识,从而减少代码运行的不确定性。合理的使用各种延迟事件的方法,有助于代码更好的按照其优先级去执行。这篇文章期望用最易理解的方式和语言准确描述事件循环这个复杂过程,但由于作者自己水平有限,文章中难免出现疏漏。如果您发现了文章中的一些问题,欢迎在留言中提出,我会尽量回复这些评论,把错误更正。&/p&&h2&&b&&i&引用&/i&&/b&&/h2&&a href=&https://link.zhihu.com/?target=https%3A//www.cnblogs.com/mqliutie/p/4422247.html& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic4.zhimg.com/v2-dd640e2b46f4fbf_180x120.jpg& data-image-width=&554& data-image-height=&447& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&JavaScript中执行环境和栈 - 陪伴是最长情的告白 - 博客园&/a&&a href=&https://link.zhihu.com/?target=http%3A//js.walfud.com/macrotask-microtask/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-415f989adae7cc0f3a8b36c_120x160.jpg& data-image-width=&1079& data-image-height=&1793& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Macrotask 与 Microtask 核心概念&/a&&a href=&https://link.zhihu.com/?target=https%3A//nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic1.zhimg.com/v2-bff8f35baaea8_ipico.jpg& data-image-width=&224& data-image-height=&256& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Node.js Event Loop, Timers, and process.nextTick() | Node.js&/a&&p&&/p&
前言我们都知道,javascript从诞生之日起就是一门单线程的非阻塞的脚本语言。这是由其最初的用途来决定的:与浏览器交互。单线程意味着,javascript代码在执行的任何时候,都只有一个主线程来处理所有的任务。而非阻塞则是当代码需要进行一项异步任务(无法…
&p&在中国的游戏环境下,反挂已经成为了游戏开发的重中之重,甚至能决定一款游戏的生死,吃鸡就是一个典型的案例。&br&&br&目前参与了了一款动作射击的MOBA类游戏的开发,同步方案上选择了帧同步技术(LockStep而非snapshots以下同)。那么就有很多人担心起来,客户端会跑全部逻辑帧同步该如何反外挂,和状态同步有什么区别呢?&br&&br&首先我们来分析一下手游的风险和外挂的分类,这里推荐腾讯游戏安全中心的文章,有着非常详细深入的介绍。&br&手游的风险:&br& o 静态修改文件:将游戏解包修改资源 ,配置,代码等之后再重新打包&br&
○ 修改资源,例如替换游戏的贴图做广告,修改玩家碰撞资源 或删除部分关键资源使玩家可以作弊等&br&
○ 修改代码,直接修改游戏代码,实现无敌,免CD,无限伤害等等&br&
○ 修改配置,修改策划配表等&br& o 动态篡改逻辑:通过注入和钩子的方式,在游戏运行时修改游戏代码,修改游戏内存等&br&
○ 修改代码,运行时注入进程直接修改游戏代码或者钩住关键逻辑函数修改逻辑,实现无敌,免CD,无限伤害等等&br&
○ 修改内存,例如烧饼,葫芦侠等修改器,在游戏运行时修改堆栈和全局变量等&br& o 游戏协议&br&
○ 篡改游戏协议,直接修改协议的内容,修改结算结果,修改伤害数值,修改血量等等&br&
○ 重复游戏协议,例如多次重复伤害协议&br& o 其他,按键精灵。脚本宏,盗号,恶意发言,打金工作室等,这些和同步技术无关,暂不做详细讨论&br&&br&外挂的分类 :&br&&/p&&figure&&img data-rawheight=&332& src=&https://pic1.zhimg.com/v2-4bdc7289acd48b9f18e404_b.jpg& data-size=&normal& data-rawwidth=&642& class=&origin_image zh-lightbox-thumb& width=&642& data-original=&https://pic1.zhimg.com/v2-4bdc7289acd48b9f18e404_r.jpg&&&/figure&&p&&a href=&http://link.zhihu.com/?target=http%3A//gslab.qq.com/portal.php%3Fmod%3Dview%26aid%3D94& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&摘自腾讯游戏安全实验室&/a&&br&&br&从上文可以看出外挂的主要方式还是修改客户端的资源,代码,和内存。因此反外挂的手段也不外乎以下几种:&br& o 服务器计算关键逻辑。例如一些MMO战斗逻辑泡在服务端&br& o 服务器验证客户端逻辑。包括通过完整战斗逻辑验证和数值范围验证,例如早期的酷跑(可能误杀牛逼的玩家)&br& o 包体加密加签名加验证,防止破解包体。例如一些第三方加固,Unity的MonoDll加密,代码混淆等&br& o 加密本地保存的一些文件。例如对加密PlayerPrefs文件&br& o 加密和扰动运行时内存中关键数据(例如血量数据等)。例如崩3等&br& o 防注入检测(杀死注入进程或者发现注入之后杀死自己)&br& o 虚拟机加密&br& o 加速检测,防止修改本地时间的变速齿轮&br& o 穿墙检测,客户端对关键碰撞做校验&br& o 集成守护进程以及守护进程的自我加密更新&br& o 鼠标宏,按键精灵等进程检测,防止玩家使用这些工具&br& o 增加举报系统查证封号&br& o 通过暴力机关严厉打击外挂制作者(个人感觉非常有效)&br& o 其他&br&&br&但很遗憾,因为理论上再牛逼的客户端也是可以破解的,所以客户端的东西都是不可信任的。就像市面上也有很多第三方的加固工具,反作弊插件等,但不管用什么eye,什么火眼精睛,该作弊的还是作弊。因此反外挂的核心还是在于是否服务器是否计算了关键逻辑,就像Unreal老大说的The Server Is The Man。而和同步技术和客户端是否跑完整逻辑关系不大(严格说是有一点关系)。不管是状态同步还是帧同步,只要做到了服务器有完整逻辑并验证,绝大部分外挂都可以防掉(例如锁血挂,穿墙挂,加速挂等)。&br&&br&对于状态同步来说关键逻辑在服务器的比重越高反外挂就越完美。最极端的例子就是就是云游戏,服务器计算所有逻辑和画面,客户端只是显示图像,基本上杜绝了所有其他外挂(除了按键精灵,鼠标宏,手速挂等可以模拟玩家操作,捕捉像素计算操作,只能通过进程检测,举报,法律打击等其他方案)。&br&&br&而对于帧同步来说,我们同样可以在服务器验证完整的战斗逻辑。一般分为两种:&br& 1. 实时验证。例如战斗实时运行战斗逻辑和客户端不断同步验证关键数据的hash,和状态同步类似。但这种方案服务器负载较高,运维成本高昂;&br& 2. 离线验证。这是帧同步的优势,战斗结束后服务器收集整场的操作序列,然后加速播放战斗(几十上百倍),最后校验结果,例如刀塔传奇。这个好处是服务器不用实时跑战斗,只需在结束时花几百ms即可验证一场战斗,大幅降低服务器成本。&br&如果是这种验证方式帧同步也一样能防掉绝大部分外挂,但是会多一个弱点就是全图挂。因为客户端有了所有玩家的位置信息,所以无法防掉全图挂。&br&&br&那么如果这么说,只要服务器跑逻辑就行了,为什么外挂还这么泛滥呢?其实因为种种原因很多游戏服务器并没有完整的逻辑和校验,对于绝大部分游戏使用状态同步来说有以下一些原因:&br& 1. 性能问题。服务器运行完整逻辑开销很高(特别是一些复杂运算,例如物理弹道等),因此将部分逻辑放在客户端分布运算&br& 2. 因为开发效率和开发能力的限制。例如开发技能,如果所有逻辑都在客户端开发就会简单很多,响应也非常及时。如果要涉及服务器和客户端同步,就会多很多工作量特别是一些位移技能,很多逻辑可能还要写两份(帧同步更高效更容易实现打击感也是这个原因,很多动作游戏,MOBA游戏也会选择帧同步)&br& 3. 经验问题。一些公司在反外挂上经验不足重视程度不够,特别是国外游戏环境较好法律健全&br& 4. 为了极致的体验。例如为了降低网络延迟,很多游戏会让客户端预表现和加入延迟补偿,在一定范围内信任客户端(特别是FPS游戏,状态同步在延迟感上有较优势)&br& 5. 为了弱网体验。为了让玩家在网络极差甚至断线的情况下也能玩,将绝大部分逻辑都放在客户端&br& 6. 多种原因混合,其他一些个别问题。&br&&br&但是以上的问题对于帧同步来说不也一样吗?如果为了成本和快速开发,服务器不跑逻辑不也一样抓瞎吗?其实帧同步会更简单一些。对帧同步来说有以下几种情况:&br&1.基于RelayServer多人PVP。这种会相对简单很多,因为每个客户端都计算了完整逻辑,作弊玩家修改的只是本地数据无法影响其他玩家,只能自嗨。最终结果服务器只要简单的比较投票就可以找到作弊者,除非作弊的玩家多余非作弊的玩家并且作弊玩家还要修改一样的数据(有点比特币算力的意思:),另外也可以在游戏运行时不断生成关键数据的hash码,随时校验;&br&2.基于P2P的多人PVP。和RS差不多但是无法防主机作弊了,参考魔兽争霸,但网游基本不会使用;&br&3.双人PVP和单机。这就没办法了,只能服务器做校验;&br&&br&综上所述,因为天然的客户端强一致性,总体来说帧同步在防外挂上甚至会更简单一些(参考王者荣耀)。但成也萧何败也萧何,正因为这个机制的问题,无法完全防住全图挂,也因此甚至有MOBA游戏,同时使用两种同步机制来保证线上赛和线下赛的公平和体验。&/p&
在中国的游戏环境下,反挂已经成为了游戏开发的重中之重,甚至能决定一款游戏的生死,吃鸡就是一个典型的案例。 目前参与了了一款动作射击的MOBA类游戏的开发,同步方案上选择了帧同步技术(LockStep而非snapshots以下同)。那么就有很多人担心起来,客户端…
&p&“反重力”的陀螺:&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-70c23d19f0d9ffbf105b0_b.jpg& data-size=&normal& data-rawwidth=&192& data-rawheight=&144& class=&content_image& width=&192&&&figcaption&角动量是什么,可以吃么&/figcaption&&/figure&&p&“反重力”的弹簧:&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-a9f891fcd050c3c5b95d5d32e5f31d17_b.jpg& data-size=&normal& data-rawwidth=&280& data-rawheight=&314& class=&content_image& width=&280&&&figcaption&受力平衡是什么?可以吃么?&/figcaption&&/figure&&p&“反重力”的电磁冶炼:&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-d8df9b79cacf68ec19a982_b.jpg& data-size=&normal& data-rawwidth=&298& data-rawheight=&239& class=&content_image& width=&298&&&figcaption&磁悬浮是什么?可以吃么?&/figcaption&&/figure&&p&“反重力”的空气船:&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-f5ece51f87ce1_b.jpg& data-size=&normal& data-rawwidth=&338& data-rawheight=&182& class=&content_image& width=&338&&&figcaption&船下面是比空气密度大的六氟化硫气体,应该不能吃&/figcaption&&/figure&&p&“反重力”的锤子:&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-1abc4e12_b.jpg& data-size=&normal& data-rawwidth=&580& data-rawheight=&386& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&https://pic1.zhimg.com/50/v2-1abc4e12_r.jpg&&&figcaption&重心是什么,可以吃么&/figcaption&&/figure&&p&牛顿摆:&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-f217b7e10deb01fcba77f81_b.jpg& data-size=&normal& data-rawwidth=&480& data-rawheight=&360& class=&origin_image zh-lightbox-thumb& width=&480& data-original=&https://pic3.zhimg.com/50/v2-f217b7e10deb01fcba77f81_r.jpg&&&figcaption&动量定理是什么,可以吃么&/figcaption&&/figure&&p&“取向”变弯的激光&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-3c8fe773e9da3e60ba6a51_b.jpg& data-size=&normal& data-rawwidth=&443& data-rawheight=&255& class=&origin_image zh-lightbox-thumb& width=&443& data-original=&https://pic4.zhimg.com/50/v2-3c8fe773e9da3e60ba6a51_r.jpg&&&figcaption&全反射是什么,可以吃么&/figcaption&&/figure&&p&转一转就能变色的偏振片:&/p&&a class=&video-box& href=&//link.zhihu.com/?target=https%3A//www.zhihu.com/video/677696& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic3.zhimg.com/80/v2-8f9ed99e8a2512c3ddba41ed0074cb82_b.jpg& data-lens-id=&677696&&
&img class=&thumbnail& src=&https://pic3.zhimg.com/80/v2-8f9ed99e8a2512c3ddba41ed0074cb82_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/677696&/span&
“反重力”的陀螺:“反重力”的弹簧:“反重力”的电磁冶炼:“反重力”的空气船:“反重力”的锤子:牛顿摆:“取向”变弯的激光转一转就能变色的偏振片:
&p&日志:之前有俩参数弄错了现作些修改,地球撕不烂辣&/p&&p&----&/p&&p&看不下去了,现在我们来计算引力波的冲击对地球的影响,民科退散。&/p&&p&假设太阳整个在t=0瞬间消失&b&[注1]&/b&,考虑到 &img src=&//www.zhihu.com/equation?tex=%5Cfrac%7BGM_%5Codot%7D%7Bc%5E2R_%5Codot%7D%5Capprox+0.000001& alt=&\frac{GM_\odot}{c^2R_\odot}\approx 0.000001& eeimg=&1&& ,作弱场近似 &img src=&//www.zhihu.com/equation?tex=g_%7B%5Cmu%5Cnu%7D%3D%5Ceta_%7B%5Cmu%5Cnu%7D%2Bh_%7B%5Cmu%5Cnu%7D& alt=&g_{\mu\nu}=\eta_{\mu\nu}+h_{\mu\nu}& eeimg=&1&&&/p&&p&其中施瓦西解球坐标下取一级近似:&img src=&//www.zhihu.com/equation?tex=g_%7B%5Cmu%5Cnu%7D+%3D+%5Cbegin%7Bpmatrix%7D+1%2B%5Cfrac%7B2%5CPhi%7D%7Bc%5E2%7D%26%26%26%5C%5C+%26-%281%2B%5Cfrac%7B2%5CPhi%7D%7Bc%5E2%7D%29%5E%7B-1%7D%26%26%5C%5C+%26%26-r%5E2%26%5C%5C+%26%26%26-r%5E2%5Csin%5E2%5Ctheta%5C%5C+%5Cend%7Bpmatrix%7D+%5Capprox+%5Cbegin%7Bpmatrix%7D+1%2B%5Cfrac%7B2%5CPhi%7D%7Bc%5E2%7D%26%26%26%5C%5C+%26-1%2B%5Cfrac%7B2%5CPhi%7D%7Bc%5E2%7D%26%26%5C%5C+%26%26-r%5E2%26%5C%5C+%26%26%26-r%5E2%5Csin%5E2%5Ctheta%5C%5C+%5Cend%7Bpmatrix%7D& alt=&g_{\mu\nu} = \begin{pmatrix} 1+\frac{2\Phi}{c^2}&&&\\ &-(1+\frac{2\Phi}{c^2})^{-1}&&\\ &&-r^2&\\ &&&-r^2\sin^2\theta\\ \end{pmatrix} \approx \begin{pmatrix} 1+\frac{2\Phi}{c^2}&&&\\ &-1+\frac{2\Phi}{c^2}&&\\ &&-r^2&\\ &&&-r^2\sin^2\theta\\ \end{pmatrix}& eeimg=&1&&&/p&&p&其中&/p&&p&&img src=&//www.zhihu.com/equation?tex=%5CPhi_0+%3D+%5CPhi%28r%29%3D%5Cleft%5C%7B+%5Cbegin%7Baligned%7D+%26-%5Cfrac%7BGM_%7B%5Codot%7D%7D%7Br%7D%2C%5C%2C%5C%2C%5C%2C%5C%2C%5C%2Cr%3ER_%7B%5Codot%7D%5C%5C+%26%5Cfrac%7BGM_%5Codot+%28r%5E2-R_%5Codot%5E2%29%7D%7B2R_%5Codot%5E3%7D-%5Cfrac%7BGM_%5Codot%7D%7BR_%5Codot%7D%2C+%5C%2C%5C%2C%5C%2C%5C%2C%5C%2C+r%5Cle+R_%7B%5Codot%7D+%5Cend%7Baligned%7D%5Cright.+%5Ctag%7B1%7D& alt=&\Phi_0 = \Phi(r)=\left\{ \begin{aligned} &-\frac{GM_{\odot}}{r},\,\,\,\,\,r&R_{\odot}\\ &\frac{GM_\odot (r^2-R_\odot^2)}{2R_\odot^3}-\frac{GM_\odot}{R_\odot}, \,\,\,\,\, r\le R_{\odot} \end{aligned}\right. \tag{1}& eeimg=&1&&&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-566c86fa5f21d4d9c0dbb611_b.jpg& data-size=&normal& data-rawwidth=&560& data-rawheight=&420& class=&origin_image zh-lightbox-thumb& width=&560& data-original=&https://pic3.zhimg.com/50/v2-566c86fa5f21d4d9c0dbb611_r.jpg&&&figcaption&初始引力势&/figcaption&&/figure&&p&那么我们有初始度规微扰 &img src=&//www.zhihu.com/equation?tex=h_%7B%5Cmu%5Cnu%7D%28r%2C0%29%3D%5Cfrac%7B2%7D%7Bc%5E2%7D+%5Cbegin%7Bpmatrix%7D+%5CPhi%28r%29I_%7B2%5Ctimes+2%7D%26%26%5C%5C+%260%26%5C%5C+%26%260%5C%5C+%5Cend%7Bpmatrix%7D& alt=&h_{\mu\nu}(r,0)=\frac{2}{c^2} \begin{pmatrix} \Phi(r)I_{2\times 2}&&\\ &0&\\ &&0\\ \end{pmatrix}& eeimg=&1&& .&/p&&p&(如果你意识到要抬杠'怎么波动起来的h不是无迹的'那么说明你广义相对论这课上的还行,这tm根本就不是横波&b&[注1]&/b&) .&/p&&p&将原球坐标作一合适的微小坐标变换&b&[注2]&/b&: &img src=&//www.zhihu.com/equation?tex=x%5Cto+x%2B%5Cxi& alt=&x\to x+\xi& eeimg=&1&& ,可在t&0后观察到运动方程:&/p&&p&&img src=&//www.zhihu.com/equation?tex=R_%7B%5Cmu%5Cnu%7D%5Capprox+%5Cfrac%7B1%7D%7B2%7D%5Csquare+h_%7B%5Cmu%5Cnu%7D+%3D0+%5CLongrightarrow+%5Csquare+%5CPhi%28r%2Ct%29%3D0+%5Ctag%7B2%7D& alt=&R_{\mu\nu}\approx \frac{1}{2}\square h_{\mu\nu} =0 \Longrightarrow \square \Phi(r,t)=0 \tag{2}& eeimg=&1&&&/p&&p&接下来就是你们很熟悉的那套 &img src=&//www.zhihu.com/equation?tex=%5Cleft%28%5Cnabla%5E2%2B%5Cfrac%7B%5Comega%5E2%7D%7Bc%5E2%7D%5Cright%29%5Cwidetilde%7B%5CPhi%7D%3D0& alt=&\left(\nabla^2+\frac{\omega^2}{c^2}\right)\widetilde{\Phi}=0& eeimg=&1&& 在初值条件 &img src=&//www.zhihu.com/equation?tex=%5CPhi%28r%2Ct%3D0%29%3D%5CPhi_0& alt=&\Phi(r,t=0)=\Phi_0& eeimg=&1&& 下的演化.在&b&频域&/b&上 &img src=&//www.zhihu.com/equation?tex=%5Cwidetilde%7B%5CPhi%7D& alt=&\widetilde{\Phi}& eeimg=&1&& 可展开为球Hankel函数:&/p&&p&&img src=&//www.zhihu.com/equation?tex=%5Cwidetilde%7B%5CPhi%7D%28r%2C%5Comega_k%29%3D%5Csum_%7Bl%2Cm%7D%5Cleft%5B+A%5E%7B%281%29%7D_%7Blm%7D+h%5E%7B%281%29%7D_%7Bl%7D%28kr%29+%2B+A%5E%7B%282%29%7D_%7Blm%7D+h%5E%7B%282%29%7D_%7Bl%7D%28kr%29+%5Cright%5DY_%7Blm%7D%28%5Ctheta%2C%5Cvarphi%29+%5Ctag%7B3%7D& alt=&\widetilde{\Phi}(r,\omega_k)=\sum_{l,m}\left[ A^{(1)}_{lm} h^{(1)}_{l}(kr) + A^{(2)}_{lm} h^{(2)}_{l}(kr) \right]Y_{lm}(\theta,\varphi) \tag{3}& eeimg=&1&&&/p&&p&其中弱引力波色散 &img src=&//www.zhihu.com/equation?tex=k%3D%5Comega_k%2Fc& alt=&k=\omega_k/c& eeimg=&1&& . &/p&&p&显然 &img src=&//www.zhihu.com/equation?tex=%5Cwidetilde%7B%5CPhi%7D%28r%2C%5Comega%29%25%3D%5Cwidetilde%7B%5CPhi%7D%28k%2C-%5Comega%29& alt=&\widetilde{\Phi}(r,\omega)%=\widetilde{\Phi}(k,-\omega)& eeimg=&1&& 是实的并且没有角动量也不会发散,所以只有一对非零系数&img src=&//www.zhihu.com/equation?tex=A_%7B00%7D%5E%7B%281%29%7D%3DA_%7B00%7D%5E%7B%282%29%7D%3DA_k%2F2& alt=&A_{00}^{(1)}=A_{00}^{(2)}=A_k/2& eeimg=&1&&, 即剩下零阶的球Bessel函数 &img src=&//www.zhihu.com/equation?tex=%5Cwidetilde%7B%5CPhi%7D%28r%2C%5Comega_k%29%3DA_kj_0%28kr%29& alt=&\widetilde{\Phi}(r,\omega_k)=A_kj_0(kr)& eeimg=&1&&&/p&&p&为了满足初始条件,频域展开定义为 &img src=&//www.zhihu.com/equation?tex=%5CPhi%28r%2C0%29%3D%5Cint+%5Cmathrm%7Bd%7Dk+%5Cwidetilde%7B%5CPhi%7D%28r%2C%5Comega_k%29+%3D%5Cint+%5Cmathrm%7Bd%7Dk+A_kj_0%28kr%29& alt=&\Phi(r,0)=\int \mathrm{d}k \widetilde{\Phi}(r,\omega_k) =\int \mathrm{d}k A_kj_0(kr)& eeimg=&1&&&/p&&p&利用正交关系 &img src=&//www.zhihu.com/equation?tex=%5Cint%5E%5Cinfty_0%5Cmathrm%7Bd%7Dr+%5C%2Cr%5E2j_0%28kr%29j_0%28k%27r%29+%3D%5Cfrac%7B%5Cpi%7D%7B2k%5E2%7D%5Cdelta%28k-k%27%29& alt=&\int^\infty_0\mathrm{d}r \,r^2j_0(kr)j_0(k'r) =\frac{\pi}{2k^2}\delta(k-k')& eeimg=&1&&&/p&&p&可以定出 &img src=&//www.zhihu.com/equation?tex=A_k& alt=&A_k& eeimg=&1&& :&/p&&p&&img src=&//www.zhihu.com/equation?tex=A_k+%3D%5Cfrac%7B2k%5E2%7D%7B%5Cpi%7D%5Cint_%7B0%7D%5E%5Cinfty%5Cmathrm%7Bd%7Dr%5C%2C+r%5E2%5CPhi%28r%2C0%29j_0%28kr%29+%3D%5Cfrac%7B2k%7D%7B%5Cpi%7D%5Cint_%7B0%7D%5E%5Cinfty+%5Cmathrm%7Bd%7Dr%5C%2C+r%5CPhi%28r%2C0%29%5Csin%28kr%29+%5Ctag%7B4%7D& alt=&A_k =\frac{2k^2}{\pi}\int_{0}^\infty\mathrm{d}r\, r^2\Phi(r,0)j_0(kr) =\frac{2k}{\pi}\int_{0}^\infty \mathrm{d}r\, r\Phi(r,0)\sin(kr) \tag{4}& eeimg=&1&&&/p&&p&应当注意上式在 &img src=&//www.zhihu.com/equation?tex=r%3ER_%5Codot& alt=&r&R_\odot& eeimg=&1&& 的积分会炸因为 &img src=&//www.zhihu.com/equation?tex=%5CPhi%28r%3ER_%5Codot%2Ct%3D0%29& alt=&\Phi(r&R_\odot,t=0)& eeimg=&1&& 只满足零频的波动方程,所以数值上可以取一个足够大的截断,出于 &img src=&//www.zhihu.com/equation?tex=1%5Cmathrm%7Bau%7D%5Capprox200R_%5Codot& alt=&1\mathrm{au}\approx200R_\odot& eeimg=&1&& 的考虑,我们计算中取了 &img src=&//www.zhihu.com/equation?tex=R_%5CLambda%3D10%5E8R_%5Codot& alt=&R_\Lambda=10^8R_\odot& eeimg=&1&&。 所以(4)式在数值上可以近似为:&/p&&p&&img src=&//www.zhihu.com/equation?tex=A_k%3D%5Cfrac%7B2GM%7D%7B%5Cpi%7D+%5Cleft%28+%5Ccos+kR_%5CLambda%2B%5Cfrac%7B3+%5Ccos+kR_%5Codot%7D%7Bk%5E2R_%5Codot%5E2%7D-%5Cfrac%7B3%5Csin+kR_%5Codot%7D%7Bk%5E3R_%5Codot%5E3%7D+%5Cright%29+%5Ctag%7B4.1%7D& alt=&A_k=\frac{2GM}{\pi} \left( \cos kR_\Lambda+\frac{3 \cos kR_\odot}{k^2R_\odot^2}-\frac{3\sin kR_\odot}{k^3R_\odot^3} \right) \tag{4.1}& eeimg=&1&&&/p&&p&由于这道题的魔幻程度&b&[注1]&/b&,我们不如令 &img src=&//www.zhihu.com/equation?tex=%5Cpartial_t+%5CPhi%28r%2C0%29%3D0& alt=&\partial_t \Phi(r,0)=0& eeimg=&1&&, 实空间的波动解可以写成:&/p&&p&&img src=&//www.zhihu.com/equation?tex=%5CPhi%28r%2Ct%3E0%29%3D%5Cint_0%5E%5Cinfty%5Cmathrm%7Bd%7Dk%5Cwidetilde%7B%5CPhi%7D%28r%2C0%29%5Ccos%28%5Comega_kt%29+%3D%5Cint_0%5E%5Cinfty%5Cmathrm%7Bd%7DkA_kj_0%28kr%29%5Ccos%28ckt%29+%5Ctag%7B%24%5Cstar%24%7D& alt=&\Phi(r,t&0)=\int_0^\infty\mathrm{d}k\widetilde{\Phi}(r,0)\cos(\omega_kt) =\int_0^\infty\mathrm{d}kA_kj_0(kr)\cos(ckt) \tag{$\star$}& eeimg=&1&&&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-b2a62d0e12acd5f16c3aebfb1935dff1_b.jpg& data-size=&normal& data-rawwidth=&560& data-rawheight=&420& class=&origin_image zh-lightbox-thumb& width=&560& data-original=&https://pic1.zhimg.com/50/v2-b2a62d0e12acd5f16c3aebfb1935dff1_r.jpg&&&figcaption&左图是引力势的径向传播,右图是引力加速度的径向传播&/figcaption&&/figure&&p&我们观察到&img src=&//www.zhihu.com/equation?tex=%5Cpartial_r%5CPhi%28r%2Ct%5Cgg+R_%5Codot%2Fc%29& alt=&\partial_r\Phi(r,t\gg R_\odot/c)& eeimg=&1&&是一个衰减的鼓包&b&[注3]&/b&,也就是说加速度的随半径梯度先负后正,也就是说,被辐射的物体应当&b&先被挤压后被拉伸&/b&。(对于作用在物体上潮汐力压强,应正比于重力加速度的梯度在对应方向上的积分。)&/p&&p&现作估计,我们注意到弱引力下近似有守恒量&b&[注4]&/b&:&/p&&p&&img src=&//www.zhihu.com/equation?tex=%5Cbegin%7Bal

我要回帖

更多关于 打完肉毒杆菌注意事项 的文章

 

随机推荐