java 军工_为什么军工行业不用java而是选择继续用c(对于业务系统Java是非常合适的而不带操作系统的板子甚至可以做到微秒级别的实时控制)...

军工,即军事工业,是工业领域的一个分支。工业控制,必然是C/C++的主战场。工业控制,讲究的是极高的稳定性,稳定压倒一切。同时,还讲究实时性。在控制过程中,一旦出现不稳定或大的延时,后果可能就是致命的。军工,那要求更加严格,简直就是性命攸关!

游戏有时也有类似的特点,但是出现问题,大不了就输一局比赛,损失一件高端游戏装备,这与军工的损失完全不在一个重量级。

而Java广泛用于应用级开发,特别是web平台和手机app。哪怕是在线支付,对于稳定性和实时性的要求也没有那么高。经常我们遇到服务不可用之类的错误,“请刷新重试”。关系不大,多刷新几下就好了嘛。事务机制基本能保证不会乱扣钱,但是保证不了一次性成功以及高度的实时性。

而在工业控制中,关键操作可不敢“刷新重试”。在类似驾驶的控制中,关键指令延迟0.1秒可能都是致命的。

说了这么多,这与C/C++和Java有什么关系的?

两者最大的区别就是:Java是带虚拟机的,是带垃圾回收的,而C/C++不带。垃圾回收往往是不可控的,不知道什么时候就执行了垃圾回收,这个时间可能很短,也可能很长。在垃圾回收时,就会带来卡顿。Java虽然也有运行时编译、“预热”机制,但都是难以控制的,具有不确定性。说的直白点,你把一切希望都寄托到了Java虚拟机(JVM)。而对于工业控制,尤其是军工,肯定尽量要求一切要尽在掌控中。

对于要求最高的控制场景,那都不能用windows或常规Linux,因为它们是分时系统,是多任务的,是非实时的。这时候,可能最简单的才是最可靠的。单任务、单进程、单线程,去除一切用不到的功能。连声卡、显卡、网卡、硬盘/SD卡,都不是必需的。甚至更夸张一点,连操作系统都没有!

windows、普通的Linux,能做到10毫秒的精度。定制的嵌入式系统,能做到毫秒级的精度。而高度优化的,不带操作系统的板子,甚至可以做到微秒级别的实时控制。

注意一下,光在真空中1微秒只传输300米。最极端的,最快的控制是最原始的机械紧急停止按钮。它的延迟恰好就是光在线路中的传输时间。所以大家就能明白,为什么越简单越可靠越快。

有了这些基础,大家就能明白,在非常“低级”的系统中,只有汇编和C可以运行起来,虚拟机和解释器是跑不动的。就算跑起来,也是很慢的,很消耗资源的。

Java,其底层就是用C语言写的。大家若不相信,请马上去阅读Java源代码中有关压缩、JPG图像、科学运算(sin、cos、log、pow等)的部分。另外虚拟机也是用C写的。所以理论上来说,只要是Java能做到的,特别是性能方面,C语言都可以做到。

对于业务系统,Java是非常合适的,开发效率高,生态系统好。但是对于军工,开发效率要让位于执行效率以及可靠性、实时性、低功耗。人们愿意花费更多的研发时间去开发这样的系统,哪怕是重复造轮子也在所不辞,因为这是性命攸关的,有时甚至是不计成本的。

c++接近汇编效率,基本没有延迟,有bug也是蓝屏死机类似底层严重故障。而java是个半编译语言,它依靠解释器,它不一定能及时运行。如果用来编写碰撞检测估计你更倾向于汇编或能操作CPU的语言,所有的都在预料的掌控下。这就是君工和行业生产不淘汰C++。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值