阿姆达尔定律 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个人指导、代码审阅等
-
解答各种技术问题
-
为公司提供技术解决方案
请查看本站右边的信息联系我。
版权所有
所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。