标签目录:摩登平台注册登录

摩登3测试路线_Molex莫仕就“未来汽车”发布全球汽车调研结果

· 91% 的受调研者表示,2030 年时汽车将采用全电或混合动力 · 自动驾驶技术将主要关注司机和乘客安全 · 高速 WiFi、无线充电和车辆间通信成为最主要的功能特点 · 软件定义车辆作为汽车厂商最重要的议题 美国伊利诺伊州莱尔 – 2021 年 1 月 7 日 – 全球领先的连接与电子解决方案提供商Molex莫仕发布面向汽车行业决策者的全球性调研成果,对将会影响到“未来汽车”战略与商业决策的主流趋势与技术进行了展望。调研结果对促成电气化与互联化的数据、软件及网络所发挥的关键作用给予了充分的肯定 – 已经将这两方面认定为最重要的创新领域。 Molex莫仕负责交通运输与工业解决方案的高级副总裁 Mike Bloomgren 表示:“这在汽车业是一个激动人心的时刻,并且本次调研突出了投资和创新上加速发展的步调。调研成果还增强了我们的使命感,那就是要设计出适用于未来互联汽车中枢神经系统的各种关键性的电子解决方案。” Molex莫仕在 2020 年 11 月委托了 “空间调查” (Dimensional Research) 开展 “汽车的未来”调研活动,面向的对象是雇员数不少于 1,000 名的车企,向工程、产品、采购、研发、供应链、创新或战略职能上 230 名具有资格的参与者征询了意见。向调研对象提出的问题旨在帮助他们设想出,到了 2030 年人们普遍购买的新车会是什么样子,其中包括了顶级功能、有关计划以及创新成果。 重要的调研结果包括: · 91% 的调研对象表示,届时的汽车将会是全电 (64%) 或者混合 (27%) 动力 · 97% 预计到 2030 年将会解决“里程焦虑”问题 · 94% 预计车中会包括自动驾驶功能;仅有 28% 设想会变为完全无人驾驶 · 56% 认为,2030 年的汽车至少要比今天的价格贵出一半 在谈到整个生态系统中,哪些领域最有可能降低2030 年时的汽车价格时,节省电池成本 (40%)、软件集成 (34%) 和制造工艺 (32%) 占了主导地位。此外,有 96% 的受访者一致认为,未来的汽车将会要求制造工厂开展创新。 顶尖的功能、技术与创新 根据调研对象的说法,到 2030 年最有可能成为标准的前三项功能包括高速 WiFi、无线充电和车辆间通信。在为下一个十年选择五个最重要的创新领域时,受访者挑选出的是电气化 (38%)、互联化 (33%)、乘客安全 (29%)、质量与可靠性 (28%),以及软件定义的基础设施 (27%)。 此外,60% 的调研对象倾向于将通过软件来实现创新的能力作为一个优先事项,涵盖了自动驾驶所需的智能功能、降低能耗的高级算法、新功能的远程更新以及定制的驾驶体验。总体上说,参与者提出的客户需求与技术创新将对未来的汽车发展产生影响,在加快绿色倡议或者社会责任计划的发展方面尤为突出,范围从零排放车辆一直延伸到了零废弃物生产。 科技公司及中国发展势头加大 44% 的调研对象预计,现有的汽车厂商会推动 2030 年大家购买的普通汽车的发展,而有 32% 的受访者则提到了科技公司日益显露出的吸引力。由于在用户体验和人机接口上具有丰富的经验,预计苹果、谷歌和微软之类的企业将获得极大的发展势头。此外,同样重要的还包括,业内普遍认为中国会率先生产出具有代表性的未来汽车,紧随其后的则是美国、日本和德国。 克服障碍是当务之急 参与者们以绝对的多数提到了实现创新过程中遇到的主要技术挑战,有 44% 认为在于电池续航时间不足,而有 36% 则表示在极端情况下电子元件和软件的运行遇到了障碍。此外,33% 的受访者表示说在电气化、5G、安全和其他所需的技术方面,难以获得相关的专业经验。 近 30 年来,Molex莫仕在汽车行业、特别是在满足需求以实现移动设备和数据服务的完美互连方面,扮演了一个至关重要的角色。公司在此期间为一家重要的汽车业 OEM 供应过超过 95% 的发动机控制及动力总成连接解决方案。在产品质量与客户协作方面,Molex莫仕引入了业务网络上的悠久传承和长期的声誉,从而满足客户对整个汽车生态系统日益增长的需求,业务横跨电气化、高级驾驶辅助系统 (ADAS)、汽车高速网络、车辆天线系统、互联汽车解决方案以及车辆到一切的通信 (V2X)。

摩登3平台首页_真相了!敲代码时,程序员戴耳机究竟在听什么?

你身边有没有这样一群人,除了早上打个招呼,必要的工作沟通,其它时候一直带个耳机。 这不就是我吗? 知乎上有个提问:程序员上班时戴耳机是在听什么? 高赞回答是:戴上耳机是告诉其他人不要打扰我,实际上并没有在放音乐。 程序员在工作时间里除了其他人过来打扰,他的 IM 通讯软件是这样的: [置顶]业务群:@你 … 产品-刘同学:这块需求我想改成… 测试-陈大姐:今天要上线了,你赶紧改下最后两个 Bug 吧 测试-李妹:你昨天提测的项目有问题啊,先帮忙查下吧,主要流程… 前端-程小哥:这接口你得给我传两个值 产品-王同学:帮忙看下线上问题吧,用户很着急 技术群:@ all,今天下午四点有技术分享会,请大家准时参加 … 消息不断跳出,任务栏不断闪烁催促你去点开。还有人直接找你讨论问题,你不得不停下手上的工作,一次次去回应这些紧急事情。 等回答完想继续刚才的工作,却忘记刚才写到哪里,又得重新捋思路。 有数据显示:人被打扰后重拾起原来的思路平均需要3分钟,由于几分钟就被打断一次,每天大约有2.5小时被浪费掉的。 等到了下班点,你才惊觉,这一天好像没做什么就过去,今天要做的需求连一行代码还没有开始写呢。于是你开始例行的加班。 在《深度工作》中作者提出一个公式:高质量工作产出=时间×专注度。 高质量工作产出需要人进入深度工作状态,深度工作指的是在无干扰的状态下专注进行职业活动,此时个人的认知能力达到极限。 这种努力能够创造新价值,提升技能,而且难以复制。 你有没有试过上班来早了或者等大家下班后,办公室安安静静的。你戴上耳机,退出IM软件,沉浸在编程世界里,思路顺畅,像打通任督二脉,效率特别高,代码质量很好,只用两个小时便完成平常一天的活。 而与深度工作相反的是浮浅工作,浮浅工作往往在受到干扰的情况下开展。此类工作是认知要求不高的事务性任务,很容易复制。 书里指出越来越多知识工作者因为不断被小事扰乱心神而用浮浅工作替代了深度工作。越是经常在极度浮浅的状态工作,越将会降低自己深度工作的能力。 所以内秀的程序员通常采用物理隔音——戴耳机被动地躲开打扰。 当然带耳机也有其它原因: @layla 每天开完早会就带上耳机开始自己一天的工作,其实啥也没听,就是想静静,选择性屏蔽一些不想听的话。 @yue 无聊解压用的,听歌可以振奋人心,帮助度过无聊时间,也激发工作动力 除了戴耳机,还有几招能从根源上减少些打扰,提高重拾思路的时间: 1.被打乱时先花几秒写好注释 刚把对象取出来,开始“.”的时候,PM 来了:诶,能帮忙—— 你先花几秒钟淡定地先将.后的方法写好,把下一步要做的事简单两几个字注释,如//做判断//,帮助你快速地接上被打乱前的思路。 用“我沉浸在编程的世界里你居然敢打断我”的表情缓慢地摘下耳机,记住耳机只需离开耳朵一厘米,这表示你随时会戴上耳机干活去,暗示对方有事快说,不做闲聊。 要面瘫,不用微笑。 2.拒绝回答不经思考的简单问题 PM:你还记得上次你做的那个需求吗?线上的逻辑是怎样的呀? 你:不记得了,自己看需求文档吧,或者问负责这块的PM。 新人:这个工具怎么用? 你:自己搜索去吧。 有数据统计,80% 的打扰是没有意义或者极少有价值的。 职场时间宝贵,求助者有责任在提问前确认问题是否值得问。如果问题是可以直接查询或者能从搜索结果前三页获取的,这些问题是不需要回答的,你无需浪费自己的时间放他人之懒。 这招还可以跟二维码大法混合使用,能击退大部分的简单问题: 3.学会甩锅 PM:这个需求我想改改… 你:你先找我 TL 对下排期 PM:线上这个数据不对啊 你:在某表某字段,你自己查 我们部门的 PM 就这样学会写 sql 查数据,徒手登服务器查业务日志。如果你不好意思拒绝一个“顺手”“只占几分钟”的小要求,后面还有 abcd 个小要求笑眯眯地在等着你。 4.承诺完成的deadline 网上有一张图形象地说明理想的工作计划和实际情况:无打扰的高效率理想工作模式和不断地被打乱的实际工作模式。 有些紧急事情是必须放下手下工作去做的,例如测试说,项目今天要上线,你赶紧改下这两个bug。 此时先和发起人确定完成的deadline:我将会在下午前两点改好,改完会告诉你的,不用催促。将被动化为主动,临危不乱,有条理地安排好手上的工作。 刚开始这么做可能会让人感觉不自在,因为和普通的人际交往游戏规则相左:举手之劳,能帮则帮。采用上述方法后,发生一些不愉快的事情也是在所难免。有些人或许会感到疑惑或生气,认为你不近人情。其实,这没什么大不了的。 正如《深度工作》里说的:培养允许坏的小事发生的习惯。否则,你将永远发现不了改变命运的大事。其他人会很快调整对你的期望,适应你的工作习惯。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3测速登录地址_是什么让Spring5放弃了使用Guava Cache?

