精华内容
下载资源
问答
  • 并发操作之——并发、并行

    千次阅读 2021-08-30 15:30:24
    并发操作 并发操作之——并发、并行 并发操作之——并发、并行并发操作前言一、什么是并发?什么是并行?并发:并行:二、并发和并行举例总结 前言 并发操作之——并发、并行。 一、什么是并发?什么是并行? ...

    并发操作

    并发操作之——并发、并行



    前言

    并发操作之——并发、并行。


    一、什么是并发?什么是并行?

    并发:

    一台处理器上同时处理任务, 这个同时实际上是交替处理多个任务,程序中可以同时拥有两个或者多个线程,当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行。

    并行:

    多个CPU上同时处理多个任务,一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,可以同时进行。

    并发指在一段时间内宏观上去处理多个任务。 并行指同一个时刻,多个任务确实真的同时运行。

    二、并发和并行举例

    一个项目经理A和3个程序B C D的故事
    单线程
    并发:A给B讲完需求,B自己去实现,期间A继续给C和D讲,不用等待某个程序员去完成,期间项目经理没空闲下来
    并行:直接找3个项目经理分别分配给3个程序员

    总结

    并发实际上还是一个任务一个任务的去执行只不过CPU给不同的任务分配了时间段,并行是多个CPU同时的在执行任务。

    展开全文
  • 如何有效处理数据并发操作问题

    千次阅读 2019-06-17 10:13:23
    一:并发操作出现的原因 原因:多个动作在一瞬间同时操作同一数据 现象: 多人在某一瞬间通过相同的方式操作同一条数据 多人在某一瞬间通过不同的方式操作同一条数据 在某一瞬间,同一动作,...

    本篇文章以我在真实项目中遇到的数据并发问题作为背景,讲解问题出现的原因及解决的办法,以及从中得到的反思。并发中踩过很多坑,可能还有不足的地方,但会一直学习成长,现在将学习到的东西记录下来,,,,努力努力。

    一:并发操作出现的原因

    原因:多个动作在一瞬间同时操作同一数据

    现象:

    1. 多人在某一瞬间通过相同的方式操作同一条数据
    2. 多人在某一瞬间通过不同的方式操作同一条数据
    3. 在某一瞬间,同一动作,多次执行

    二:并发举例及解决办法

    针对上述的三种的情况,分别以实际情况进行举例。

    多人在某一瞬间通过相同的方式操作同一数据

    1.某仓库系统有一品牌商品A,商品A在数据库中只允许存在一条记录,库存的数量是这条数据的一个字段,现有库存100件,在某一天到货了1000件。由于数量比较大,现在需要10名操作员去处理这1000件商品进行入库,操作的途径都是使用PDA扫描完成后进行入库。我们假设至少存在1名以上的操作员同时进行入库操作。这样就可以满足上述条件多人在某一瞬间通过相同的方式操作同一数据】。在这种情况下,如果不进行处理,就会导致数据错乱,错乱的原因简单说就是在双方写数据时没有获取到最新的数据库数据。

    解决方法:

    方法一: 加锁。加锁是比较常用的方法。从系统的架构上来说,锁被分为单机锁分布式锁。如果系统只是部署在单一机器上,可以简单通过java提供的各种锁来进行操作。如果系统被部署在多台机器上,可以使用redis来实现分布式加锁。这两种加锁方式从某种意义上来说是悲观锁。上述的问题,我们可以使用商品的唯一属性,比如id或者商品的唯一条码来进行加锁。

    方法二:数据库乐观锁。数据库乐观锁几乎适用于所有的并发场景。使用方法:在数据库表中增加一个版本号字段,每一次更新和删除时把当前持有的对象版本号和数据库中最新的版本号进行比对,如果相同则验证通过,不然则操作失败。

    方法三:使用消息队列。这种方式在消息过多时,对库存的处理可能不会特别及时。由于库存一般是需要比较及时的可见,所以这种方式并不建议。

    多人在某一瞬间通过不同的方式操作同一数据

    2. 还是按照上述的背景来说。在这10名操作员进行入库的同时,还有至少1名操作员对A商品进行出库操作。我们假设入库时没有并发问题,但是其中一个入库和一个出库同时操作了A商品的库存,通过两种不同的方式对库存进行操作。如果不进行处理,库存也会出现数据错乱的问题。

    解决方法:

    方法一: 加锁。这个时候使用普通的单机锁已经没有意义了,可以使用分布式锁,依旧使用唯一属性来进行加锁,尽管方法不同,但关键的key是一样的,这样就可以锁住操作。

    方法二:数据库乐观锁。

    对于上述的问题,我扩展一下,如果是一批商品,你总不能一个一个进行加锁处理吧,那样效率也太低了。所以这种情况下,简单的加锁已经不能满足现在的需要了。所以数据库乐观锁又重新出现了。在批量更新时,发现其中任何一个商品的版本号不一致,立即报错回滚。

    【在某一瞬间,同一动作多次执行

    3.这一种情况属于请求重复提交,同样,如果没有进行处理,数据也会出现问题。

    一个用户在入库时重复提交了两次,这样在不考虑其它并发的影响下,库存中的数据会多增加一次,但在入库历史中却只能看见一次记录,这样肯定是不可接受的。

    解决方法:

    方法一:前台可以在按钮或链接第一次点击后立刻禁用。这样可以有效的解决绝大部分的问题。但是由于操作端千变万化,这种方式并不能够完全解决问题。

    方法二:后台生成一个随机数放在前台,前台在访问后台时,将随机数传输到后台进行验证,第一次验证通过即刻销毁, 随机数可以存在redis或session中,一般用于表单提交。但是这种方式还是存在缺陷,如果同一个页面有多个请求,一个随机数就完全不够用了。

    方法三:nginx可以控制ip在同一时间内对服务的访问频率。比如入库时,如果进行了多次点击,发送了多次请求,在这1秒中,系统只接收第一次请求。

     

    三:总结

    处理并发的最终原理其实就是:将用户的并行操作变成串行操作。

    在解决并发问题时,从操作端到服务端,再到数据库,都需要进行处理,层层过滤。

    前端:防止多次点击。

    服务端:对相同数据的操作写在同一个服务中。

    数据库:乐观锁一定要使用。有需要的话,数据库的联合唯一索引也要准备。

    四:扩展

    到此为止,有相关项目开发经验(仓库系统)的读者可能会发现有些问题。问题在于:库存的设计不够优雅,才导致了很多并发情况的产生。比如,10个操作员在入库时,为什么需要操作库存中的A商品去增加库存呢?其实,所有的入库和出库,包括盘点等,都是在为了用户能够及时的看见库存而已。既然知道库存的计算方式,我们完全可以计算出对应的库存,并且还能减少大量的并发操作。

    接下来的文章,我将设计一个高可用,并且并发操作较少的仓库系统。有兴趣的同学可以关注我啊!

    说的有什么不对的地方,还请大家多多指正。

    感谢!感谢!感谢!

    展开全文
  • 什么是数据库并发操作  数据库是一个共享资源,可以提供多个用户使用。这些用户程序可以一个一个地串行执行,每个时刻只有一个用户程序运行,执行对数据库的存取,其他用户程序必须等到这个用户程序结束以后方能对...

    什么是数据库并发操作

      数据库是一个共享资源,可以提供多个用户使用。这些用户程序可以一个一个地串行执行,每个时刻只有一个用户程序运行,执行对数据库的存取,其他用户程序必须等到这个用户程序结束以后方能对数据库存取。但是如果一个用户程序涉及大量数据的输入/输出交换,则数据库系统的大部分时间处于闲置状态。因此,为了充分利用数据库资源,发挥数据库共享资源的特点,应该允许多个用户并行地存取数据库。但这样就会产生多个用户程序并发存取同一数据的情况,若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性,所以数据库管理系统必须提供并发控制机制。并发控制机制的好坏是衡量一个数据库管理系统性能的重要标志之一

    数据库并发操作带来的问题

    (1)丢失更新

      当两个或多个事物读入同一数据并修改,会发生丢失更新问题,即后一个事物更新的结果被前一事务所做更新覆盖 即当事务A和B同事进行时,事务A对数据已经改变但并未提交时B又对同一数据进行了修改(注意此时数据是A还未提交改变的数据),到时A做的数据改动丢失了

    (2)不可重复读

       当两个数据读取某个数据后,另一事务执行了对该数据的更新,当前一事务再次读取该数据(希望与第一次读取的是相同的值)时,得到的数据与前一次的不一样,这是由于第一次读取数据后,事务B对其做了修改,导致再次读取数据时与第一次读取的数据不想同

    (3)读‘脏数据’

      当一个事务修改某个数据后,另一事务对该数据进行了读取,由于某种原因前一事务撤销了对改数据的修改,即将修改过的数据恢复原值,那么后一事务读到的数据与数据可得不一致,称之为读脏数据

      注意:还有一个叫“幽灵数据” 幽灵数据与脏数据类似,不过幽灵数据是指事务提交之后读到的数据,但是在读取之后又进行了对前一事务的恢复,而脏数据是指并未提交前读取的数据

    展开全文
  • 数据库的并发操作通常会带来三个问题 丢失更新:当一个事务修改du了数据zhi,并且这种修改还没有dao还没有提交到zhuan数据库中时shu,另外一个事务又对同样的数据进行了修改,并且把这种修改提交到了数据库中。这样...

    数据库的并发操作通常会带来三个问题

    丢失更新:当一个事务修改du了数据zhi,并且这种修改还没有dao还没有提交到zhuan数据库中时shu,另外一个事务又对同样的数据进行了修改,并且把这种修改提交到了数据库中。这样,数据库中没有出现第一个事务修改数据的结果,好像这种数据修改丢失了一样。

    脏读:当一个事务正在访问数据,并对数据进行了修改,而这种修改还没有提交到数据库中,这时,另一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。

    不可重复读:在一个事务内,多次读同一数据。在这个事务还没有结束时,另一个事务也访问该同一数据,那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,第一个事务两次读到的数据可能是不一样的。

    展开全文
  • 并发操作SQLSERVER的解决方案

    热门讨论 2010-08-19 17:42:58
    将所有的请求全部压入一个队列中。服务器监控队列,如果队列中有请求,则处理请求。如下面的代码中,服务器就起了100个线程来监控队列,如果队列中有请求,则插入数据库。在实际的应用中,服务器监控程序也可以起到...
  • 并发操作与数据的不一致性

    千次阅读 2018-11-03 15:48:28
    1,什么是并发操作? 数据库的一个重要特征是:支持数据共享,也就是说允许多个用户程序并行地存取数据库中的数据;那么,多用户或多事物可能同时对同一数据进行操作,这成为并发操作。 2,并发操作可能带来的影响...
  • C#实现多线程同步并发操作,在线源码,供你下载学习
  • Java使用代码模拟高并发操作

    千次阅读 2018-10-17 16:18:34
    摘要:在java中,使用了synchronized关键字和Lock锁实现了资源的并发访问控制,在同一时间只允许唯一了线程进入临界区访问资源(读锁除外),这样子控制的主要目的是为了解决多个线程并发同一资源造成的数据不一致的...
  • 并发操作之——CAS

    千次阅读 2021-09-10 12:06:07
    并发操作 并发操作之——CAS 并发操作之——CAS并发操作一、CAS二、CAS存在的问题1、CPU资源占用问题2、ABA问题 一、CAS Compare And Swap 即比较再交换,是实现并发应用到的一种技术 底层通过Unsafe类实现原子性...
  • ElasticSearch 并发操作问题

    千次阅读 2019-03-19 09:16:39
    解决并发问题 https://www.elastic.co/guide/cn/elasticsearch/guide/current/concurrency-solutions.html 问题的原因是 Elasticsearch 不支持 ACID 事务。 对单个文件的变更是 ACIDic 的,但包含多个文档的变更不...
  • 并发操作会带来哪些数据不一致性(D )。 A 丢失修改、不可重复读、脏读、死锁 B 不可重复读、脏读、死锁 C 丢失修改、脏读、死锁 D 丢失修改、不可重复读、脏读 并发操作带来的数据不一致性包括三类:丢失修改、不...
  • 事务是并发控制的基本单位,保证事务的ACID特性是事务处理的重要任务,而事务ACID特性可能遭到破坏的原因之一就是多个事务对数据库的并发操作造成的。 并发操作带来的数据不一致性有:丢失修改,不可重复读,脏读。...
  • 并发操作带来的数据库不一致性可以分为四类:(1)丢失或覆盖更新当两个或多个事务选择同一数据,并且基于最初选定的值更新该数据时,会发生丢失更新问题。每个事务都不知道其它事务的存在。最后的更新将重写由其它...
  • 数据库中常见的并发操作所带来的问题包括:丢失的修改、不可重复读、读脏数据、幻影读(幻影读在一些资料中往往与不可重复读归为一类)。 丢失修改 下面我们先来看一个例子,说明并发操作带来的数据的不一致性问题...
  • 多用户并发操作的解决方案

    千次阅读 2017-12-19 15:27:59
    【问题】在以前的系统开发中,经常遇到一个同样问题,就是多个用户同时并发操作一条记录,这次在交易系统开发过程中,又出现了这样问题。比如交易商A提交单子,由审核人员B审核,此时A正在修改单位,B也正在查看这条...
  • 如何处理大量数据并发操作

    万次阅读 2016-02-06 00:49:57
    如何处理大量数据并发操作文件缓存,数据库缓存,优化sql,数据分流,数据库表的横向和纵向划分,优化代码结构!锁述的概 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题:丢失更新...
  • 但这样就会产生多个用户程序并发存取同一数据的情况,若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性,所以数据库管理系统必须提供并发控制机制。并发控制机制的好坏是衡量一个数据库管理...
  • 使用redis解决并发操作问题

    千次阅读 2017-06-12 20:32:42
    在日常的开发中,有时我们会遇到这样的场景:多个人对同一个数据进行修改操作,导致并发问题发生。这个问题可以通过悲观锁来解决,但是悲观锁也是有限制的,在某些场景中是不适应的,因为和数据的耦合度太高了,可能...
  • 数据库并发操作可能造成的问题

    千次阅读 2018-06-21 23:29:02
    https://blog.csdn.net/bigpudding24/article/details/47393443
  • golang并发操作变量安全问题

    千次阅读 2018-08-16 20:18:51
    count++ //count不是并发安全的 wg.Done() }(&wg,i) } wg.Wait() fmt.Println(time.Now().Sub(t)) fmt.Println("count====>",count) //count的值 fmt.Println("exit") } func test2() { var wg ...
  • java中List的并发操作

    千次阅读 2016-12-21 22:28:15
    前言java提供了好多数据结构,很方便。从用到这些东西的那天起就在考虑过并发,并发是一个...此文是篇List并发操作的笔记,不贴代码而是罗列过程和总结。 ListList常用的是ArrayList和LinkedList。 我参考的源码出自an
  • 事务是并发控制的基本单位,保证事务的ACID特性是事务处理的重要任务,而事务ACID特性可能遭到破坏的原因之一就是多个事务对数据库的并发操作造成的。 并发操作带来的数据不一致性重要有丢失修改,不可重复读,读...
  • (1)丢失更新  当两个或多个事物读入同一数据并修改,会发生丢失更新问题,即后一个事物更新的结果被前一事务所做更新覆盖 即当事务A和B同事进行时,事务A对数据已经改变但并未提交时B又对同一数据进行了修改...
  • 数据库并发操作带来的数据不一致性主要有, 丢失修改,不可重复读(里面包括幻读),读脏数据 其中不可重复读有三种情况,后两种称为幻读,幻读和不可重复读的区别是幻读是对数据的删除增添,不可重复读是数据的...
  • Android数据库并发操作解决思路

    千次阅读 2017-04-05 17:07:47
    一种Android数据库的并发操作解决思路
  • 我在做一个java的文件监听上传。现在主要的问题就是并发操作。主要解决监听过程中的许多文件上传问题。最好用队列,因为如果监听时间太久会影响性能。谁能给我一点思路。现在想的是用ArrayBlockingQueue
  • 乐观锁: 使用一个version字段标识数据的当前版本,每次更新数据的时候同时更新version = version + 1,where条件中需要加上version等于当前事务查询出的数据的version,如果version的值已经改变,则更新失败。...
  • 下面先来看一个例子,说明并发操作带来的数据的不一致性问题。 考虑飞机订票系统中的一个活动序列: 甲售票点(甲事务)读出某航班的机票余额A,设A=16. 乙售票点(乙事务)读出同一航班的机票余额A,也为16. 甲售票点...
  • Java的线程同步 & 并发操作

    千次阅读 2016-07-21 14:45:10
    并发:CUP在同一时间或同一时段内只能执行一件事情,而不同时件执行时,切换得十分快速,因为CUP的频率非常高,切换的速度人根本感受不出来。 同步:同步是多个任务进行时,按照一定的规律进行着。 ...
  • MYSQL多线程并发操作同一张表同一个字段的更新问题? 可以用乐观锁方案: 在表里增加个字段,版本号字段 每次更新前先从数据库里获取这个版本号的值,然后更新时要同步更新版本号+1,并且增加更新条件版本号=查询...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,003,347
精华内容 401,338
关键字:

并发操作