PS: 仅代表个人理解,欢迎各位大佬指正
一、并发与并行
并发是指同一时间在同一处理器上执行不同的任务
下图Task1与Tasks之间就是并发
并行是指同一时间在不同处理器上执行不同的任务
下图Task1与Task3之间就是并行
二、同步和异步
同步是指当一个任务执行时,其他任务要等待这个任务执行完成才能执行。
常见开启同步的方法:锁、sychronized等
异步时指任务当一个任务执行时,其他任务无需等该任务执行完成也能执行。
常见开启异步的方法:多线程等
举个很简单的例子:
异步:做饭的时候边煮饭边炒菜
同步:做饭的时候先煮饭,等饭煮好了再去炒菜
问:异步一定比同步好吗?
结果当然是否定的。异步确实效率比要比同步高,但是异步在写操作时会容易出现问题,这时候就需要用同步的方式处理。平常操作共享变量一般都采用同步的方式。
一个很经典的例子,去银行取钱,如果采用异步方式就很容易出现问题。两个人取同一张还有100元的卡里的钱,都取50,但是最后结果应该时卡里还有0元,但是异步方式就有可能导致结果还剩50元。这种情况采用同步的方式才是最合适的。
三、分布式、集群与微服务
分布式:将一个功能(系统)分解为许多子功能(系统)并将其部署在不同服务器上,这些子功能(系统)相互协作共同完成这一个功能(系统)。好比多个人完成不同的任务。
集群:相同的一个功能(系统)部署在不同的服务器上。好比多个人完成统一个任务。
分布式需要将功能或系统进行拆分,而集群则是将某个功能或系统部署于多个服务器上。
微服务:与分布式类似,只不过微服务是将功能做细粒度拆分,功能拆分到不可再拆分,而且微服务可以部署到同一服务器上,而分布式不可以。
分布式可以说是微服务的一种实现。分布式一定是微服务,但微服务不一定是分布式,因为微服务可以部署在同一台服务器上。
例子:分布式数据库和数据库集群
分布式:将数据库分库分表,每个数据库或表处理几个数据表或字段的数据。
集群:建立两个或多个相同的数据库。或者数据库分库分表好建立多个相同的分库分表在不同的服务器上。