作者:Swift社区
这篇文章探讨了AI在医疗影像分析中的应用,重点介绍了卷积神经网络(CNN)等核心算法及其在实际案例中的成功应用,如谷歌和IBM的医疗影像诊断系统。文章还提供了基于TensorFlow的CNN医疗影像分类Demo,展示了数据处理、模型定义、训练和主函数的实现步骤。通过这些内容,读者可以深入了解AI在医疗影像分析中的潜力,并掌握相关技术的实际应用。
阅读了文章:https://blog.csdn.net/luoyang_java/article/details/125296886
并且参考了官方文档:https://dev.mysql.com/doc/refman/8.4/en/performance-schema-metadata-locks-table.html
我们一般使用performance_schema.data_locks,它是MySQL 中的一个性能模式(Performance Schema)表,用于收集和显示关于数据锁(Data Locks)的详细信息。这个表提供了关于数据库中锁定的实时信息,包括锁定的类型、锁定的对象、持有锁的线程以及等待锁的线程等。
作用是:唯一标识一个锁,由namespace + dbname + tablename组成。
任何 DML 语句都会加 MDL,这是保障 DDL 和 DML 一致性的基础,MDL 类型的兼容性矩阵如下(+为兼容,-为不兼容):
可以看到大部分共享锁之间是兼容的,但是 SU 和 SU 不兼容,这有效保证了一个表的多个 DDL 之间的操作是互斥,因为 SU 锁能升级为 X 锁,这种升级的方式是为了在没有真正执行到变更表结构的流程前依旧能保证读操作的并发性,所以 SU 能兼容 DML 又能阻塞 DDL。
除了给某个对象加锁和加什么类型的锁外,还需要确定加锁时长,MySQL 支持三种 MDL 持有时长:
InnoDB 存储引擎既支持表锁,也支持行锁。
表锁:占用资源较少,但粒度很粗。有时候你仅仅需要锁住几条记录,但使用表锁的话相当于为表中的所有记录都加锁,所以性能比较差。
行锁:粒度更细,可以实现更精准的并发控制。
我们通常说的表锁说的就是引擎表级锁,InnoDB 有 5 种表级锁:IS、IX、S、X、AUTO- INC。
S 锁又名读锁,X 锁又名写锁,我们在上面介绍 MySQL 表锁时提到的引擎表锁说的就是这里的 S 锁和 X 锁,当使用 lock tables t read 就会加 S 锁,当使用 lock tables t write 就会加 X 锁。
除上述情况之外,一般都不会使用 S 锁和 X 锁。
在对表执行 select/insert/delete/update 语句时, InnoDB 存储引擎是不会为表添加表级别的 S 锁或者 X 锁的。即便是表没有索引也不会使用 S 锁和 X 锁,原因会在后面讲到。所以 S 锁和 X 锁在 InnoDB 中的地位是比较尴尬的,用处不大。
IS 锁又名意向读锁,IX 锁又名意向写锁,当我们在对使用 InnoDB 存储引擎的表的某些记录加行级读锁之前,就需要先在表级别加一个 IS 表锁,当我们在对使用 InnoDB 存储引擎的表的某些记录加行级写锁之前,那就需要先在表级别加一个 IX锁 。
IS 锁 和 IX 锁 的使命只是为了后续在加表级别的 S锁 和 X锁 时判断表中是否有已经被加锁的记录,以避免用遍历的方式来查看表中有没有上锁的记录。也就是说当对表数据进行操作时就会加意向锁。写操作加 IX 锁,读操作加 IS 锁。
在使用 MySQL 过程中,我们可以为表的某个列添加 AUTO_INCREMENT 属性,之后在插入记录时,可以不指定该列的值,系统会自动为它赋上单调递增的值。
表级锁的兼容性矩阵如下(+为兼容,-为不兼容):
整个 InnoDB 存储引擎,最重要的就是行级锁,同时行级锁也是最容易观察的锁。InnoDB 有 4 种行级锁:Record Lock、Gap Lock、Next-Key Lock、Insert Intention Lock。在代码层面上它们还有以下叫法:
Record Lock 即记录锁,该锁只能加在一行记录的索引上,如果没有记录就不会有记录锁。
记录锁有 S 锁 和 X 锁 之分的,叫读记录锁和写记录锁,当一个事务给一条记录添加读记录锁后,其他事务也可以继续在该记录上添加读记录锁 ,但不可以添加写记录锁;
当一个事务给一条记录添加写记录锁后,其他事务既不可以在该记录添加读记录锁 ,也不可以添加写记录锁。
读记录锁比较特殊,因为 MVCC 存在,读操作是可以不加锁的。
在讲解 MVCC 的时候,有提到过 REPEATED READ 隔离级别下是不能解决幻读的,但是通过主动加锁是可以避免幻读的。
幻读就是前一次查询不存在的东西下一次查询出现了,其实就是在事务 A 中的两次查询之间,事务 B执行插入操作,被事务 A 感知到了。所以要解决幻读就是要阻塞插入操作。
InnoDB 专门提供了一个 Gap Lock,又称间隙锁,通过锁住一个数据区间来解决幻读的问题。
当我们即要锁住某条记录,又想阻止其他事务在该记录前面的间隙插入新记录,这个时候就会使用 Next-Key Lock,它就是一个 Record Lock 和 Gap Lock 功能的集合,它既能保护该条记录,又能阻止别的事务将新记录插入被保护记录前面的间隙。也就是左开右闭区间(其他数据库还有 Previous-Key Lock,原理一样,只是左闭右开而已)
Insert Intention Lock 即插入意向锁,它是特殊的 Gap Lock 锁,专为 Insert 操作设计。
MySQL 中涉及到两个大层面的锁:server 层锁和存储引擎锁,又涉及到各种小层面,包括 MDL、MySQL 表锁、InnoDB 表锁以及 InnoDB 行锁
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。