经常使用知识点回顾及高并发解决方案简述

1.同步和异步数据库

同步:正在处理一件事情,必须等待彻底处理好之后,返回处理结果,才算完成。缓存

例如,打电话须要一直处于等待状态,不可以作其余的事情,直到对方接电话,才算完成。服务器

异步:正在处理一件事情,没有等待处理好,又去忙于其余的事情,只要处理好通知一下就行。并发

代码开发中通常经过状态(须要不定时查看状态,低效率,高消耗)、通知、回调函数获取处理结果。负载均衡

例如,发消息,只要发送了消息给某人,不须要等待,能够作其余的事情,当这人收到消息,回复你或者短信中心通知你消息到达,表示此过程完成。异步

 

2.阻塞式和非阻塞式函数

阻塞式:处理一件事情,必需要等待返回结果之后,才算完成。高并发

例如,去银行排队存钱,在这期间,你会排队等待直到完成整件事情。网站

非阻塞式:处理一件事情,在等待的同时作其余事情,直到最后处理完成。事件

例如,去银行排队存钱,在这期间,你也能够打电话,聊天,看电视等,直到最终存好钱。

区别:通常阻塞式没有返回结果之前就会被挂起。

 

3.并发和并行

并发:两个或多个事件在同一时间间隔发生,在一台处理器上“同时”处理多个任务。

并行:两个或者多个事件在同一时刻发生,在多台处理器上同时处理多个任务。

区别:并发是在同一个时间间隔内cpu交替处理多个任务,并行主要是对应多个处理器而言

能够在同一时刻处理多个任务。

 

4.脏数据

  脏读就是指当一个事务正在访问数据,而且对数据进行了修改,而这种修改尚未提交到数据库中,这时,另一个事务也访问这个数据,而后使用了这

个数据。由于这个数据是尚未提交的数据,那么另一个事务读到的这个数据是脏数据(Dirty Data),依据脏数据所作的操做多是不正确的

 

5.不可重复读

   不可重复读是指在一个事务内,屡次读同一数据。在这个事务尚未结束时,另一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,因为第二个事务的修改,那么第一个事务两次读到的数据多是不同的。这样就发生了在一个事务内两次读到的数据是不同的,所以称为是不可重复读

 

6.高并发中经常使用的锁机制,悲观锁、乐观锁

悲观锁:是对数据被外界(包括本系统当前的其余事务,以及来自 外部系统的事务处理)修改持保守态度,所以,在整个数据处理过程当中,将数据处于锁定状态。

乐观锁:大可能是基于数据版本   Version )记录机制实现,过为数据库表增长一个 “version” 字段来 实现。 读取出数据时,将此版本号一同读出,以后更新时,对此版本号加一。此时,将提 交数据的版本数据与数据库表对应记录的当前版本信息进行比对,若是提交的数据 版本号大于数据库表当前版本号,则予以更新,不然认为是过时数据。

例如,一个金融系统,当某个操做员读取用户的数据,并在读出的用户数据的基础上进 行修改时(如更改用户账户余额),若是采用悲观锁机制,也就意味着整个操做过 程中(从操做员读出数据、开始修改直至提交修改结果的全过程,甚至还包括操做 员中途去煮咖啡的时间),数据库记录始终处于加锁状态,能够想见,若是面对几 百上千个并发,这样的状况将致使怎样的后果

 

7.高并发解决方案

1)利用缓存机制,用户请求时将数据保存在缓存中,下次请求先直接从缓存中取数据,若是没有在执行查询操做。

2)HTML静态化,创建CMS系统(内容管理系统),经过用户(信息录入人员)录入数据,生成HTML页面,常经过模版的形式动态生成。

3)图片服务器同应用服务器分离,减轻应用服务器的压力。

4)数据库集群,经过创建数据库集群,缓解大量数据访问的压力。

5)镜像技术

6)负载均衡,大型网站解决高负荷访问和大量并发请求采用的终极解决办法,分摊到多个操做单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工做任务。

相关文章
相关标签/搜索