如何“未雨绸缪”面向未来工作?
|
芯片行业的企业分为两种模式,分别是IDM模式和Fabless模式。 IDM模式,是芯片的设计、生产、封装和检测都是自己做。
Fabless模式,就是将工作进行分工。无晶圆厂的芯片设计企业,专注于芯片的设计研发和销售。而实物产品的晶圆制造、封装测试等环节,外包给代工厂(称为Foundry)完成。 从某种程度上来说,我们真的应该感谢美国,感谢特朗普。 如果不是美国对我们的科技企业进行打压和封锁,国内的绝大多数人根本都不知道我们和对手在高端技术领域上存在这么大的实力差距,也不会知道原来做芯片是一件这么难而且重要的事情。 这件事也再次充分证明,敌人是最好的老师。科研领域老前辈们这么多年苦口婆心的呐喊,效果远远不及对手直接扇过来的巴掌。 确实,正如大家所见,芯片是世界上最难掌握的核心技术之一,也是衡量一个国家科技实力的参考标准之一。 虽然我们知道,芯片其实就是沙子做成的。但我们更应该知道,从一颗沙子到一颗芯片,经历的每一个步骤都非常不易。 首先,整个过程的步骤(工序)数量就非常惊人。
芯片,也就是集成电路(IC,Integrated circuit )。从整体上来说,芯片的研发和制造包括IC设计、IC制造和IC封测三大环节。这三个大环节里面,又包括了很多小环节。例如,像硅片制造,就包括了100多道工序。 破坏懒汉式单例与饿汉式单例 无论是完美的懒汉式还是饿汉式,终究敌不过反射和序列化,它们俩都可以把单例对象破坏掉(产生多个对象)。 利用反射破坏单例模式
下面是一段使用反射破坏单例模式的例子 使用 volatile 关键字可以防止指令重排序,其原理较为复杂,这篇文章不打算展开,可以这样理解:使用 volatile 关键字修饰的变量,可以保证其指令执行的顺序与程序指明的顺序一致,不会发生顺序变换,这样在多线程环境下就不会发生 NPE 异常了。
volatile 还有第二个作用:使用 volatile 关键字修饰的变量,可以保证其内存可见性,即每一时刻线程读取到该变量的值都是内存中最新的那个值,线程每次操作该变量都需要先读取该变量。 上面这段代码已经近似完美了,但是还存在最后一个问题:指令重排 使用 volatile 防止指令重排 创建一个对象,在 JVM 中会经过三步: (1)为 singleton 分配内存空间 (2)初始化 singleton 对象 (3)将 singleton 指向分配好的内存空间 指令重排序是指:JVM 在保证最终结果正确的情况下,可以不按照程序编码的顺序执行语句,尽可能提高程序的性能
在这三步中,第 2、3 步有可能会发生指令重排现象,创建对象的顺序变为 1-3-2,会导致多个线程获取对象时,有可能线程 A 创建对象的过程中,执行了 1、3 步骤,线程 B 判断 singleton 已经不为空,获取到未初始化的singleton 对象,就会报 NPE 异常。文字较为晦涩,可以看流程图: (编辑:漯河站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
