备忘录--关于线程和IO知识
因为自己还在出差中,没时间深入学习,最近工作里又有对一些技术的思考,所以这里记录下来,等回去有时间可以按照这个思路进行学习,这里主要起到备忘的作用。
1.线程难学难在我们没有理解操作系统里的线程设计机制,最近我学习了两个关于线程设计的原理,一个是分时系统里线程是按照时间片进行执行的,可是多线程里大部分线程都不能在一个时间片里全部执行完毕,那么时间片就要轮换,这里其实还有个问题就是存放线程的队列是如何设计的,轮换线程时候它有何种算法。当操作系统是单核时候也许理解这些很容易,那么当操作系统是多核时候,问题来了,操作系统又是如何在多核环境下调度线程的呢?而且现在的服务器基本都是多核的,这个问题需要好好研究下。
2.程序执行都是内存和CPU共同作用的结果,线程安全问题就是一个线程执行完时间片之后,其实它并没有结束,而是休眠起来等待下一次的调度,这个时候内存的数据是被处理一部分或者说这些数据还没算完,如果说另外一个线程再去操作了这些数据就有可能导致内存数据发生变化,从而导致最终结果出错,这就是线程安全问题,所以一般线程安全问题的解决方案就是给数据上锁,这个锁只会被一个线程拥有,那么当时间片轮换时候,其他线程碰到这个加锁的数据就会停止操作。所以在java里锁都是设置在Object对象上,也就是锁都是加在数据上。现在的jdk里对数据加锁更加细粒度话,这个细粒度是何种原理设计的,这个需要好好研究。
3.原子操作就是指不会被时间片打断的操作,换个说法就是CPU在一个时间片下一定要执行完毕的操作,其本质就是CPU里一个不可分割的算子,基础数据类型的操作往往都是原子操作例如int的加减乘除,但是java现在把很多复杂对象也做成这样了,这个问题就需要我回去细细分析,这些对象的原子类到底是CPU拥有的复杂算法了?还是讲锁直接封装在了对象上了。
4.多核编程里有一点是可以肯定的,那就是多个核心的CPU是可以并行处理的,所以多核CPU才有真正的并行操作,但是问题来了,CPU可以多核,内存可不是多核啊,那么这个时候给内存数据加锁,以及原子操作会有何种变化。单核系统的并行操作是一个伪并行,但是多核的并行有可能是真并行,那么这个时候真正并行的内存访问同一份数据就会有问题,这个细节我现在实在不清楚,需要抽时间好好研究下。此外我们编写程序有的对象是专门存储数据,其实算法例如循环,分支也是会被存储在内存里,告诉CPU该如何计算,那么这些不同类型的存储数据到底在内存里该如何分配了,它们到底是何种类型,这个就需要我进一步研究jvm的内存模型,自己能提出这个问题很重要,我能感受到这个问题也就说明我不再是糊里糊涂的去看jvm的相关知识了。
5.听朋友说一些高级的CPU还有超线程技术,可以模拟单核真并发,这个也需要研究下。
6.关于线程调度机制,单核下或许我并不想深究这个问题,但是多核下的调度呢?如果我们不能理解多核调度,那么写出优秀的多核多线程会有什么隐患呢?
7.关于IO的问题,IO,内存和CPU这三者的效率相比,IO实在慢的太多,当程序需要很高效率,同时又是IO密集型操作,那么处理IO,内存和CPU关系就会显得尤为重要,我最近发现IO难学其实和线程难学是一直的,要理解深入IO就的深入了解操作系统的IO操作原理,例如IO多路复用,selector,poll,epoll,我最近想抽点时间先查阅下相关资料。
以上都是备忘之需。最后聊下现在心情,坏心情:实在讨厌出差,特别是到现在还不知道啥时候能回家的出差,每次都觉得下星期能回,现在感觉估计11月都回不了了,等以后有机会一定找个不出差或者少出差的工作。
好心情:每天都要看看新闻,希望武汉越来越好,最近发现武汉房子买的越来越好,这就说明很多外来人口来武汉,我想如果武汉能保持这样势头,武汉的未来一定不错,武汉不错,我这样的大头百姓也会有更多机会了。
备忘录--关于线程和IO知识的更多相关文章
- java开发知识IO知识之输入输出流以及文件
目录 java开发知识IO知识之输入输出流以及文件 一丶流概述 二丶输入流讲解 InputStream类. 1. 输入流以及类层次结构 2.文件操作.使用输入流读取 三丶输出流 OutputStrea ...
- mysql 原理 ~ 线程与IO
一 简介:今天来聊聊具体的线程和IO 二 具体线程与作用 1 master thread mysql的主要工作触发线程 1 redo and binlog日志 2 合并插入缓冲. ...
- Replication基础(六) 复制中的三个线程(IO/SQL/Dump)
Reference: https://blog.csdn.net/sun_ashe/article/details/82181811?utm_source=blogxgwz1 简介在MySQL复制技 ...
- java线程方面的知识
java中单继承,多实现的: 若为多继承,那么当多个父类中有重复的属性或者方法时,子类的调用结果会含糊不清,因此用了单继承. 为什么是多实现呢? 通过实现接口拓展了类的功能,若实现的多个接口中有重复的 ...
- 第40节:Java中的IO知识案例
流是一连流串的字符,是信息的通道,分输出流和输入流. IO的分类 第一种分:输入流和输出流. 第二种分:字节流和字符流. 第三种分:节点流和处理流. Java中流的分类: 流的运动方向,可分为输入流和 ...
- 线程池ThreadPool知识碎片和使用经验速记
ThreadPool(线程池)大概的工作原理是,初始时线程池中创建了一些线程,当应用程序需要使用线程池中的线程进行工作,线程池将会分配一个线程,之后到来的请求,线程池都会尽量使用池中已有的这个线程进行 ...
- core—线程与IO
CPU执行线程期间,从内存里调用指令,然后运行,这些指令有可能要从硬盘里面,网络里,读取数据.我们知道在计算机硬件体系中,从内存读取数据的速度会大于从硬盘或网络里面的速度.线程必须要等到硬盘里面的数据 ...
- Java阶段性测试--知识点:数组,面向对象,集合、线程,IO流
#Java基础测试 涉及知识点:数组,面向对象,重载,重写,继承,集合,排序,线程,文件流 一.多项选择题(可能是单选,也可能是多选) 1.下列标识符命名不合法的是( D ). A.$_Name ...
- Tomcat系列(9)——Tomcat 6方面调优(内存,线程,IO,压缩,缓存,集群)
核心部分 内存 线程 IO 压缩 缓存 集群 一.JVM内存优化 Tomcat内存优化,包括内存大小,垃圾回收策略. Windows 下的catalina.bat,Linux 下的catalina.s ...
随机推荐
- fatal error LNK1169: 找到一个或多个多重定义的符号
申明全局变量,全局函数一定要在cpp中申明,其他类引用该全局变量就include该cpp的h文件,然后extern一下就好了.否则容易出现该重复定义错误. 这个"容易"是如何解释的 ...
- Python-面向对象(类)一
一.如何创建类 class cls: pass 二.创建方法 构造方法: __init__(self, arg) obj = 类('a1') 普通方法: obj = 类('xxx') obj.普通方法 ...
- 【学习篇:他山之石,把玉攻】Ajax请求安全性讨论
在开发过程中怎样考虑ajax安全及防止ajax请求攻击的问题. 先上两段网摘: Ajax安全防范的方法: 判断request的来源地址.这样的方式不推荐,因为黑客可以更改http包头,从而绕过检测. ...
- MR操作
MR操作————Map.Partitioner.Shuffle.Combiners.Reduce 1.Map步骤 1.1 读取输入文件,解析成k-v对,其中每个k-v对调用一次map函数 1.2 写自 ...
- PHP开发笔记:二维数组根据某一项来进行排序
比如说我们现在有一个二维数组: $arr = array( ‘d' => array(‘id' => 5, ‘name' => 1, ‘age' => 7), ‘b' => ...
- QT生成流水账号
在做数据库课程的时候,要生成财务表,每条记录应该有一个流水账号. 实现思路: 当前时间+随机一个四位数 上代码 //生成流水号 QString adminRecharge::getNumber() { ...
- 解决安装mysql的”A Windows service with the name MySQL already exists.“问题
如果以前安装过mysql,卸载重装,很可能会碰到"A Windows service with the name MySQL already exists."这样的提示.即服务已经 ...
- PHP isset() empty() isnull() 的区别
<? isset - 检测变量是否设置 注意: isset 检测变量是否设置,并且不是 NULL. 若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE: empty ...
- Asp.net中static变量和viewstate的使用方法(谨慎)
在.Net平台下进行CS软件开发时,我们经常遇到以后还要用到某些变量上次修改后的值,为了简单起见,很多人都习惯用static来定义这些变量,我也是.这样非常方便,下一次调用某个函数时该变量仍然保存的是 ...
- HDU5977 Garden of Eden(树的点分治)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5977 Description When God made the first man, he ...