现在,很多公司在面试的时候都会提到需熟悉并发这块,那今天我就来说说关于并发这块我的认识与理解!
今天主要从三个方面来说一下并发:1.并发到底是什么?2.并发是怎么产生的呢?3.如何防止并发?
首先,第一个,并发的概念。在百科上是这样说的:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。这个其实我都没咋理解,我自己的理解就是,很多不同请求在同一时间请求相同的资源的这个过程就是并发。
那么,并发是怎么产生的呢?这个从我前面说的概念中就可以看出,就是在同一时刻请求同一个资源造成的。比如说,我现在有一个苹果放在一个黑盒子中,然后同时有5个人在同一时刻都说“我想要这个苹果”,那这个苹果现在到底要给谁呢?这样并发的问题就产生了。或许你会说,那我只给其中一个人给,然后告诉其他4个人,苹果没有了。或者说我把这个苹果分成5分,没人给一份就好了。但是,机器毕竟是机器啊,他没有人类的思维啊,如是机器有思维了,那要人干啥啊,对吧。机器他只会按照你实现设定好的程序去执行。现在你想要机器去做这些操作,那你就需要提前在程序中写好关于怎么去分苹果的逻辑,是吧,这样,就到了如何解决/防止并发的问题。
如何去解决并发呢?总的来说,目前有三种比较主流的解决方案。1.服务器层面2.数据库层面3.程序设计方面
1.服务器方面:这块目前主要是通过负载均衡去实现,将多个请求分发到不同的服务器去,减少服务器的压力。但是毕竟是硬件方面的解决方案,但是放到后面再考虑。
2.数据库方面:目前我所知道的项目,大多是在数据库方面去解决高并发这块的。使用数据库的锁机制,分库分表,读写分离,使用redis等nosql方式。这快现在也是我们做PHP必须要知道的一部分内容了,还不熟悉的小伙伴这块一定要去再看看。
3.数据设计层面:使用事务+锁,将异步操作转换成同步操作,使用缓存减少压力。
今天就先说这些,后面我将具体的技术整理一下,再分享出来,大家一起探讨一下!