在开始写第一个PHP程序之前,我们需要了解文件、硬盘、内存、CPU、操作系统。这些都是平时耳熟能详的东西,通过熟悉的事物来打开编程的大门将更容易。
-
文件
为什么要将文件放在第一个位置来介绍?因为文件就是代码,无论是编译前的还是编译后的代码,都是文件。图片是代码,视频是代码,一切电脑上存在的东西都能理解为代码,只是打开的工具不一样。.py文件需要Python打开,.php文件需要PHP打开,.html文件需要浏览器打开等等。代码并没有多神奇,随处可见。都能用记事本打开,只是『肉眼』这个解析器能不能读懂罢了。
-
硬盘
硬盘是我们存放代码的载体,这里需要对硬盘的速度有个概念。硬盘读写的速度基本是 45M/秒 (不同硬盘有差异,读写也有差异)。一些很大的项目,比如Yii和Laravel源代码都有60M。理论上每个请求都要加载这60M代码,只加载就要1秒多,为什么几毫秒就能返回结果呢?这是我们需要思考的问题。当然有些PHP项目有几百M,但并不影响项目的性能,所以并不是项目文件越大就越慢,这也是需要知道的概念。
-
内存
内存可以理解为读写速度更快的硬盘,我们很多时候会把通用的代码和数据放内存中,这样读取和写入速度会更快,减少因为硬盘读写导致的耗时。当然内存资源相比硬盘更昂贵。在Web开发中,读写频繁和IO密集型操作肯定会导致内存消耗增加。比如我们常说的单机1万QPS,大多时候瓶颈就在内存。还有用空间换时间也是常用的编程技巧,就是使用更多的内存来加快计算。
-
CPU
CPU主要用来做计算,单个CPU的计算速度已经足够快,快的内存都来不及提供数据。比如内存一秒能读取10G数据,CPU一秒能计算100G数据,往往内存会拖慢CPU,所以才有了一级缓存,二级缓存,三级缓存,这些缓存是比内存更快的存储器。因为操作系统设计的关系,一个线程只能使用一个CPU核心,为了充分利用CPU的多个核,就需要通过编程来实现,比如通过多进程单线程(Nginx)、单进程多线程(Memcached)等。在Web编程中,只有遇到密集型的计算才会考虑CPU的瓶颈问题,比如加密解密,图像渲染,机器学习等。其他大部分场景下CPU都不会成为优先考虑的因素。
-
操作系统
操作系统我们每天都在用,它管理着硬件并提供了一个生态环境让软件稳定运行,比如Android,iOS,Windows,Linux等等。编程时刻都要与操作系统打交道,比如进程管理,进程间通信,内存申请,堆栈使用,基于不同的操作系统对代码做不同的优化等等。这是一门很大的学问,夸张点来说正是有了操作系统才有了后来编程语言的百花齐放。
介绍了如上信息之后,我们需要带着问题去编码,这样学习起来能事半功倍。
- 对于一个50M大小的PHP项目,如何保证项目不会随着文件的增加导致性能下降?关键词,按需加载
- PHP程序如何利用多核CPU?关键词,php-fpm
- PHP程序如何调用操作系统的进程管理方法,生成进程,管理进程,进行进程间通信?关键词,进程间通信(与编程语言无关)
在编写PHP程序的这些年里,无论解决多大的难题都离不开这5个基础知识点,整个Web生态圈都围绕着这些点在不停的优化。下一篇文章我会带着第一个问题来写PHP代码。
如果你喜欢我的文章,请关注我的博客 PHP教程系列3-写PHP程序前必须知道的5点信息
喜欢编程的朋友可以关注我的个人公众号,保证每周三篇原创。