同步异步

同步异步

同步

同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;

异步

异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

并发和并行

并发

并发CPU 会把一段时间划分成几个时间片段, 然后再这几个时区区间来回切换,处理非常快, 看起来是同时运行。可以参看下图。
并发是多个任务互相抢占资源

并行

并行, 系统包含多个CPU, 每个CPU执行一个进程,每个进程互不抢占资源,可以同时运行, 我们称之为并行。可以参看下图
并行多个任务之间不抢占资源

在这里插入图片描述
在这里插入图片描述

进程 线程 协程

进程:
操作系统会以进程为单位,分配系统资源(CPU时间片,内存等资源)进程是资源分配的最小单位。
线程:
线程,有时被称为轻量级进程,是操作系统调度(CPU调度)执行的最小单位。

协程
协程是一种比线程更加轻量级的存在, 协程不是被操作系统操作系统内核所管理,而完全有程序所控制(也就是在用户太执行)这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。

切换开销:
进程 > 线程 > 携程

CPU密集型,IO密集型

并发一般适合IO密集型(网络IO, 磁盘IO, 数据库IO) ,大量时间花费在数据传输

并行一般适合CPU密集型,大量时间花费在计算

一般开发中: 多进程(CPU的核数) + 多携程

高并发产生的问题

数据一致性问题

高并发我们经常遇见的就是数据一致性的问题。

脏读,幻读,不可重复读

脏读

脏读,就是读取到别的事务回滚前的脏数据,比如某个事务A执行过程中修改了数据X,在未提交前 事务B读取了X, 而事务A却回滚了,这样事务B就形成了脏读。

脏读就是读取到的数据是别的事务想要修改成为的但是没有修改成功的数据

不可重复读

事务A首先读取了一条数据,然后执行逻辑的时候,事务B将这条数据改变了, 然后事务A再次读取的时候发现数据不匹配,就是数据不可重复读

当前事务先进行了一次数据读取,然后再次读取到的数据是别的事务修改成功的数据,导致两次读取到的数据不匹配,也就照应了不可重复读的语义

幻读

事务A首先根据条件索引到N条数据,然后事务B改变改变了N条数据之外的M条或者添加了M条或者增添了M条数据符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据。

也就是第一次读取到的数据比后来读取的数据条目少。

幻读强调的是集合的增减,而不是单独的一条数据的修改。

不可重复读和幻读比较
两者有些相似, 但前者是针对的时update,delete, 后者针对insert

如果以上不清晰可以看下:
https://www.cnblogs.com/yubaolee/p/10398633.html

数据丢失

超卖,超买

超买,超卖问题主要发生在我们库存的修改。
比如秒杀的场景, 商家上架100个商品,但由于多并发的情况, 我们其实卖出了200个,已经超出我们库存量。

原因:
在高并发的情况下, 多个线程同时修改了同一条库存的商品。比如现在现在库存剩下80,两个线程同时修改了80这条记录,当数量变为79时,其实是卖出了2个商品。

乐观锁

认为写数据的时候, 别人不在写,设有一个表示version(字段), 当线程读取数据时,同时会读取出表示版本version的值,进行更新时,首先比较当前数据字段version的值是否与读取出的version值相等,如果相等,则更新值,否则作为过期值丢弃

乐观锁适用于写比较少的情况下(多读场景),即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。

悲观锁

持保守态度,只能由某一个线程持有,其他线程等待持有锁的线程释放锁,性能差。
一般多写的场景下用悲观锁就比较合适。

排他锁

若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。它防止任何其它事务获取资源上的锁,直到在事务的末尾将资源上的原始锁释放为止。

共享锁

共享锁又称为读锁(Share lock,简记为S锁),若事务T对数据对象A加上S锁,则其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值