懂王未必真的懂,浅谈计算机基础理论中的错误认知

引言

众所周知,现代高可用架构设计,上云是不可或缺的一部分。几乎所有跨国企业都在使用上云的架构以保证服务不会因为单地域的服务中断而全盘皆崩。

而今天,我所要介绍的就是一位懂王一般的人物,其坚定地认为物理机在性能上绝对优于虚拟机。

  • 当事人 QQ 号:717432167
  • 涉事群聊:天空博客 Tkong(996956586)

个人特色

2022.11.08 晚间讨论

当时,我们在 Tkong QQ 群聊中讨论Python程序打包为可执行文件的优劣,当事人在群内发表以下观点:

  1. Windows的可执行文件均为 .exe 文件,Linux的可执行文件均为 .bin 文件,只不过隐藏了后缀
  2. Windows的 .exe 文件和Linux的 .bin 文件都是二进制文件,但他们的格式不一样。二进制格式要和操作系统兼容
  3. java和py都是解释型语言
  4. .ban 后缀的文件是字节码,.bin 是二进制

我将就以上部分观点进行反驳。

1. 关于 Windows 和 Linux 的可执行文件

首先我们需要了解 可执行文件 的定义:

可执行文件在计算机科学中指一种内容可被电脑解释为程序的电脑文件。通常可执行文件内,含有以二进制编码的微处理器指令,也因此可执行文件有时称为二进制档。这些二进制微处理器指令的编码,于各种微处理器有所不同,故此可执行文件多数要分开不同的微处理版本。一个电脑文件是否为可执行文件,主要由操作系统的传统决定。例如根据特定的命名方法(如扩展名为exe)或文件的元数据信息(例如UNIX系统设置“可执行”权限)。

摘自 https://zh.wikipedia.org/zh-cn/%E5%9F%B7%E8%A1%8C%E6%AA%94

较为通俗的解释应该是:可执行文件是一种可以直接被操作系统运行而无需依赖其它软件的程序。

在 Wikipedia 中我们了解到常见的可执行文件具有以下几种文件扩展名:

  • .exe(Dos、Windows系列)
  • .com(Dos、Windows系列)
  • .App(以文件夹存在,Mac OS X)
  • .run(Linux Ubuntu)

显然,Wikipedia 忽略了一种情况,即在Unix(类Unix)系统中,无扩展名可执行文件的情况,而这种情况对于常用Unix(类Unix)系统的人群是极为常见的。

Unix(类Unix)系统对可执行文件使用扩展名是无意义的,我们可以参考以下回答内容:

Do you mean file name extensions like exe, txt and bat? If so, they’re not necessarily there because they mean nothing in the Unix/Linux world. File types in this world are determined by the file’s characteristics, is it executable, a text file, a shell script, a not executable binary blob? These don’t need extensions but sometimes they’re added to make them detectable to the human system user, like rpm or deb for package files, sh for shell scripts, txt for text files, jpg or jpeg for jpeg images, tar for archives, tar.gz for compressed archives. The system doesn’t need them but the user may find them useful so that they can be recognised on sight rather than having to use the “file” command or open a GUI file manager to see the nature of the file.

Windows and Linux have different heritages, the file extensions came into Windows via CP/M and then DOS and are still there because of those platforms file system limitations. They were never there in Unix because they were never needed and are still not needed in its clone, Linux.

摘自 https://www.quora.com/Why-is-there-no-extension-in-Linux

我们可以简要理解这段文字的意义:Windows/DOS 需要文件扩展名是因为文件扩展名通过 Windows 的 CP/M 执行并被操作系统限制。但在Unix和Linux中这种限制是不存在的,这些系统中的扩展名(例如 .rpm.jpg)是用于给人类对文件进行区分的,而非系统需要。

更何况,即使是在 Ubuntu 也只是出现了 .run 的软件扩展名,在Linux中软件本身不需要扩展名,也没有任何规定说二进制文件/软件就必须使用 .bin 作为扩展名。