来源:https://albenw.github.io/posts/a4ae1aa2/ 概要 Caffeine是一个高性能,高命中率,低内存占用,near optimal 的本地缓存,简单来说它是Guava Cache的优化加强版,有些文章把Caffeine称为“新一代的缓存”、“现代缓存之王”。本文将重点讲解Caffeine的高性能设计,以及对应部分的源码分析。 与Guava Cache比较 大家都知道,Spring5即将放弃掉Guava Cache作为缓存机制,而改用Caffeine作为新的本地Cache的组件,这对于Caffeine来说是一个很大的肯定。为什么Spring会这样做呢?其实在Caffeine的Benchmarks里给出了好靓仔的数据,对读和写的场景,还有跟其他几个缓存工具进行了比较,Caffeine的性能都表现很突出。 使用Caffeine Caffeine为了方便大家使用以及从Guava Cache切换过来(很有针对性啊~),借鉴了Guava Cache大部分的概念(诸如核心概念Cache、LoadingCache、CacheLoader、CacheBuilder等等),对于Caffeine的理解只要把它当作Guava Cache就可以了。 使用上,大家只要把Caffeine的包引进来,然后换一下cache的实现类,基本应该就没问题了。这对与已经使用过Guava Cache的同学来说没有任何难度,甚至还有一点熟悉的味道,如果你之前没有使用过Guava Cache,可以查看Caffeine的官方API说明文档,其中Population,Eviction,Removal,Refresh,Statistics,Cleanup,Policy等等这些特性都是跟Guava Cache基本一样的。 下面给出一个例子说明怎样创建一个Cache: private static LoadingCache<String, String> cache = Caffeine.newBuilder()            //最大个数限制            .maximumSize(256L)            //初始化容量            .initialCapacity(1)            //访问后过期(包括读和写)            .expireAfterAccess(2, TimeUnit.DAYS)            //写后过期            .expireAfterWrite(2, TimeUnit.HOURS)            //写后自动异步刷新            .refreshAfterWrite(1, TimeUnit.HOURS)            //记录下缓存的一些统计数据,例如命中率等            .recordStats()            //cache对缓存写的通知回调            .writer(new CacheWriter<Object, Object>() {                @Override                public void write(@NonNull Object key, @NonNull Object value) {                    log.info("key={}, CacheWriter write", key);                }                @Override                public void delete(@NonNull Object key, @Nullable Object value, @NonNull RemovalCause cause) {                    log.info("key={}, cause={}, CacheWriter delete", key, cause);                }            })            //使用CacheLoader创建一个LoadingCache            .build(new CacheLoader<String, String>() {                //同步加载数据                @Nullable                @Override                public String load(@NonNull String key) throws Exception {                    return "value_" + key;                }                //异步加载数据                @Nullable                @Override                public String reload(@NonNull String key, @NonNull String oldValue) throws Exception {                    return "value_" + key;                }            }); Caffeine的高性能设计 判断一个缓存的好坏最核心的指标就是命中率,影响缓存命中率有很多因素,包括业务场景、淘汰策略、清理策略、缓存容量等等。如果作为本地缓存, 它的性能的情况,资源的占用也都是一个很重要的指标。下面 我们来看看Caffeine在这几个方面是怎么着手的,如何做优化的。 (注:本文不会分析Caffeine全部源码,只会对核心设计的实现进行分析,但我建议读者把Caffeine的源码都涉猎一下,有个overview才能更好理解本文。如果你看过Guava Cache的源码也行,代码的数据结构和处理逻辑很类似的。 源码基于:(caffeine-2.8.0.jar) W-TinyLFU整体设计 上面说到淘汰策略是影响缓存命中率的因素之一,一般比较简单的缓存就会直接用到LFU(Least Frequently Used,即最不经常使用)或者LRU(Least Recently Used,即最近最少使用),而Caffeine就是使用了W-TinyLFU算法。 W-TinyLFU看名字就能大概猜出来,它是LFU的变种,也是一种缓存淘汰算法。那为什么要使用W-TinyLFU呢? LRU和LFU的缺点 LRU实现简单,在一般情况下能够表现出很好的命中率,是一个“性价比”很高的算法,平时也很常用。虽然LRU对突发性的稀疏流量(sparse bursts)表现很好,但同时也会产生缓存污染,举例来说,如果偶然性的要对全量数据进行遍历,那么“历史访问记录”就会被刷走,造成污染。 如果数据的分布在一段时间内是固定的话,那么LFU可以达到最高的命中率。但是LFU有两个缺点,第一,它需要给每个记录项维护频率信息,每次访问都需要更新,这是个巨大的开销;第二,对突发性的稀疏流量无力,因为前期经常访问的记录已经占用了缓存,偶然的流量不太可能会被保留下来,而且过去的一些大量被访问的记录在将来也不一定会使用上,这样就一直把“坑”占着了。 无论LRU还是LFU都有其各自的缺点,不过,现在已经有很多针对其缺点而改良、优化出来的变种算法。 TinyLFU TinyLFU就是其中一个优化算法,它是专门为了解决LFU上述提到的两个问题而被设计出来的。 解决第一个问题是采用了Count–Min Sketch算法。 解决第二个问题是让记录尽量保持相对的“新鲜”(Freshness Mechanism),并且当有新的记录插入时,可以让它跟老的记录进行“PK”,输者就会被淘汰,这样一些老的、不再需要的记录就会被剔除。 下图是TinyLFU设计图(来自官方) 统计频率Count–Min Sketch算法 如何对一个key进行统计,但又可以节省空间呢?(不是简单的使用HashMap,这太消耗内存了),注意哦,不需要精确的统计,只需要一个近似值就可以了,怎么样,这样场景是不是很熟悉,如果你是老司机,或许已经联想到布隆过滤器(Bloom Filter)的应用了。 没错,将要介绍的Count–Min Sketch的原理跟Bloom Filter一样,只不过Bloom Filter只有0和1的值,那么你可以把Count–Min Sketch看作是“数值”版的Bloom Filter。 更多关于Count–Min Sketch的介绍请自行搜索。 在TinyLFU中,近似频率的统计如下图所示: 对一个key进行多次hash函数后,index到多个数组位置后进行累加,查询时取多个值中的最小值即可。 Caffeine对这个算法的实现在FrequencySketch类。但Caffeine对此有进一步的优化,例如Count–Min Sketch使用了二维数组,Caffeine只是用了一个一维的数组;再者,如果是数值类型的话,这个数需要用int或long来存储,但是Caffeine认为缓存的访问频率不需要用到那么大,只需要15就足够,一般认为达到15次的频率算是很高的了,而且Caffeine还有另外一个机制来使得这个频率进行衰退减半(下面就会讲到)。如果最大是15的话,那么只需要4个bit就可以满足了,一个long有64bit,可以存储16个这样的统计数,Caffeine就是这样的设计,使得存储效率提高了16倍。 Caffeine对缓存的读写(afterRead和afterWrite方法)都会调用onAccesss方法,而onAccess方法里有一句: frequencySketch().increment(key); 这句就是追加记录的频率,下面我们看看具体实现 //FrequencySketch的一些属性//种子数static final long[] SEED = { // A mixture of seeds from FNV-1a, CityHash, and Murmur3    0xc3a5c85c97cb3127L, 0xb492b66fbe98f273L, 0x9ae16a3b2f90404fL, 0xcbf29ce484222325L};static final long RESET_MASK = 0x7777777777777777L;static final long ONE_MASK = 0x1111111111111111L;int sampleSize;//为了快速根据hash值得到table的index值的掩码//table的长度size一般为2的n次方,而tableMask为size-1,这样就可以通过&操作来模拟取余操作,速度快很多,老司机都知道int tableMask;//存储数据的一维long数组long[] table;int size;/** * Increments the popularity of the element if it does not exceed the maximum (15). The popularity * of all elements will be periodically down sampled when the observed events exceeds a threshold. * This process provides a frequency aging to allow expired long term entries to fade away. * * @param e the element to add */public void increment(@NonNull E e) {  if (isNotInitialized()) {    return;  }  //根据key的hashCode通过一个哈希函数得到一个hash值  //本来就是hashCode了,为什么还要再做一次hash?怕原来的hashCode不够均匀分散,再打散一下。  int hash = spread(e.hashCode());  //这句光看有点难理解  //就如我刚才说的,Caffeine把一个long的64bit划分成16个等分,每一等分4个bit。  //这个start就是用来定位到是哪一个等分的,用hash值低两位作为随机数,再左移2位,得到一个小于16的值  int start = (hash & 3) << 2;  //indexOf方法的意思就是,根据hash值和不同种子得到table的下标index  //这里通过四个不同的种子,得到四个不同的下标index  int index0 = indexOf(hash, 0);  int index1 = indexOf(hash, 1);  int index2 = indexOf(hash, 2);  int index3 = indexOf(hash, 3);  //根据index和start(+1, +2, +3)的值,把table[index]对应的等分追加1  //这个incrementAt方法有点难理解,看我下面的解释  boolean added = incrementAt(index0, start);  added |= incrementAt(index1, start + 1);  added |= incrementAt(index2, start + 2);  added |= incrementAt(index3, start + 3);  //这个reset等下说  if (added && (++size == sampleSize)) {    reset();  }}/** * Increments the specified counter by 1 if it is not already at the maximum value (15). * * @param i the table index (16 counters) * @param j the counter to increment * @return if incremented */boolean incrementAt(int i, int j) {  //这个j表示16个等分的下标,那么offset就是相当于在64位中的下标(这个自己想想)  int offset = j << 2;  //上面提到Caffeine把频率统计最大定为15,即0xfL  //mask就是在64位中的掩码,即1111后面跟很多个0  long mask = (0xfL << offset);  //如果&的结果不等于15,那么就追加1。等于15就不会再加了  if ((table[i] & mask) != mask) {    table[i] += (1L << offset);    return true;  }  return false;}/** * Returns the table index for the counter at the specified depth. * * @param item the element's hash * @param i the counter depth * @return the table index */int indexOf(int item, int i) {  long hash = SEED[i] * item;  hash += hash >>> 32;  return ((int) hash) & tableMask;}/** * Applies a supplemental hash function to a given hashCode, which defends against poor quality * hash functions. */int spread(int x) {  x = ((x >>> 16) ^ x) * 0x45d9f3b;  x = ((x >>> 16) ^ x) * 0x45d9f3b;  return (x >>> 16) ^ x;} 知道了追加方法,那么读取方法frequency就很容易理解了。 /** * Returns the estimated number of occurrences of an element, up to the maximum (15). * * @param e the element to count occurrences of * @return the estimated number of occurrences of the element; possibly zero but never negative */@NonNegativepublic int frequency(@NonNull E e) {  if (isNotInitialized()) {    return 0;  }  //得到hash值,跟上面一样  int hash = spread(e.hashCode());  //得到等分的下标,跟上面一样  int start = (hash & 3) << 2;  int frequency = Integer.MAX_VALUE;  //循环四次,分别获取在table数组中不同的下标位置  for (int i = 0; i < 4; i++) {    int index = indexOf(hash, i);    //这个操作就不多说了,其实跟上面incrementAt是一样的,定位到table[index] + 等分的位置,再根据mask取出计数值    int count = (int) ((table[index] >>> ((start + i) << 2)) & 0xfL);    //取四个中的较小值    frequency = Math.min(frequency, count);  }  return frequency;} 通过代码和注释或者读者可能难以理解,下图是我画出来帮助大家理解的结构图。 注意紫色虚线框,其中蓝色小格就是需要计算的位置: 保新机制 为了让缓存保持“新鲜”,剔除掉过往频率很高但之后不经常的缓存,Caffeine有一个Freshness Mechanism。做法很简答,就是当整体的统计计数(当前所有记录的频率统计之和,这个数值内部维护)达到某一个值时,那么所有记录的频率统计除以2。 从上面的代码 //size变量就是所有记录的频率统计之,即每个记录加1,这个size都会加1//sampleSize一个阈值,从FrequencySketch初始化可以看到它的值为maximumSize的10倍if (added && (++size == sampleSize)) {      reset();} 看到reset方法就是做这个事情 /** Reduces every counter by half of its original value. */void reset() {  int count = 0;  for (int i = 0; i < table.length; i++) {    count += Long.bitCount(table[i] & ONE_MASK);    table[i] = (table[i] >>> 1) & RESET_MASK;  }  size = (size >>> 1) - (count >>> 2);} 关于这个reset方法,为什么是除以2,而不是其他,及其正确性,在最下面的参考资料的TinyLFU论文中3.3章节给出了数学证明,大家有兴趣可以看看。 增加一个Window? Caffeine通过测试发现TinyLFU在面对突发性的稀疏流量(sparse bursts)时表现很差,因为新的记录(new items)还没来得及建立足够的频率就被剔除出去了,这就使得命中率下降。 于是Caffeine设计出一种新的policy,即Window Tiny LFU(W-TinyLFU),并通过实验和实践发现W-TinyLFU比TinyLFU表现的更好。 W-TinyLFU的设计如下所示(两图等价): 它主要包括两个缓存模块,主缓存是SLRU(Segmented LRU,即分段LRU),SLRU包括一个名为protected和一个名为probation的缓存区。通过增加一个缓存区(即Window Cache),当有新的记录插入时,会先在window区呆一下,就可以避免上述说的sparse bursts问题。 淘汰策略(eviction policy) 当window区满了,就会根据LRU把candidate(即淘汰出来的元素)放到probation区,如果probation区也满了,就把candidate和probation将要淘汰的元素victim,两个进行“PK”,胜者留在probation,输者就要被淘汰了。 而且经过实验发现当window区配置为总容量的1%,剩余的99%当中的80%分给protected区,20%分给probation区时,这时整体性能和命中率表现得最好,所以Caffeine默认的比例设置就是这个。 不过这个比例Caffeine会在运行时根据统计数据(statistics)去动态调整,如果你的应用程序的缓存随着时间变化比较快的话,那么增加window区的比例可以提高命中率,相反缓存都是比较固定不变的话,增加Main Cache区(protected区 +probation区)的比例会有较好的效果。 下面我们看看上面说到的淘汰策略是怎么实现的: 一般缓存对读写操作后都有后续的一系列“维护”操作,Caffeine也不例外,这些操作都在maintenance方法,我们将要说到的淘汰策略也在里面。 这方法比较重要,下面也会提到,所以这里只先说跟“淘汰策略”有关的evictEntries和climb。 /**   * Performs the pending maintenance work and sets the state flags during processing to avoid   * excess scheduling attempts. The read buffer, write buffer, and reference queues are   * drained, followed by expiration, and size-based eviction.   *   * @param task an additional pending task to run, or {@code null} if not present   */  @GuardedBy("evictionLock")  void maintenance(@Nullable Runnable task) {    lazySetDrainStatus(PROCESSING_TO_IDLE);    try {      drainReadBuffer();      drainWriteBuffer();      if (task != null) {        task.run();      }      drainKeyReferences();      drainValueReferences();      expireEntries();      //把符合条件的记录淘汰掉      evictEntries();      //动态调整window区和protected区的大小      climb();    } finally {      if ((drainStatus() != PROCESSING_TO_IDLE) || !casDrainStatus(PROCESSING_TO_IDLE, IDLE)) {        lazySetDrainStatus(REQUIRED);      }    }  } ``` 先说一下Caffeine对上面说到的W-TinyLFU策略的实现用到的数据结构: ``` //最大的个数限制long maximum;//当前的个数long weightedSize;//window区的最大限制long windowMaximum;//window区当前的个数long windowWeightedSize;//protected区的最大限制long mainProtectedMaximum;//protected区当前的个数long mainProtectedWeightedSize;//下一次需要调整的大小(还需要进一步计算)double stepSize;//window区需要调整的大小long adjustment;//命中计数int hitsInSample;//不命中的计数int missesInSample;//上一次的缓存命中率double previousSampleHitRate;final FrequencySketch  sketch; //window区的LRU queue(FIFO) final AccessOrderDeque > accessOrderWindowDeque; //probation区的LRU queue(FIFO) final AccessOrderDeque > accessOrderProbationDeque; //protected区的LRU queue(FIFO) final AccessOrderDeque > accessOrderProtectedDeque; 以及默认比例设置(意思看注释) /** The initial percent of the maximum weighted capacity dedicated to the main space. */static final double PERCENT_MAIN = 0.99d;/** The percent of the maximum weighted capacity dedicated to the main's protected space. */static final double PERCENT_MAIN_PROTECTED = 0.80d;/** The difference in hit rates that restarts the climber. */static final double HILL_CLIMBER_RESTART_THRESHOLD = 0.05d;/** The percent of the total size to adapt the window by. */static final double HILL_CLIMBER_STEP_PERCENT = 0.0625d;/** The rate to decrease the step size to adapt by. */static final double HILL_CLIMBER_STEP_DECAY_RATE = 0.98d;/** The maximum number of entries that can be transfered between queues. */ 重点来了,evictEntries和climb方法: /** Evicts entries if the cache exceeds the maximum. */@GuardedBy("evictionLock")void evictEntries() {  if (!evicts()) {    return;  }  //淘汰window区的记录  int candidates = evictFromWindow();  //淘汰Main区的记录  evictFromMain(candidates);}/** * Evicts entries from the window space into the main space while the window size exceeds a * maximum. * * @return the number of candidate entries evicted from the window space *///根据W-TinyLFU,新的数据都会无条件的加到admission window//但是window是有大小限制,所以要“定期”做一下“维护”@GuardedBy("evictionLock")int evictFromWindow() {  int candidates = 0;  //查看window queue的头部节点  Node  node = accessOrderWindowDeque().peek();    //如果window区超过了最大的限制,那么就要把“多出来”的记录做处理   …

