精华内容
下载资源
问答
  • 原标题:sleep()到底多久,你知道吗? 最近负责个很简单的需求:在服务器上起个后台进程,每隔10秒钟上报一下CPU、...但是看子机上的日志,这段时间按照预设的间隔成功上报,那问题出在哪儿呢?开发时...

    原标题:sleep()到底睡多久,你知道吗?

    最近负责一个很简单的需求:在服务器上起一个后台进程,每隔10秒钟上报一下CPU、内存等信息。就是这么简单的需求,发生了一个有趣的问题。

    通过数据库查看上报的数据,发现Windows服务器在5月24号14:59到15:12之间,少上报了一个数据,少上报的数据会用null填充。但是看子机上的日志,这段时间均是按照预设的间隔成功上报,那问题出在哪儿呢?

    开发一时也是一脸茫然,建议把测试时间调长,看是否能找到规律。好吧,那就把测试时间改到19个小时,这下还真的发现了一点规律。

    上图第一列是这段时间上报的数据点序列,即第95个点,第419个点,第二列是上报的信息,把所有的null过滤出来,看到相邻行的序号相差都在320~330之间,换算成时间,就是大概55分钟会少上报一个数据。

    2. 原因排查

    虽然找到了掉点的规律,但是从子机日志看都是上报成功的,是因为子机在这段时间就少采集了一个点吗?如果是这样的话,那么每次采样周期应该是超过10s的。

    下面是信息采集上报的主循环代码,这里m_iInterval为5,也就是在每个采样周期内,这个循环会执行两次,然后上报这两次中最大的值。

    2.1 猜测1:updateData()有耗时,导致整个循环周期的时间大于预期

    从上面的代码可以看出,每个上报周期,代码的执行逻辑如下示意图,我们第一反应是updateData()的执行肯定也会耗时,那么会导致整个采样周期大于10s。一段时间后,就会少上报一个数据,幸福好像来的太突然。

    为了验证这个猜想,我们统计了一下updataData()的耗时,统计的结果看updateData()耗时都是0,也就是updateData()基本上是不耗时的,事实和我们预想的并不一样。

    2.2 猜想2:Sleep()有误差

    排除了updeData()的原因,现在只能把目光聚焦在Sleep函数上,难道是Windows的Sleep函数实际休眠的时间和预期有差异?为了验证这个猜想,我们又在日志中打出了Sleep实际执行的耗时和预期之间的差异。

    这次好像看到了希望,从输出的日志看,Sleep最终休眠的时间会比预期多15ms,这样以来,每个上报周期就会多30ms,也就是在55分钟内可以上报330个点,现在只能上报329个点。

    那么问题来了,为什么在Windows上Sleep()会比预期的多15ms呢?

    我们知道Windows操作系统基于时间片来进行任务调度的,Windows内核的时钟频率为64HZ,也就是每个时间片是15.625同时Windows也是非实时操作系统。对于非实时操作系统来说,低优先级的任务只有在子机的时间片结束或者主动挂起时,高优先级的任务才能被调度。下图直观地展示了两类操作系统的区别。

    MSDN 上对Sleep()的说明:Sleep()需要依赖内核的时间片,如果休眠时间在1~2时间片之间,那么最终等待的时间会是1个或者2个时间片,也就是Sleep()会有0-15.625(1个时间片)的误差,那么到这里我们的问题也就弄清楚了。

    3. 解决方案3.1 官方方案

    微软官方针对Sleep耗时不精确的问题,也给出相应的解决方案:

    调用timeGetDevCaps获取时钟定时器能支持的最小粒度

    在定时开始之前调用timeBeginPeriod,这样会把时钟定时器设置为最小的粒度

    在定时结束之后调用 timeEndPeriod,恢复时钟定时器的粒度

    同时,官方文档也指出timeBeginPeriod会对系统时钟、系统耗电和任务调度有影响,也就是timeBeginPeriod虽好,当不能滥用。

    3.2 开发的方案

    开发最后没有采用官方给的方案, 毕竟频繁调用timeBeginPeriod,带来的影响很难预估。而是采用了比较巧妙的方法:本次等待时长会减去上次多等的时间,即如果上次多等了15ms,那么下次只用等4895ms就可以了,这样可以保证每次循环周期是10s。

    写到这里,问题已经解决,这时又有个疑惑涌上心头,Linux服务器上有同样的上报功能,为什么Linux子机没有这个问题呢?难道Linux对应的开发是大婶,已了然这一切?

    4. Linux系统上sleep()是怎样的呢?

    找到了Linux上对应的代码,原来这个开发哥并没有像Windows的开发哥那样自己去写一个定时的任务调度,而是用了一个开源的任务调度库APScheduler,才免遭遇难。看来这里的奥秘都在这个开源库中,接着就去看看APScheduler是怎样做任务调度的。 APScheduler主循环的代码如下,红框圈出了一行关键的代码,这行代码的意思是:本次任务执行完成之后,在下次任务开始前需要等待wait_sechonds的时间。

    而self._wakeup是一个Event的对象,而Event正是Python系统库threading 中定义的。而Event常用来做多线程的同步。

    官网对Event.wait()的解释:调用wait()之后,线程会一直阻塞,直到内部的flag设置为true,或者超时。在没有别的线程设置internal flag时,wait()就可以起到一个定时器的作用。

    那么问题又来了,Event.wait()如果用作定时器,误差是多少呢?写个demp验证一下。

    从测试数据看,Event.wait()取100次的平均偏差为0.1ms,而time.sleep()的平均偏差为7.65ms,看起来Event.wait()精度更高。

    这里再回到我们第一个猜想,其实我们的猜想是合情合理的,如果updateData()的耗时较长,整个循环周期必定会超过预定的值,所以这里的实现并不严谨,而 APScheduler则是通过起一个新的线程去执行任务,并不会阻塞循环周期,可以看到APScheduler在这里处理的还是很合理的。

    5. 结论

    啰嗦了这么多,总结一下上面的内容:

    sleep()在Windows和Linux系统上和预设值都会存在一个偏差,偏差最大为1个时间片的时间;

    Event.wait()用来做定时器精度会更高,可以达到0.1ms;

    APScheduler看起来是个不错的任务调度库。

    觉得本文有帮助?请分享给更多人

    关注「猿助猿」成就顶级开发

    技术交流QQ群:517877452返回搜狐,查看更多

    责任编辑:

    展开全文
  • 、香烟当然有保质期了香烟确实有保质期,或者说在时间段内,香烟不会发生质变。自然界中的万事万物其实都会发生变化,只是有些变化快而明显,有的变化慢而且不明显。烟丝经过烘烤以后,其实已经非常稳定,...

    一般烟民购烟只会关注香烟的真假,很少关注香烟的保质期。那么问题来了,香烟到底有没有保质期?能保存多久?为什么有的国家(地区)香烟会标注保质期,而中国大陆的香烟不在烟盒上标注保质期?

    一、香烟当然有保质期了

    香烟确实是有保质期,或者说在一个时间段内,香烟不会发生质变。自然界中的万事万物其实都会发生变化,只是有些变化快而明显,有的变化慢而且不明显。烟丝经过烘烤以后,其实已经非常稳定,无法明确界定某个时间段是它的保质期,但是一旦暴露在空气中依然会发生一些细微的变化,最终逐渐发霉质变。

    b45a90c76189ade23a20c46e5cfeb36e.png

    二、香烟跟普通食品有所区别

    要弄明白香烟到底能存放多长时间首先要明确一个概念,香烟并不像其它食品是直接入口进入人体内消化的,香烟的有害物质来自于烟草燃烧后产生的气体。而这些烟气当中的有害物质比如尼古丁、苯丙芘等并不因为香烟存放时间长短而发生变化。也就是说,通常情况下,只要香烟没有出现发霉都可以抽,甚至有轻微出油的情况也不会影响香烟的口感。实际上,还有一批为了怀念老烟的味道,专门在各地寻找绝版老烟抽的人,他们被称为“老火”。一些存放十来年的三五块钱的烟,他们抽起来感觉比现在一些三五百的高档烟还好抽。

    37be2a5823f813fa1ef1cde18f95a3ef.png
    烟悦上网友开包的老石林烟并没有发霉

    三、香烟保存时间跟存放条件有很大关系

    那么香烟到底可以保存多久不发霉呢?根据很多烟酒店店主的实践经验来看,跟存放的条件存在很大关系。知道香烟制作流程的朋友应该清楚,我国的香烟大多为烤烟,即先将烟叶在专门的烤房里面烤干,切丝以后要进行膨化处理,然后还要回润,烟支制作完成后还要采用锡纸和玻璃纸两层密封,以保持最佳的湿润度。所以,香烟是很害怕高温、高湿和阳光照射的。如果保存条件不当,烟丝很容易蒸干然后吸收过多水分从而发霉变质。所以,如果保存得当,三年五年都没事,保存不当一年不到就会发霉。我国因为幅员辽阔,南方和东西气候差距巨大,各地存放时长也不一样。通常情况下,香烟在南方保存时间要比正北方短一些。

    3873a2e0ffcd731c36f94c29857d2bac.png
    雪茄箱或者相机柜都是用来保存香烟不错的选择

    四、为什么国内香烟不标明保质期

    其实世界上大部分国家和地区的香烟都没有标注保质期,而是标注生产日期,我国的香烟也会在整箱的包装箱上印刷了生产日期。有的产品比如中华香烟通过紫光灯照射后观察到的生产批号也能看出大概生产日期。标注了保质期的香烟常见的是日本烟和台湾烟,保质期一般是一年左右。这其实跟这两个地方的气候有很大关系,海洋气候空气潮湿,高温多雨,香烟存放条件比较差,容易产生霉变的情况,标注生产日期和保质期可以较好地保障消费者的利益。

    从我国烟草销售的实践来看,由于我国是一个烟草大国,烟草流通速度非常快,加上国内的烟草专卖制度,会定期安排人到烟店检查, 一般情况下几乎不会存在库存滞销这种现象,所以标不标保质期意义似乎不大。加上我国幅员辽阔,南北和东西差异比较大,很难用一个准确的标准去界定全国的香烟保质期。

    a5d2275b6b7fcaedd31781e8f80b3ae8.png
    台湾地区的香烟都标注了有效日期

    所以,香烟保质期这个问题,大家真的不用太担心,只要打开烟没有发霉现象就可以抽。对于已经开封了的香烟就要尽早抽完。

    更多香烟科普知识欢迎关注公众号“品鉴哥”

    展开全文
  • 离婚案件也属于民事案件中的种,因而在对离婚案件进行审理的...、离婚判决书下达要多久时间?即使提出诉讼,对于婚姻案件的审理,也要符合法律规定期限。通常一审期限按照简易程序需要三个月,二审按普通程序...
    526462c863ad8d65ea6cb156d96e1cdd.png

    离婚案件也是属于民事案件中的一种,因而在对离婚案件进行审理的时候,肯定就是按照《民事诉讼法》中的规定进行,而在审限上面,则要求离婚案件一审如果是简易程序的话则需要在3个月之内审结。但如果此时已经进入了二审阶段的,则按照普通程序处理的话,则一般是要在6个月之内审结。

    69f492bcd3b1819a5fea982a56a8e70a.png

    一、离婚判决书下达要多久时间?

    即使提出诉讼,对于婚姻案件的审理,也要符合法律规定期限。通常一审期限按照简易程序需要三个月,二审按普通程序算期限是六个月,合起来一个离婚案件从头到尾少则4个月,多则9个月。假如在第一次提出离婚判决不准离婚的情况下,那么第二次提起诉讼,我国《民事诉讼法》规定,要在六个月之后才可以提出第二次起诉。

    按照这个期限计算,如果起诉两次才达到最终离婚目的,从时间上计算,差不多一共要一年半到两年左右。这还不包括涉外婚姻以及另一方存心拖延的情况。所以,坚持离婚的一方到法院诉讼离婚,不是说很快就可以解决的。

    d4382b07ad56c6c7beca5339379ca150.png

    二、哪些情况下法院会判决离婚?

    1、人民法院判决是否离婚,是从维护家庭稳定、促进社会和谐的大原则考虑,所以对于判决离婚的案件,比较谨慎。

    2、现行婚姻法明确规定,只有符合婚姻法所规定的法定的夫妻感情确已经破裂情形,法院才会判决离婚。具体来说是我国婚姻法规定的以下情形:

    (1)配偶一方存在重婚或者与其他异性同居情形;

    (2)一方存在长期家庭暴力情形;

    (3)有遗弃和虐待家庭成员的情形;

    (4)夫妻双方因为感情不和分居两年以上情形;

    (5)其他的情形。

    9e6a4f89d6d75ccaf06404a63e12e0a3.png

    起诉离婚的时候,因为程序比较复杂,而法官在审理的过程中,自然也就会耽误比较长的时间,从这点上来看,实践中选择协议方式离婚的夫妻就远远多于诉讼离婚。而诉讼离婚中,最后是否会被判决离婚,还要看法官做出的判决,这个时候也要求符合了诉讼离婚的标准,那么才能在调解无效的情况下,判决夫妻离婚。

    如果您有法律问题想要咨询,可关注我们的公众号365在线法律咨询,私信咨询。也可以直接点击文章末尾左下方的“了解更多”,即刻在线免费咨询专业律师。

    展开全文
  • 程序员到底能做多久

    千次阅读 2012-08-11 12:07:02
    一个做了几年之后的程序员,发展往往会遇到瓶颈,会很迷茫该如何发展,究竟继续做技术,还是转...实际上做了一段时间后才发现,技术也只是浮云。我们原来之所以认为技术重要,因为我们站在的高度还不够。如果站到产

    一个做了几年之后的程序员,发展往往会遇到瓶颈,会很迷茫该如何发展,究竟是继续做技术,还是转其它方面,都会有很多困惑。很多人说程序员吃的是青春饭,三十岁之后必须得转行,并有很多讨论,对于这个争论,本人最近也很有感慨。

    很多年少轻狂的程序员都曾经为技术着迷过,认为技术就是王道,其它都是浮云。实际上做了一段时间后才发现,技术也只是浮云。我们原来之所以认为技术重要,是因为我们站在的高度还不够。如果站到产品和应用的高度,技术真只是浮云。产品最大的关键是用户体验,虽然技术对用户体验有一定影响,但无疑是有限的。同样的产品实现起来会有很多种技术,产品更新的速度往往决定我们没有时间去比较那么多的技术。程序员往往会很关心底层代码,而不大在意界面,而不知用户关心的正是界面漂亮不漂亮,好不好用,至于你底层用了什么框架,代码写的优美不优美,没人关心。因此,程序员对业务的熟悉往往比技术重要得多,这也要求程序员在做事时不能只顾眼前(技术),而要看整个大局(业务),这是程序员发展的必经之路,否则就不是一个好程序员。

    程序员刚开始都是苦逼的码农,需求方拿着需求过来,去沟通需求,去了解业务,再去实现业务。结果刚实现完成,需求变了,又要修改,有的甚至要推倒原来的设计重新来做。遇到Bug反复调试,带新同事还要调试各种奇怪的问题。但是程序员必须突破这一点,只有看得更远了,才能真正突破,这就是前面说的去了解业务,自己去发现需求,实现最有价值的需求。同时,程序员的向上发展,还会调整自己的工作重点,将更多的精力放在功能设计和系统构架上,提出好的解决方案,而将基础的代码实现和功能调试交给其他人去做。

    当然,如果你只是想向上发展,你不一定有机会向上发展。在阿里内部,一个大P一定是得有一定影响力和一定气场的。而影响力和气场,除了要对基础的技术有一定钻研外,更大的却是靠分享获得。阿里是一个极重视分享的公司,如果你对技术研究得很深,但你没有分享,别人仍然不知道你的技术好。因为,分享对一个程序员的发展来说,极为重要。因为没有人会看你的代码写的究竟是怎么样,实现的时候用了什么高级技术。但只有你分享出来了,别人才知道,原来你对技术的研究到了什么什么程度,从而积累了你的影响力和人气。而传说中的气场,那就是在业界的影响力,需要你分享的圈子越来越大,分量也得越来越重。

    因此,回到刚开始的那个问题,我觉得程序员注意自身发展,可以一直做下去,但如果不知道变通,不能自我提升,则是死路一条,在任何行业都是一样。

    展开全文
  • 最近总有同学问我,要准备雅思考试到底需要准备多长时间,这一点没有办法详细确认的,根据每个人的英语水平不同花费的精力时间自然不同,但今天也把各分数可能需要的时间,仅代表大多数学生,基础不同的请自动...
  • 忘掉一个人,处女座需要多久?原因:自尊心太强大处女座忘记一个人真的需要一年半,不是因为她们难以忘记对方,而是因为处女座的人12...这段时间,他们会用各种各样的办法,让自己走出那一段感情。处女座如何忘...
  • 由于互联网的不断发展,移动APP已经成为了当下最热门的应用工具,对于想开发手机APP的企业来说,他们最关心的问题就是开发款手机app的周期到底是多久,因为开发周期是他们做好开发成本以及软件的发展规划的重要...
  • 现在用的fakeapp,我的1060显卡,换一段不到1分钟的视频,居然训练了3天,还是没到0.02。 有没有大神指点?不要说的这么高端 问题:训练时间到底和哪些主要的东西挂钩?A视频大小还是长短?1060的显卡3G的,用...
  • 尤其是对于多次作案的多次到底是几次,以及作案的时间是多久,大多数人还不清楚。那么什么叫多次作案时间段如何划分,下面华律网的小编为您整理了相关内容,来为您解答。车辆乱停放算交通违章吗车辆交通2019-09-10 ...
  • 明显的官本位特点, 乌云打不开了,昨天就打不开了,乱七八糟的...最短的时间是多久,最好的姿态是什么姿态。 两句话,抛出3个问题。而且是引人联想,发散思维的。 比自问效果还好。 然后就是一套空话,为了...
  • 也就意味着:在医生的治疗下,本来需要拔除的牙齿,我们又多使用了一段时间!图为我正在为患者做根管治疗。Q:根管治疗后,牙齿到底还能用多久?那很多人都在问,这个时间究竟是多久呢?根管治...
  • 也就意味着:在医生的治疗下,本来需要拔除的牙齿,我们又多使用了一段时间!牙疼牙疼那很多人就会纠结,这个时间究竟是多久呢?到底有没有必要接受根管治疗呢?根管治疗后牙齿寿命因人而异,一般...
  • 段时间,中考录取线公布了,我们家炸了锅,每个人都开心不起来,因为我最小的弟弟(姑姑家的儿子)中考考砸了,重点中学无望了,只能进个不怎么样的普通高中,想要考个好大学基本希望渺茫。我姑姑为了这事急...
  • 不知不觉已经到了软考冲刺阶段了,不知道大家有没有开始快节奏地学习,在最后的冲刺阶段,也有很多小伙伴遇到了新问题,收集了一些大家较为关注的问题,...上述的这些问题大家并不陌生,所以到底多久才管用?根
  • 逐青曾经很喜欢玩战略游戏,有一段时间他一直泡在自己发现的一个游戏《克隆人大战》里。有一次逐青碰上这样的局面: 他的建筑也全部被摧毁,只留下几个克隆人士兵和一个生化学家,不过敌人的有生力量也已经全部被...
  • selenium之时间等待

    2017-09-29 11:46:52
    此方法会把当前的driver进程暂停一段时间,然后在执行接下来的操作。这方法有个缺点就是,你不能确定元素到底多久加载出来,如果你的sleepTimes10秒,但是元素2秒就加载出来了,那么此进程还会继续等待8秒,造成...
  • 很多新人程序员一开始在学习上找不到方向,但我想在渡过了一段时间的新手期之后,这类问题大多都会变得不再那么明显,工作的方向也会逐渐变得清晰起来。 但是没过多久,能了解到的资料就开始超过每天学习的能力,像...
  • 工作第

    2013-07-08 23:41:22
    离开学校已经有一段时间了,我发现我蛮适应这种生活的~IT男的生活,早上7点起床,抓上两个面包赶公交,晚上就不一定什么时候回来了,双休吗,基本上就是没有。既然选择了就不要后悔,路自己选的~~讲讲这工作一周的...
  • 问题在于这段时间到底是多久?理想的客户端应在接收到数据时立即读取数据。 改进 客户端发送数据时,可以知道数据的大小(长度)。客户端接收数据的时候,可以知道接收到数据的大小(长度)。所以,客户端循环...
  • 段时间,接触过许许多多中小工业品企业的老板,在被“互联网思维”、“互联网+”、“中国制造2025”、“工业4.0”、“供给侧改革”……各种新概念、新思维甚至噱头在过去的两年中轮番狂轰乱炸后,普遍觉得有些迷茫...
  • 何时启用单元测试

    2017-12-13 10:43:00
    工作中经常看到很多丑陋的代码,或者,自己写的代码过一段时间之后自己也觉得很丑陋,促使你不断的去重构。 那么,这些丑陋的代码什么时候编写的呢?它们到底存在多久了呢? 大多数情况下,这些丑陋代码已经存在...
  • 浏览器渲染原理

    2016-04-08 19:51:00
    其实,在我们等待页面打开的这段时间里,浏览器可是做了不少的事情,到底是什么事情呢,就我们起来看看吧 首先,我们需要先了解一下什么是页面渲染以及页面渲染的整个过程~ 1、页面渲染 简单地说,页面渲染...

空空如也

空空如也

1 2 3
收藏数 53
精华内容 21
关键字:

一段时间到底是多久