显然,当事人第一条观点是不成立的。二进制文件不一定是 .bin 扩展名,.bin 扩展名也不一定是二进制文件(尽管这不是很规范,但是可行,因为 Unix 系统中扩展名无实际意义)。

2. 可执行文件跨平台

在使用 CGO 交叉编译的时候我们可以明确体会到跨平台编译的痛苦。对于任何一个有跨平台编译经验的人来说,他都应该知道,跨平台跨的是 指令级架构+系统 而并不只有系统。

不同的处理器使用的指令集可能存在异同,对于不同指令集的处理器,编译的二进制代码也应不同。也正是因此,对于一些有编译过程的语言,我们需要使用不同的编译器(比如 gccaarch64-linux-gnu-gcc)。

由此看来,当事人第二条观点是片面性的。跨平台并不只是系统的差异,同一文件扩展名的文件在不同架构的计算机也并不一定都可运行。

而二进制[1]的格式应与CPU指令集兼容,而非操作系统。

3. Java 的语言类别

当事人认为:Java 是解释性语言。

显然,这个解释是片面的。Java 并不符合如 Python、PHP、Lua 等解释性语言的特征,但也不符合如 C、CPP 等编译型语言的特征。

现在大多数人的观点是:Java 既是编译性语言,也是解释性语言[2],更接近编译型语言。

在 Wikipedia ,我们得到以下观点:

Java编程语言的风格十分接近C++语言。继承了C++语言面向对象技术的核心,舍弃了容易引起错误的指针,以引用取代;移除了C++中的运算符重载和多重继承特性,用接口取代;增加垃圾回收器功能。在Java SE 1.5版本中引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱特性。昇阳电脑对Java语言的解释是:“Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全、与系统无关、可移植、高性能、多线程和动态的语言”。

Java不同于一般的编译语言或直译语言。它首先将源代码编译成字节码,再依赖各种不同平台上的虚拟机来解释执行字节码,从而具有“一次编写,到处运行”的跨平台特性。在早期JVM中,这在一定程度上降低了Java程序的运行效率。但在J2SE1.4.2发布后,Java的执行速度有了大幅提升。

摘自 https://zh.wikipedia.org/zh-hans/java

由此看出,将 Java 描述为解释性语言,显然是不恰当的。

4. .ban 后缀的文件是字节码,.bin 后缀的文件是二进制

任何国际组织和国内组织均没有定义 .ban 的文件扩展名,较为常见的字节码文件应当是Java的 .class 文件,和 .ban 完全不相关。

本人在此不做解释,这是一个常识性问题,显然这个理论是完全不符合实际的。

2022.11.10 晚间讨论

当晚,在 Tkong QQ 群聊中正在针对虚拟化方案进行讨论时,当事人针对服务器大谈阔论。其观点如下:

  • Kernel 就是 Shell
  • “vm[3]这种辣鸡”
  • 裸金属不是物理机,裸金属就是虚拟机
  • “虚拟化辣鸡,送我都不要”
  • e3 1230v2,睿频3.7,6个ip,单核吊炸天[4]
  • Xeon Platinum 8380M 性能不如 E3-1230v2
  • 物理机可无视SLA(经由下方图7解读)
  • 虚拟机共享网卡,绝对劣于物理机独享网卡(无论型号)

总结

这人真挺弱智的。

写不完了,也不想写了,人被开了以后就聊无声息了。

具体可看 https://lezi.wiki/717432167

Note

  1. ^显然这是个广义的说法,在此处指代的应是以二进制格式存储的可执行文件。 参考:https://zh.wikipedia.org/zh-hans/二进制文件
  2. ^指代 VMWare 虚拟化解决方案
懂王未必真的懂,浅谈计算机基础理论中的错误认知 的发布基于协议 AHdark Blog License。如欲对此文章内容此文章转载、修改或行使任何超出预览和分享性质的行为,请参考此协议。

评论

  1. 气温大赛钢琴2312
    Linux Edge
    2周前
    2022-11-24 22:44:32

    哈哈,小伙子不错嘛

  2. Windows Chrome
    3周前
    2022-11-18 14:35:27

    哈哈哈哈,哪个群里面都有懂王

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