摩登3咨询:_灰色的暴利市场,物联网成为黑客的捞金温床

本文来源:物联传媒 本文作者:露西 日前,消息爆出电子产品制造巨头富士康在墨西哥的一家工厂遭到了勒索软件攻击。肇事黑客组织DopperPaymer窃取了富士康部分未加密的文件,继而对文件进行加密,并要求富士康支付1804枚比特币(按时下的比特币价格核算,约为3468万美元)以获取解密工具。 富士康收到的勒索信 据悉,此次遭受攻击的是富士康位于墨西哥华雷斯城的CTBG MX生产设施,黑客组织声称已加密了富士康在北美的约1200台服务器,窃取了100 GB的未加密文件,并删除了20TB至30 TB的备份内容。不过在截止发稿前,富士康称已经恢复正常生产,并升级了信息安全系统。 另外,上月底工业物联网厂商研华科技也遭遇了来自Conti勒索软件团伙的攻击。 在事件中,黑客组织提出了750个比特币的赎金要求(约合1300万美元),否则将会把所盗数据逐步泄露在网络上。针对此事,研华科技最终并未多做回复,仅称黑客攻击少数服务器时,可能偷走了价值性不高与机密性不高的工作资料。 更早之前,2018年8月,全球最大的晶圆代工厂台积电突然传出电脑系统遭受病毒感染的消息。短短几个小时内,台积电位于台湾北、中、南三处重要的生产基地——竹科FAB 12厂、南科FAB 14厂、中科FAB 15厂等主要高端产能厂区的机台设备停产停线,陷入混乱状态。 事后台积电称,事故属于Wannacry变种病毒感染而非黑客攻击,没有泄露公司资料的完整性和机密性,但故障将导致晶圆出货延迟及成本增加,对公司第三季度的营收影响约为百分之三,毛利率的影响约为一个百分点。 攻击一千次,有一次成功便是胜利;防御一万次,有一次失败便是失败。 安全攻防的对抗,其结果标准并不是公平的。而现如今黑客或病毒所攻击的对象,已经从个人PC、防护能力较弱的传统企业、政府、学校网站,转变到万物互联时代的工厂、工业设备、智能摄像头、路由器等诸多方面。 1、面更大,范围更广,安全保障更加迫在眉睫 也就在昨日,Forescout的安全研究人员披露了四个开源TCP/IP库中的33个安全漏洞(代号AMNESIA:33),影响150多家供应商的超过100万个智能设备和工业互联网产品。 根据Forescout的说法,这些漏洞将使攻击者可以实施广泛的攻击,包括攻击者能够破坏设备,执行恶意代码,窃取敏感信息以及执行拒绝服务攻击。几乎所有的联网设备都有可能中招,包括智能手机、打印机、路由器、交换机、IP摄像机和各种工业设备等。 可以认为,物联网生态系统很少顾及的安全缺陷,正完整地暴露在黑客和不法分子的面前。 另一方面,勒索软件的组织却在日益庞大。 由于匿名性和暴利性,近年来勒索软件攻击在全球范围内整体呈上升趋势,世界各地企业、公共机构、高校单位持续在遭遇各种网络攻击。 根据COVEWARE公司的报告,2020年第一季度,企业平均赎金支付增加至111,605美元,比2019年第四季度增长了33%。勒索软件分销商越来越多地将目标瞄准大型企业,甚至发展出所谓的勒索软件即服务(Ransomware as a Service,RaaS),以完善的生态,以更轻松的”勒索+窃取”两种方式对企业重要数据进行攻击。 甚至,黑客们还找到了最大最广泛的交易方式——,一定程度刺激了该市场的肆意增长。 在勒索软件中常流行的比特币支付: 一是具有一定的匿名性,便于黑客隐藏信息; 二是具有去中心化的特性,可以全球范围进行操作; 三是具有流动快捷性,比特币基于网络而生,流动迅速,鼠标操作甚至可以实时即达; 四是具有易变现的能力,也许只需要一个U盘,比特币就可以成为犯罪分子的洗钱工具。 对此,复旦大学中国反洗钱研究中心秘书长严立新曾表示,对区块链技术支撑的比特币本身,不宜用简单的好与坏去定义,但它的一些特点的确很容易被洗钱罪犯所利用。 此次为富士康网络攻击负责的DopperPaymer,就是2020年来最活跃的勒索软件之一。 2019年6月以来,DoppelPaymer涉及了一系列恶意勒索活动,今年9月甚至惹出了间接导致德国杜塞尔多夫一家医院病人死亡的事件。 据悉,由于杜塞尔多夫医院遭受勒索软件攻击,30多台内部服务器被感染,并未能收治一位需要接受紧急治疗的女性患者,该患者不得已被转移到30公里外的伍珀塔尔市一家医院后死亡。虽然之后的调查报告说明,杜塞尔多夫医院遭遇的勒索软件攻击似乎是个意外,因为赎金勒索信中针对的是当地的大学(杜塞尔多夫海涅大学),但不幸的是杜塞尔多夫医院的信息系统属于该大学的一部分,并且在广泛使用的商业软件中存在漏洞,这才给勒索软件可乘之机。 而这样的案件还只是冰山一角,将大多数案例集合在一起,勒索软件的趋势走向将是:攻击目标多元化、攻击手段复杂化、解密数据难度大、危害影响难以估量…… 万物互联时代,对于众多即将走向智能化的传统产业,倘若网络攻防经验不足,缺乏整体的安全建设意识,实际面临的威胁将更加巨大。 在一批黑客凭借勒索软件获得暴利的同时,各种病毒变种在悄悄成长蔓延,潘多拉魔盒此刻已经打开。 如果说以往用户对于安全的认知局限在虚拟资产这一部分,认为要保护的是数据的安全、数据的完整性及可用性。那么在物联网时代,安全的边界已经扩展到以各种设备为代表的物理资产,包括数据安全在内,安全需要保护的内容,将涉及到整个资产的安全。 很典型的情况是,现如今黑客进攻智能设备,就算拿不到用户数据,也可以避开数据轻松远程控制并影响设备,依然将产生负面影响。 复盘,其起因和过程其实是台积电犯了3个简单的错误: 1)进入产线的新设备带有病毒,且未被查杀; 2)负责关键生产设施的电脑搭载的是老旧的Windows 7系统,且没有打补丁; 3)没有关闭设备445端口,使病毒轻易入侵。 以及发生在2016年的,实际上是利用了数十万台受到僵尸网络感染的联网设备,比如路由器、摄像头,通过持续的扫描漏洞,操纵肉鸡的方式,向目标发送合理的服务请求,就此占用过多的服务资源,使服务器拥塞而无法对外提供正常服务。 包括遭受勒索软件攻击之后,德国网络安全机构BSI向外界发出的警告是——要求德国公司和机构针对CVE-2019-19871漏洞(勒索软件的已知入口点)更新其Citrix网络网关。 综合这几项事件来说,设备或系统存在漏洞是最大的风险。一些使用弱口令及默认密码、内置密码;存在逻辑漏洞、公共组件历史漏洞的联网设备风险最大。 为此的基本解决方案其实并不复杂: 1 1、关闭暴露在公网中的设备端口。 2、及时更改设备出厂默认密码,对于一些无法更改的老旧设备暂停使用。 3、厂商持续监控设备出入流量及设备行为,尽早发现异常。 4、厂商定期排查现有设备中的风险与漏洞并做出修复。 当然,一劳永逸的办法是不存在的。实际上自互联网诞生起,这场网络安全攻防战,就一直在持续进行。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3娱乐登录地址_AWS发布五大用于工业领域的机器学习服务

