并发中的数据依赖性

作者: 翁正存 | 来源:发表于2018-09-01 17:20 被阅读95次

Q:什么是数据依赖性?

A:如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。

举个例子:a初始化为0,b初始化为 0,c初始化为 1

写-读:a=1;b=a; //将读写操作顺序调换为b=a;a=1,则结果由a=b=1变为a=1,b=0,所以,写-读操作存在数据依赖。

写-写:a=1;a=2;//存在数据依赖

读-写:a=b;b=1;//存在数据依赖

读-读:a=c;b=c;//不存在数据依赖

      单核单线程的顺序执行的程序,编译器和CPU会依据数据依赖性,保证程序的按正确的顺序执行,但是,编译器和CPU对多核或者多线程的场景,不提供默认的数据依赖性,需要码农提供额外的信息,让CPU和编译器做的指令重排序既能提升程序性能,又能保证正确性。在Java中,这些信息就是线程-锁模型提供的各种信号量。

      通过改变共享内存变量来通信的模型,最大的痛点在于数据之间的状态依赖。如果都是读操作,并发任务就成了并行,各个处理器中的数据不存在依赖性,不存在诡异的内存问题。涉及写操作的并发场景,之所以复杂,个人觉得问题在于我们试图用代码去模拟真实的世界,而真实的世界是很复杂的,由很庞大的个体组成数据集是多样的,想以个人的脑力,写出能处理所有个体的随机需求的代码,简直就是痴人说梦!我们码农能做的,就是考虑尽可能多的异常情况,做好异常处理和补偿机制。

相关文章

  • 并发中的数据依赖性

    Q:什么是数据依赖性? A:如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据...

  • 数据库-并发调度(未完结)

    数据库 • 数据库的并发调度 由于数据库中的数据具备共享性,所以数据库中的数据就支持了多个用户的访问 • 并发调度...

  • MySQL中的锁2-事务隔离级别

    数据库中并发存在的问题 数据库能够让应用程序并发访问,在并发访问数据库实例过程中可能会出现以下4种现象。 丢失更新...

  • 数据访问中的并发

    数据库并发情况(database-level concurrency) lost update 第一类丢失更新 事...

  • 一文理解Mysql MVCC

    MVCC 就是多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。 为...

  • 你应该了解的MySQL锁分类

    MySQL中的锁 锁是为了解决并发环境下资源竞争的手段,其中乐观并发控制,悲观并发控制和多版本并发控制是数据库并发...

  • 【译】PostgreSQL 14 B-Tree Index:通过

    前言 对 PostgreSQL 中数据的并发访问由多版本并发控制 (MVCC) 模型管理。 为每个 SQL 语句维...

  • 数据库中的并发

    简介 所谓并发操作,是指在多用户共享系统中,许多用户可能同时对同一数据进行操作。 并发操作带来的问题是数据的不一致...

  • 0824 A

    并发冲突 出现情况: 1.页面并发冲突:当后台上传数据后,会发生不同页面数据相同的情况 此bug在很多开源系统中...

  • MySQL 锁的一些概念

    在数据库系统中,每时每刻都会对数据库进行大量查询和数据操作,MySQL通过锁机制来进行并发控制 读写锁 在处理并发...

网友评论

    本文标题:并发中的数据依赖性

    本文链接:https://www.haomeiwen.com/subject/bvsuwftx.html