JAVA并发编程(一)(基于计算机底层.jvm内存模型.mysql(数据搬运))
来源:互联网 发布:赌博游戏源码 编辑:程序博客网 时间:2024/06/07 16:50
ps:前因,一直在写后台系统是没有分析和需求来做并发的思考的。但是最近接触了jvm和并发的一些知识,使我对计算机底层已经他们之间的交互有了一些了解,使我对蒙了两年多的那层美丽面庞揭开了一点可以探索的起点。
cpu.内存.磁盘
目前的计算机以摩尔定律(以超性价比的时间增长单机的性能),所以现在的我们尽量的压榨计算机的性能,尽量的不让计算空闲下来。就要使用计算机的多核处理能力。
大多数在大学学过计算机原理的同学们都知道,计算机的cpu.寄存器.内存.和磁盘。CPU处理的数据,最终要落地到磁盘,因为现在是通电式运行计算机,那么计算机没有电,内存中的数据,各级缓存中的数据都会消失。所以需要落地到磁盘。
由此可以引出,各处数据暂存之地,是有IO交互的。
问题
在带来便捷的同时,也引发了很多问题。比如一个线程读取内存中的数据放到缓存中,在该线程的缓存行中记录该缓存的信息,下次需要读取相同位置的数据,就会从缓存中读取数据,也就是缓存命中。但是这条数据,不能确定是最新的,同样该线程修改的数据,也会导致写命中,使得各线程直接无法实施的共享数据。
总结
以前我了解学习jvm,只是单纯的知道,jvm的内存分区,书中的图片说这些是数据共享的区域,这里的数据会引起并发的时候出现的问题。对计算机的具体做法不了解,使我一直以来,对这些说法,都停留在表面的认识,这也是一直挡在我面前的那层“纱”了。
昨晚,我顺着这条线索思考,我们使用的数据库.文件系统。需要我们关注的多线程共享数据的地方,这和刚才我所理解的“告诉缓存区”,是一个道理的。
java的编程中给我们提供volatile关键字,使得数据的更新和获取都是最新的,也提供给我们synchronized 关键字,使得对使用资源的锁定,在被占用锁定的同时,其它的线程无法使用。同样的思考,我们在对数据库中的数据使用,我们可以使用乐观锁,悲观锁。Inoodb引擎给我们提供了事务处理,解决并发给我们带来便利的问题。
所以我们站在这个角度去想问题,会对我们在编程中以及操作数据库可能会出现的问题,有更好的解决问题的出发点。
ps:java给我们提供了很多并发编程的工具,使得并发编程并不是很遥远,数据库的存储引擎,也都可以找到很多的资料去学习。所以希望大家跟我一样认真的学习,主动的思考。让自己不浪费光辉的岁月。
昨天晚上画了一张图,还没有整理,有点乱,周末整理一下,发出来。
- JAVA并发编程(一)(基于计算机底层.jvm内存模型.mysql(数据搬运))
- Java并发编程系列(一):Java并发内存模型
- 【Java并发编程】(一)——Java内存模型
- Java并发编程(一) Java内存模型
- 并发编程笔记(三):Java 内存模型(一)
- 深入学习java并发编程:内存模型(一)基础
- 【JVM】(一):Java内存模型
- java并发编程(二)《内存模型》
- <java并发编程的艺术>读书笔记-第三章java内存模型(一)
- java内存模型(java 并发编程基础)
- java并发编程---Java内存模型(JMM)
- Java并发编程(四)Java内存模型
- Java并发编程(三)Java内存模型及volatile
- java并发编程的艺术(三)-----java内存模型
- (八)java并发编程--java内存模型
- Java并发编程:volatile关键字解析(一.内存模型的相关概念)
- 【JVM调优(一)】----JAVA内存模型抽象结构
- JVM学习笔记(一)——Java内存模型
- 每周LeetCode算法题(三):Next Permutation
- 大数据Flume_06
- Spring配置文件详解
- Linux上tensorflow安装
- pycharm中使用tensorflow models库中的PTB reader
- JAVA并发编程(一)(基于计算机底层.jvm内存模型.mysql(数据搬运))
- 最长公共子序列(动态规划)
- FreeMarker 项目的建立
- poj 2054:Color a Tree 贪心
- MQL5语言基础(二)
- signal
- iOS runtime ~ class_copyPropertyList与class_copyIvarList区别
- 外网能访问内网的WEB服务器上的站点方法
- 导入数据到数据库出现data truncated for column 错误