· Amazon Monitron提供包含传感器、网关和机器学习服务的端到端机器监控解决方案,以检测可能需要维护的异常设备状况 · Amazon Lookout for Equipment为拥有设备传感器的客户提供了使用AWS机器学习模型来检测异常设备行为并进行预测性维护的能力 · AWS Panorama Appliance帮助已在工业设施中装配摄像机的客户使用计算机视觉来改善质量控制和工作场所安全 · AWS Panorama软件开发套件(SDK)允许工业相机制造商在新相机中嵌入计算机视觉功能 · Amazon Lookout for Vision在图像和视频流上使用AWS训练的计算机视觉模型,以发现产品或流程中的异常和缺陷 · 使用全新的AWS工业机器学习服务的客户和合作伙伴包括Axis、凌华科技、BP、德勤、Fender芬达、GE 医疗和西门子交通 北京-2020年12月9日,今天,在亚马逊云服务(AWS)举办的年度盛会——AWS re:Invent上,AWS宣布了Amazon Monitron、Amazon Lookout for Equipment、AWS Panorama Appliance、AWS Panorama SDK和Amazon Lookout for Vision。这五项全新的机器学习服务共同帮助工业和制造业客户在其生产过程中嵌入智能能力,以提高运营效率,改善质量控制、信息安全和工作场所安全。这些服务代表了现有最全面的从云端到边缘的工业机器学习服务套件,通过结合先进的机器学习、传感器分析和计算机视觉功能,解决工业客户面临的常见技术挑战。实际上,数十万客户正在使用AWS云服务进行机器学习工作,各个规模、各行各业的客户都在使用AWS服务将机器学习作为其业务战略的核心。要了解有关全新AWS用于工业领域的机器学习服务的更多信息,请访问https://aws.amazon.com/industrial/。 企业越来越多地希望将机器学习功能添加到工业环境中,例如制造设施、配送中心、食品加工厂等。对于这些客户来说,数据已成为将复杂工业系统结合在一起的重要媒介。工业系统中通常具有许多相互依存的流程,这些流程容错能力低,甚至很小的问题也会带来重大后果。许多客户通过分析其设施中运行设备的数据来应对这一挑战,例如,许多客户利用AWS IoT SiteWise等服务从工业设备收集数据并生成实时性能指标。随着客户开始使用云收集和分析工业数据,他们还希望采用机器学习技术来解读数据,进一步提高运营效率。在某些情况下,客户希望使用机器学习来帮助他们实现预测性维护,从而降低成本并提高运营效率。同时,在非联网或对延迟敏感的环境中运行的客户则希望通过在边缘使用计算机视觉来发现产品缺陷并提高工作场所安全性。伴随这些不断变化的需求和机遇,工业企业要求AWS帮助他们利用云、工业边缘和机器学习,以从其设备生成的大量数据中获得更多价值。 Amazon Monitron和Amazon Lookout for Equipment通过机器学习支持预测性维护 今天,工业和制造企业面临的主要挑战是设备的持续维护。过去大多数设备维护都是被动的(在机器发生故障之后)或预防性的(定期进行以确保机器不会发生故障)。被动维护可能会损失大量成本并带来长时间停机,而预防性维护若维护过度则成本过高,若维护不够频繁则无法防止故障。实际上,预测性维护(能够预测设备何时可能需要维护的能力)是一种更有前景的解决方案。但是,为了实现预测性维护,企业在过去需要雇佣熟练的技术人员和数据科学家从头构建复杂的解决方案,同时需要针对用例识别和购买正确类型的传感器,并将它们与IoT网关(一种聚合和传输数据的设备)连接在一起。然后,公司必须测试监测系统,并将数据传输到本地或云上进行处理。只有这样,数据科学家才能构建机器学习模型来分析数据模式和异常情况,或者在检测到异常时创建警报系统。一些企业已经为在设备和必要的基础设施上安装传感器用于数据连接、存储、分析和警报方面进行了大量投资,然而,即使这些企业也通常仅停留在使用初级数据分析和建模方法的阶段,与高级机器学习模型相比,这些方法昂贵且通常无法有效地检测异常情况。大部分企业依然缺乏专业知识和人员来构建和完善机器学习模型,无法进行高度准确的预测性维护。这些都导致了很少有企业能够成功实施预测性维护,即使少数做到这一点的企业也希望让这些投资进一步发挥作用,同时减轻维护解决方案的负担。在这些问题上,全新的AWS机器学习服务可以提供众多帮助: · 对于未建立传感器网络的客户,Amazon Monitron提供由传感器、网关和机器学习服务组成的端到端机器监控系统,以检测异常并预测何时需要维护工业设备。 Amazon Monitron帮助客户免去了从头开始构建先进的、由机器学习驱动的预测性维护系统的高成本需求和复杂性,使他们能够专注于其核心制造、供应链和运营功能。Amazon Monitron根据振动或温度的异常波动来检测机器是否正常运行,并在可能出现故障时通知客户检查机器以确定是否需要预测性维护。这一端到端的系统提供了用于捕获振动和温度数据的IoT传感器、用于将数据聚合和传输到AWS的网关、以及用于检测异常设备模式并在数分钟内提供结果的机器学习云服务,而无需客户具备任何机器学习或云经验。借助Amazon Monitron,机器维护人员无需任何开发工作或专业培训就可以在数小时内开始跟踪机器的运行状况。Amazon Monitron可在轴承、电机、泵、传送带各种工业和制造领域的旋转设备上使用,其典型应用场景包括数据中心冷却风扇或水泵等关键机器的监测,或者大量安装在具有生产和运输系统的制造工厂中。Amazon Monitron还提供一个移动应用程序,供客户的现场维护技术人员实时监控设备行为。技术人员可以通过这个移动应用程序收到不同机器上任何异常设备状况的警报,检查机器的运行状况,并决定是否需要安排维护。为了提高系统的准确性,技术人员还可以在移动应用程序中输入有关警报准确性的反馈,帮助进一步改善Amazon Monitron。Amazon Monitron已经正式推出。要了解有关Amazon Monitron的更多信息,请访问https://aws.amazon.com/monitron。 · 对于已经拥有传感器但不希望自己构建机器学习模型的客户,Amazon Lookout for Equipment让客户可以将传感器数据发送到AWS,由AWS为其构建模型并返回预测结果,从而检测异常设备行为。首先,客户将其传感器数据上传到Amazon Simple Storage Service (S3),并将S3位置提供给Amazon Lookout for Equipment。 Amazon Lookout for Equipment也可以从AWS IoT SiteWise提取数据,并与OSIsoft等其他流行的机器操作系统无缝协作。 Amazon Lookout for Equipment分析数据,评估正常或健康的模式,再利用从所有训练数据中得到的洞察来构建为客户环境定制的模型。然后,Amazon Lookout for Equipment可以使用机器学习模型来分析传入的传感器数据并识别机器故障的预警信号。这也就使得客户可以进行预测性维护,从而通过防止工业系统生产线崩溃来节省成本并提高生产率。 Amazon Lookout for Equipment帮助客户从其现有传感器中获得更多价值,使得客户能够及时做出从根本上改善整个工业流程的决策。要了解有关Amazon Lookout for Equipment的更多信息,请访问https://aws.amazon.com/lookout-for-equipment。 AWS Panorama通过计算机视觉改善工业运营和工作场所安全 许多工业和制造业客户希望在其设施和设备的实时视频中使用计算机视觉技术自动执行监测或视觉检查任务,并实时做出决策。例如,客户通常需要检查一些高速运转的流程(例如精细铣削或激光工具)以确定是否需要进行调整,或者监视工地上和工厂的活动以确保操作合规(例如,确保行人和叉车留在指定的工作区域内),或评估其设施内的工人安全(例如,保持适当的人员距离或使用PPE)。但是,当下普遍使用的监测手段是手动的,容易出错的,并且难以扩展。客户可以在云中构建计算机视觉模型来监视和分析他们的实时视频,但是工业设施和流程通常位于偏远和孤立的位置,网路连接很慢、昂贵或完全不存在。尤其对于那些涉及零件或安全监控视频审查等人工审核的工业流程,在云中构建计算机视觉模型更为困难。例如,如果某个高吞吐量的生产线上出现质量问题,客户希望立即得到预警,因为问题存在时间越长,解决问题的成本越高。这种类型的监控视频可以通过计算机视觉技术实现在云中自动处理,但是这些视频一般带宽高并且上载速度慢。因此,客户只能实时进行视频监控,但这一方式操作难度高、易出错并且成本高。有些客户希望使用具有足够处理能力的智能相机来运行实时监控模型,却很难达到高准确性、低延迟的性能。大多数客户最终会运行一些简单的模型,却无法编程为可以集成到工业机器中的自定义代码。针对这些问题,AWS现在可以提供以下帮助: · AWS Panorama Appliance提供了一种新的硬件设备,使组织可以将计算机视觉添加到客户可能已经部署在本地的摄像机中。客户首先将AWS Panorama Appliance连接到他们的网络,然后这一设备会自动识别摄像头数据流并开始与现有的工业摄像头进行交互。AWS Panorama Appliance可集成于那些用于构建自定义机器学习模型或获取视频以进行更精细分析的AWS机器学习服务和IoT服务中。AWS Panorama Appliance将AWS机器学习能力扩展到边缘,以帮助客户在没有网络连接的情况下在本地进行预测。每个AWS Panorama Appliance都可在多个摄像头数据流上并行运行计算机视觉模型,从而使诸如质量控制、零件识别和工作场所安全的用例成为可能。AWS Panorama Appliance还可与适用于零售、制造、建筑和其他行业的AWS和第三方经过预先培训的计算机视觉模型一起使用。此外,客户使用Amazon SageMaker自主开发的计算机视觉模型也可以部署在AWS Panorama Appliance上。 · AWS Panorama软件开发套件(SDK)帮助硬件供应商开发可在边缘有效运行计算机视觉模型的新型摄像头。使用AWS Panorama SDK构建的摄像头可在多种用例中运行计算机视觉模型,例如检测快速移动的传送带上的损坏部件或定位那些脱离指定工作区域的器械等。这些相机可以使用英伟达和安霸旗下用于计算机视觉的芯片。通过使用AWS Panorama SDK,制造商可以开发自带计算机视觉模型的相机,从而可以处理更高分辨率的高质量视频以发现问题。他们还可以在低成本设备上构建更复杂的模型,这些设备可以通过以太网供电并可以放置在站点周围。客户可在Amazon SageMaker中训练模型,并一键将其部署到使用AWS Panorama SDK构建的摄像机上。客户还可以将Lambda功能添加到使用AWS Panorama…

