首发于放码过来
细数IT领域的热门民科

细数IT领域的热门民科

歌德巴赫猜想,一度是数学民科们的最爱,随着基础教育的普及,物理也沦陷了,永动机成了物理民科们的至爱。现在计算机也沦陷了,民科们同样发表了很多哭笑不得的“道理”。本文尝试精选一些常见的民科言论。

  1. TCP粘包现象
  2. Epoll是异步IO
  3. 汉语编程
  4. 数据无限压缩
  5. 证明P=NP或P!=NP

TCP粘包现象

TCP粘包

第一次看到TCP粘包半包的时候,我很懵逼,仔细回想大三时计算机网络课程中的概念,完全不记得有这个名词。后来搜了一下,看了某个博主煞有介事的理论分析加实践,才明白这到底是怎么回事。民科们说的是这个事情

// 以下现象被他们成为粘包
A: send "人多"
A: send "病少"
A: send "财富"
B: recv "人多病少财富"

// 以下现象被他们成为半包
A: send "人多病少财富"
B: recv "人多病"
B: recv "少财富"

民科们会有这种误会,因为他们没受过正规的计算机网络的教育,不理解TCP的本质。TCP是面向流的协议,只有字节流,流是没有边界的,压根儿就没有包的概念,所以“粘包半包”就无从谈起了。所谓send,只不过是把字节流从进程复制到了内核buffer,内核什么时候发,一次发多少,那都是拥塞控制决定的,民科们大概天真的以为send返回的时候,对方已经收到了。水木上有人不客气的说,凡是用粘包这个说法的都是菜鸟,我深以为然。不过,这样的民科倒也没多少害处,至少解决了问题,也许在更菜的菜鸟面前,他们还是资深专家呢。

Epoll是异步IO

头一回看到这种说法的时候很激动,因为印象中epoll比kqueue或者iocp是要落后一些的,长期以来epoll不支持异步IO,只支持非阻塞IO,难道现在支持了?稍微一调查,马上很失望,我又遇到了民科,傻傻的拎不清同步异步和阻塞非阻塞的概念。

那么,Linux到底有没有异步IO?有,但是man aio是这么写的

The current Linux POSIX AIO implementation is provided in user space by glibc. This has a number of limitations, most notably that maintaining multiple threads to perform I/O operations
is expensive and scales poorly. Work has been in progress for some time on a kernel state-machine-based implementation of asynchronous I/O (see io_submit(2), io_setup(2), io_cancel(2),
io_destroy(2), io_getevents(2)), but this implementation hasn't yet matured to the point where the POSIX AIO implementation can be completely reimplemented using the kernel system calls.

简单概括一下

  • POSIX AIO是glibc在用户态用多线程模拟的
  • 内核基于状态机实现的异步IO还不够成熟

回到异步这个事情,打个比方,你去有关部门柜台盖个章,办事员不在

  1. 你必须在窗口等着,等人来办完了才能走,这个是 同步 + 阻塞
  2. 你可以出去转转或者干别的,人来了办完再走,这个是 同步 + 非阻塞
  3. 你把材料留下然后回家,他们盖完章快递给你,这个是 异步 + 非阻塞
  4. 你把材料留下,然后必须等着,他们盖完章快递给你,这个是 异步 + 阻塞

本质上,同步异步描述的是调用时序上的事情,跟阻塞不阻塞是没有关系的

Epoll解决的是阻不阻塞的问题,而不是同步异步的问题,它只是通知你,你做XX事情不会被阻塞,真正的异步IO,是通知你事情已经做完了。

汉语编程

如果编程的主要壁垒是英语,那么英语专业毕业的,编程水平应该比计算机系的高的多。事实上计算机编程语言,根本不是英语,它只有几十个保留关键字是英语单词,很多语言变量名可以用中文,实在不行你还可以用拼音啊。学不会编程,是因为记不住那几十个单词吗?

似乎是有一些人用汉语编程做出了一些东西,好吧,我承认某些汉语编程SDK解决了一些问题,降低了某个领域的编程门槛。但那是汉语的功劳吗?换个别的语言,提供一样功能的SDK库,恐怕效果也差不多吧。

数据无限压缩

一个文件,用A压缩软件压缩后,小了1/3,然后用B再压缩一次,又小了1/3。这个时候民科思维活络起来,异常兴奋,我用C软件再压一次,压完用D再压一次,只要找到足够多的压缩软件,就可以无限的压缩下去。

香农大概要气的活过来了,70年前提出的“信息熵”,到现在还有民科无视。你能压缩,那是因为信息量本来就比你的文件大小要小。举个例子,你能把一个人的人脸特征信息压缩到1个字节吗?1个字节只有256种可能性,不同人脸的可能性只有256种吗?当然不可能。

民科们并不服输,他们声称只是暂时没找到合适的压缩算法和软件。

证明P=NP或P!=NP

简单解释一下,P指的是可以在多项式时间复杂度内解决问题,NP指的是可以在多项式时间复杂度内验证命题的真伪。P是不是等价于NP,一直是学术界选而未决的难题,可以称为计算机理论界的歌德巴赫猜想。每年每个月甚至每天都有人宣布自己证明了P和NP相等或者不相等。其中不乏一些知名大学的学者。但是很遗憾的是,目前为止还没有广泛被认可的证实或证伪的论文。

可以肯定的是,目前以及未来很长时间内,凡是说自己证明了这个命题的人,在这个事情上都是民科。

编辑于 2017-11-03 17:06