开发思想 – 阿姆达尔定律、高德纳定律、Dane North定律

阿姆达尔定律 Amdahl’s law / Amdahl’s argument

计算机系统运行的最大瓶颈,是那些不能并行计算的部分。

一般为了提高性能,我们会先采用多线程,这样可以实现并行计算。如果这个不满足需求,我们可能会支持多个进程。不管哪个,我们都要解决一个无法避免的问题:数据同步。而多进程的实现,还需要指出进程间通信(IPC),一般可以用命名管道(named pipe)、消息(windows message)、socket (没错,本机也可以用套接字)、内存映射文件(memory mapped file – MMF)等等。

如果多进程还不能解决问题,我们可以考虑分布式计算,这个时候数据同步/通信可以用scoket、队列(如Kafka等)、HTTP服务等。

不管哪种实现,性能瓶颈应该是整个业务流程中不支持并行处理的模块/功能。

高德纳定律 Knuth’s law (Donald Knuth)

Premature optimization is the root of all evils,过早的优化是万恶之源。

我之前说过不应该过度设计(开发思想 – KISS/DRY、奥卡姆剃刀、重复发明轮子、过度工程/设计/YANGNI),因为你现在不需要、短期也不需要。

但是,有些开发人员就利用这个做借口,懒于设计,最后做出一个刚上线就已经无法应付需求的产品,这是因为这些开发人员没有理解高德纳的原意。他老人家想说表达大家不要“过早”优化。那什么是“过早”呢?

举个例子,某个创业公司,技术负责人要高大上,所使用的技术都是业界最先进最强大的,技术团队折腾了2年,产品还没有出来,公司资金链断了,倒闭了。这是过度设计,他们臆想客户在短期内有这个需求。

再举个例子,某个系统的一个模块,设计人员考虑到可能用户量会很大,所以做成分布式的,用上了非常复杂的架构,上线之后,用户量远没有想象中的多,单机就能轻松应付所有请求。

实际上应该怎么样做?多次迭代,看菜吃饭。技术架构应该是不断变化的。

Dane North’s law

每一个决定都是有代价的。

大家应该知道计算机优化的2大常用办法:

  • 用空间换时间:譬如缓存
  • 用时间换空间:譬如压缩

每个功能都有其侧重点,譬如追求性能,或者追求内存/存储空间最小化,很多时候,我们只能在这两者之间做取舍、平衡。

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。