摩登三1960_通过宽带实时运作

Shanghai, China, 3 December 2020 * * * 嵌入式和边缘计算技术的领先供应商德国康佳特宣布推出面向触觉互联网应用的新实用化平台,可通过公共网络或私有IP网络进行操作。这些平台支持时间敏感网络(TSN),以及新的英特尔时间协调计算(Intel® TCC)——它基于最新英特尔IP技术,是TSN以太网标准的补充。其目标是减少实时同步过程中的延迟和抖动。该演示平台已实现了开放式网络标准下的触觉互联网应用,并最终为基于IP的实时通讯和实时控制架构铺平道路。除上述特点外,这些平台还适用于加工行业、关键基础设施和工业4.0环境的数字化,并有可能为专用工业以太网和现场总线的配置带来重大变革。其主要优点在于,开放式标准的IP协议可应用于自动化架构中的每一层,从而实现实时通讯——从最高层的操作员面板到与工业物联网互联的单独I/O,从传感器到动作器。 该立即可用的平台基于COM Express Type 6模块,搭载第11代英特尔®酷睿™处理器(Tiger Lake)或英特尔®凌动™x6000E系列处理器(Elkhart Lake),通过多个千兆以太网或2.5GbE端口来提供具有TSN技术的以太网连接。康佳特已经支持TSN功能,并提供多个开发平台,在虚拟机(VM)中实现了TSN同步网络与实时操控的结合。此外,新增加的TCC支持和额外的时间戳计数器(TSC)功能可以在I/O层面实时管理各种操作的同步执行。 康佳特产品管理总监Martin Danzer表示:“TSN和TCC是两项互补的技术,用于基于IP的实时通讯。TSN通过设置网络时间来协调不同的动作器——就像交响乐团的指挥,而TCC可确保各个动作器按照命令精确地执行操作。在添加了Real-Time Systems (RTS)公司的实时虚拟机监控技术后,我们就能确保这些流程不会受到GUI、AI或防火墙等其它功能或其它并行进程的干扰。其好处在于,OEM可以将他们的应用整合到一个系统中,打造工业实时边缘服务器或雾服务器。” 这个面向触觉互联网应用的立即可用平台基于康佳特的TSN演示系统,该系统符合IEEE 1588精确时间协议标准,可保障DDS、OPC-UA等更高层通讯协议的实时性。康佳特已在基于最新第11代英特尔®酷睿™处理器(Tiger Lake)和英特尔®凌动™x6000E系列处理器(Elkhart Lake)的模块上增加了TCC协议支持。为展示向分布式I/O实时发送远程控制指令的能力,基于英特尔以太网控制器I225的演示平台甚至能结合康佳特工作负载整合集的实时控制逻辑,从而通过以太网来控制动作器,而这此前是由本地设备实时控制的。

摩登三1960_基于VCSEL红外光源的DMS解决方案

摘要:司机在驾驶过程中使用手机、吸烟、疲劳驾驶等不良驾驶行为严重影响交通安全,所以对驾驶员危险行为检测的DMS系统就尤为重要。本文将为大家介绍基于VCSEL红外光源的DMS解决方案。 一、DMS市场概况 DMS(Driver Monitor Status )防疲劳预警系统:利用DMS摄像头获取图像,通过视觉跟踪、目标检测、动作识别等技术对驾驶员的驾驶行为及生理状态进行检测,当驾驶员发生疲劳分心、打电话、抽烟、未系安全带等危险情况时,在系统设定时间内报警以避免事故发生。 在欧洲,已经开始要求2022年在汽车出厂时必须配备DMS系统。 根据JT/T883-2018相关国标要求,DMS系统需要检测到疲劳驾驶、长时间不目视前方、抽烟、接打电话、驾驶员不在驾驶位置、双手脱离方向盘、驾驶员未系安全带等行为。 二、DMS应用方案介绍 本文介绍的DMS系统图像采集部分集VCSEL红外泛光灯TARA2000、CMOS数字图像传感器、串行器于一体,图像处理部分使用M1808核心板。 采用比LED更先进的VCSEL红外光源TARA2000,功率高,照射面均匀,可将940nm波长的红外光均匀的照射到驾驶员面部;通过高像素CMOS数字图像传感器,可以采集1080p高清图像;图像数据转为串行数据,通过同轴电缆传输,有更强的抗干扰能力。 图1 图像采集模块 1. TARA2000 · 940nm红外波; · 采用VCSEL(垂直腔面发射激光器)为发光源,红外光束在内部; · 通过反射和衍射使照射更均匀,拥有更高的转换效率; · 体积小,灯珠体积为4.1mm*4.1mm*1.38mm; · 功率大,单颗灯珠最高能提供2.3W的光输出功率; · 符合AEC-102标准。 图2 VCSEL红外光源 2. CMOS数字图像传感器 · 具有出色的微光性能; · 高达1080p 60 fps的全高清支持,可提供出色的视频性能; · 支持线性或高动态范围捕获; · 片上带有锁相环振荡器。 3. M1808核心板 · MPU采用高性能64位的Cortex™-A35处理器,工作频率可达1.6GHz; · 集成NPU(神经网络处理单元)协处理器,峰值算力高达3.0TOPs; · 支持INT8/INT16/FP16混合运算; · 视频处理单元支持1080P视频编解码,支持摄像头视频信号输入; · 可实现人脸检测及属性分析、人脸识别、姿态分析、目标检测及识别、图像处理等一系列功能。 图3 M1808核心板 针对DMS系统的设计繁琐、开发周期长等痛点,ZLG推出完整的DMS系统解决方案,可实现对长闭眼、打电话、抽烟、打哈欠等行为的检测,可提供完整的软硬件支持、完全开放的底层驱动,并可提供对应的评估套件,降低客户开发难度,方便客户快速开发。

摩登3咨询:_12年双11:从春雷到秋实,为复苏喝彩

双11,走过12年。2020年天猫双11总成交额达4982亿元。 就在双11之前,前三季度经济数据公布:经济增速由负转正,社会消费品零售总额季度增速年内首次由负转正,货物进出口总额增速首次由负转正。中国经济稳步走出疫情影响。 作为疫情后全球最大的消费季,天猫双11是衡量当下经济运行状况的一支灵敏温度计。今年是参与商家最多、规模最大的一次“双11”:有500万商家、25万个品牌、近8亿消费者,有2000个产业带、30万外贸工厂,还有220多个国家和地区、超3万海外品牌,双11的“价值半径”在不断扩大。 双11是一个引信,真正爆发性力量,潜藏在涌动的中国经济中。 春雷计划,为复苏喝彩 武汉。2020天猫双11狂欢季线下启动。 线上销售首日,良品铺子、周黑鸭、蔡林记、猫人等武汉城市名片不负众望,跻身相关类目前十名,“武汉活过来了,还爆发了”。 消费潜力迅速释放,有网友巧妙地用几个“力”给出了解释:疫情控制得力,政策扶持给力,平台提供助力,企业各自努力,市场形成合力。 所谓平台助力,指向从4月开始的“春雷计划”。4月,当疫情给全国摁下“暂停键”,阿里巴巴重启“春雷计划”,通过稳外贸、转内销、产业带数字化转型等措施,和身陷困境的中小企业一起寻找突围方向。 11月1日至11月11日,2020天猫双11诞生了105个成交额破亿的产业带。春雷半年,工厂车水马龙,参加天猫双11的全国2000个产业带、120万商家、30万个外贸工厂,缓过来了。 回看9个月前,据全国中小企业协会对6422家中小企业的调研显示:近40%处于完全停顿状态,超半数断货,海外订单同比下降70%。产业带与企业挺过来了,又反哺了双11,成为双11供应链中的重要一环,成为了新品牌中的重要一员。 从这个意义上,一场元气淋漓的双11,仿佛从春天就开始了。它是一个集雨器,接住了政策、社会、内需所有落下的甘霖。 “双循环”拓展双11价值半径  上海。第三届进博会现场。一只进口的直径4米的米其林“超级轮胎”十分醒目。工矿企业快速复苏,带来超级轮胎的旺盛需求;同一时间,上汽集团和阿里巴巴集团达成新零售战略合作,联合宣布加快推动汽车零售数字化转型。以天猫双11为代表的互联网消费,正从买衣物数码向汽车等耐用消费品迈进。 如果说进博会为海外品牌搭建大舞台,成为中国联通世界的重要外向通道;阿里巴巴搭建的双11平台,则为进博会“展品变商品”提供了一条快车道。 “逐步形成以国内大循环为主体、国内国际双循环相互促进的新发展格局”,两只轮胎,一外一内,相互呼应,相得益彰,成为双循环畅通的佐证。 在经济学家看来,国内大循环之所以得以运转,其关键点是中国超大规模市场优势和内需潜力。而一次以960万平方公里为舞台的商业活动,无疑是这种优势的最佳体现。 今年天猫双11提前开售并延长了售卖期。这一变化,对于供需双方都有意义。社会物流等基础设施压力小了、商家补仓的时间窗口有了、留给中小卖家的黄金通道宽了……所有元素,指向拉动内需的总爆发。 内需强劲,人心稳定。就在十几天前,刚刚落幕的十九届五中全会作出“全面促进消费”的定调。对于走过12年的双11而言,“增强消费对经济发展的基础性作用,顺应消费升级趋势,提升传统消费,培育新型消费”“促进线上线下消费融合发展”的意义不言自明。 双11的价值半径,在不断扩大。从智利樱桃,到俄罗斯Prime等级牛肉,都在双11跑出加速度。今年,有2600多个新品牌、120万款进口新品通过天猫国际首次参加双11。全球为走出困境加油鼓劲的情绪,没有时差。 事实上,4982亿,不只是一个数字,也不只是一场国内的复苏之战,更是220多个国家和地区、超3万海外品牌,对中国投下的信心票。 2009年第一个双11有一个花絮:为庆祝5200万成交额,员工用几张A4纸打印出数字,但不小心少了个零,为此,有机智的小二临时拿了一个时钟替代。 11年后的双11,菜鸟近2万台无人取件机投入使用,1秒取走快递,据测算能给全国节省25年,阿里人称这是一段时间“减”史。 时间是个隐喻,12次双11,完整保留了中国数字化发展的时间切片。2008年底的一项统计数字显示,当时国内快递员约50万人,而今天,快递员、外卖员总数已达千万;曾经,企业是因线下太难“败走”上线,但如今许多新品牌是持有“网络出生证”再向线下发展的;10多年前许多人尚不知网购为何物,10多年后社会生活的方方面面都在数字化…… 一个偶然诞生的促销活动,在商业协同和技术催化下,衍生了一连串创新。通过不断进化,天猫双11超越买和卖,成为了中国数字经济的练兵场、数字技术的实验室。 正式上岗的物流机器人“小蛮驴”、支持214种语言的直播实时翻译、一年省电7000万度的液冷数据中心、全面云原生化…… 当然,数字化不是独唱,是合唱。如果平台企业是“1”,同样具备数字化能力的企业是“0”,越多“0”加入,势能越大。 在国务院发展研究中心市场经济研究所所长王微看来,“十四五”我们要建设现代化国家,最重要的内容就是数字经济发展。过去十年间,数字经济已为国内大循环创造了强大市场动力。一些传统商品在互联网上被赋予了新价值、新内涵、新面貌,变成了新产品。 中国(深圳)综合开发研究院本月发布的《中国数字化之路》报告也给出这样的判断,疫情席卷全球,充分展示了数字经济的强大生命力,进一步凸显数字化是面向未来的最大确定性,到2030年,我国数字经济体量将有望突破百万亿元。 商业峰值,技术峰值,创新峰值,双11成了前者代表,也由此不断孕育出了后两者。从“暂停”到复苏再到活跃起来,中国企业通过加速数字化走出了一条生命力顽强的折线。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3注册登录网_Linux库概念,动态库和静态库的制作,如何移植第三方库?

一口君中学阶段最喜欢的一首歌。 窦仙才华横溢、潇洒不羁、与世无争,酷的外焦里嫩! 让我们随着窦仙高昂的声音来学习什么是(酷)库吧! 一、什么是库? 在windows平台和linux平台下都大量存在着库。一般是软件作者为了发布方便、替换方便或二次开发目的,而发布的一组可以单独与应用程序进行compile time或runtime链接的二进制可重定位目标码文件。 本质上来说库是一种可执行代码的二进制形式,这个文件可以在编译时由编译器直接链接到可执行程序中,也可以在运行时由操作系统的runtime enviroment根据需要动态加载到内存中。 一组库,就形成了一个发布包,当然,具体发布多少个库,完全由库提供商自己决定。 由于windows和linux的本质不同,因此二者库的二进制是不兼容的。 现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。 共享库的好处是,不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。 本文仅讨论linux下的库。 二、库的分类 库有两种:静态库和共享库(动态库)。 win32平台下,静态库通常后缀为.lib,动态库为.dll ;linux平台下,静态库通常后缀为.a,动态库为.so 。 从本质上来说,由同一段程序编译出来的静态库和动态库,在功能上是没有区别的。不同之处仅仅在于其名字上,也就是“静态”和“动态”。 二者均以文件的形式存在,其本质上是一种可执行代码的二进制格式,可以被载入内存中执行。无论是动态链接库还是静态链接库,它们无非是向其调用者提供变量、函数和类。 1. 静态库 所谓静态库,就是在静态编译时由编译器到指定目录寻找并且进行链接,一旦链接完成,最终的可执行程序中就包含了该库文件中的所有有用信息,包括代码段、数据段等。 2. 动态库 所谓动态库,就是在应用程序运行时,由操作系统根据应用程序的请求,动态到指定目录下寻找并装载入内存中,同时需要进行地址重定向。 3. 区别 我们以编译链接、载入时刻两点来讨论静态库和动态库的区别。 编译链接 静态链接库在程序编译时会被链接到目标代码中,目标程序运行时将不再需要改动态库,移植方便,体积较大,浪费控件和资源,因为所有相关的对象文件与牵涉到库都被链接合成一个可执行文件,这样导致可执行文件的体积较大。 动态库在程序编译时并不会被链接到目标代码中,而是在程序运行时才被载入,因为可执行文件体积较小。有了动态库,程序的升级会相对比较简单,比如某个动态库升级了,只需要更换这个动态库的文件,而不需要去更换可执行文件。但要注意的是,可执行程序在运行时需要能找到动态库文件。可执行文件时动态库的调用者。 程序代码和库 载入时刻 二者的不同点在于代码被载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。 4. 优缺点 相对于动态库,静态库的优点在于直接被链接进可执行程序中,之后,该可执行程序就不再依赖于运行环境的设置了(当然仍然会依赖于 CPU指令集和操作系统支持的可执行文件格式等硬性限制)。 而动态库的优点在于,用户甚至可以在程序运行时随时替换该动态库,这就构成了动态插件系统的基础。具体使用静态库和动态库,由程序员根据需要自己决定。 三、库文件的制作 1. 库文件命名 静态库的名字一般为libxxxx.a,其中xxxx是该lib的名称;动态库的名字一般为libxxxx.so.x.y.z,含义如下图所示: 2. 制作库文件常用参数 首先需要了解gcc编译库要用到一些参数,很重要。 参数 含义 -shared 指定生成动态链接库。 -static 指定生成静态链接库。 -fPIC 表示编译为位置独立的代码,用于编译共享库。目标文件需要创建成位置无关码,概念上就是在可执行程序装载它们的时候,它们可以放在可执行程序的内存里的任何地方。 -L 表示要连接的库在当前目录中。 -l 指定链接时需要的动态库。编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称。 -Wall 生成所有警告信息。 -ggdb 此选项将尽可能的生成gdb的可以使用的调试信息。 -g 编译器在编译的时候产生调试信息。 -c 只激活预处理、编译和汇编,也就是把程序做成目标文件(.o文件)。 -Wl,options 把参数(options)传递给链接器ld。如果options中间有逗号,就将options分成多个选项,然后传递给链接程序。 3. 库源文件 假定我们要将以下两个文件制作成库文件 add.c int add(int x,int y){     return x+y;}int sub(int x,int y){     return x-y;} add.h int add(int x,int y);int sub(int x,int y); 4. 制作静态库并使用 需要把 add.c 编译成.o文件 gcc -c add.c 使用 ar 命令生成静态库libadd.a ar -rc libadd.a add.o      遵循静态库命名的规则 lib + 名字 + .a 使用静态库 要是用静态库libadd.a,只需要包含add.h,就可以使用函数add()、sub()。 #include  #include "add.h"void main(){    printf("add(5,4) is %d\n",add(5,4));    printf("sub(5,4) is %d\n",sub(5,4));} 静态库的文件可以放在任意的位置,编译时只需要找到该库文件即可。 gcc test.c -o run libadd.a 库和头文件如果在其他目录下 使用以下命令编译: gcc -c -I /home/xxxx/include test.c //假设test.c要使用对应的静态库gcc -o test -L /home/xxxxx/lib test.o libadd.a 或者 gcc -c -I /home/xxxx/include -L /home/xxxxx/lib  libadd.a test.c 1). 通过-I(是大i)指定对应的头文件 2). 通过-L制定库文件的路径,libadd.a就是要用的静态库。3). 在test.c中要包含静态库的头文件。 5. 制作动态库并使用 把add.c编译成动态链接库libadd.so gcc -fPIC -o libadd.o -c add.cgcc -shared -o libadd.so libadd.o 也可以直接使用一条命令 gcc -fPIC -shared -o libadd.so add.c 动态库的安装 通常动态库拷贝到/lib下即可: sudo cp libadd.so /lib 使用动态库 #include  #include "add.h"void main(){    printf("add(5,4) is %d\n",add(5,4));    printf("sub(5,4) is %d\n",sub(5,4));} 编译动态库: gcc static -o run  -ladd 注意观察编译时动态库的名字与库文件对应关系 libadd.so<--------->-ladd 去掉 .so,…

摩登3测速代理_配置早知晓!技嘉 RTX 3060 Ti Eagle OC 显卡曝光

本文中,小编将对技嘉 RTX 3060 Ti Eagle OC 显卡最新消息予以介绍,如果你想对它的详细情况有所认识,或者想要增进对它的了解程度,不妨请看以下内容哦。 技嘉 RTX 3060 Ti Eagle OC 显卡采用双风扇散热,而且采用公版的短 PCB 设计,8pin 供电。现在,外媒 VideoCardz 又曝光了技嘉 RTX 3060 Ti GAMING OC PRO,三风扇散热,似乎是采用定制的加长 PCB 设计,8+6pin 供电。 技嘉 RTX 3060 Ti Eagle OC 显卡具有4864个CUDA内核,152个Tensor内核和38个RT内核。将配备8GB GDDR6内存,频率为14 Gbps,与刚刚宣布的RTX 3070相同。就规格而言,它甚至不到RTX 3090的一半。 RTX 3060 Ti Eagle OC为单8pin的供电接口,预计大多数非公版功耗都在200W以内,这对于PCIe接口提供的75W和8pin供电提供的150W来说不是问题。 以上所有内容便是小编此次为大家带来的所有介绍,如果你想了解更多有关它的内容,不妨在我们网站或者百度、google进行探索哦。