备忘录--关于线程和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 ...
随机推荐
- Beginning Scala study note(2) Basics of Scala
1. Variables (1) Three ways to define variables: 1) val refers to define an immutable variable; scal ...
- google开发者工具调试技巧
http://blog.sina.com.cn/s/blog_60a4fcef0102v3vt.html
- 老生长谈的$.extend()方法
jq的extend()是jq插件扩展很重要的部分,到这里证明是可以自己在jq的基础上,分为两种方法去扩展或开发,为jq本身添加一个方法,可以理解成扩展静态方法和自定义方法. 今天有看到一篇帖子,对这部 ...
- 城管停车执法打印APP 移动云POS 现场打印告知单-执法平台+智能POS客户端系统
市城管局城管支队工作人员使用最新配备的城管执法手持终端对便道违法停放车辆进行拍照取证. 城管执法手持终端具备拍照.现场打印.无线传输等功能,执法人员只要在该终端登录,即可随时实现对违停车辆的拍照取证. ...
- 【转】Oracle执行计划解释
Oracle执行计划解释 一.相关的概念 Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物 ...
- shell脚本生成限定范围的随机数
#!/bin/bash +)) 这串代码实现了随机生成从1~50之间是数 这串代码特别简单,就是利用RANDOM这个随机数生成器进行取余就能够实现,至于为什么取余时需要+1是因为在取余时如果被整除那么 ...
- Curator Cache
1.Curator Cache 与原生ZooKeeper Wacher区别 原生的ZooKeeper Wacher是一次性的:一个Wacher一旦触发就会被移出,如果你想要反复使用Wacher,就要在 ...
- jsonp帮助你知道你关注的他或她喜欢什么歌曲
利用腾讯提供的QQ音乐API,返回一段对方在QQ音乐收藏的歌曲名称json数据,并对该json做解析,就能知道你的那个他或她喜欢听什么歌曲了,然后你就知道他/她的品位了,然后就自己看着办了,嘿嘿.我只 ...
- centos 创建swap 交换分区
阿里云的服务器是没有交换分区的,如 [www-data@iZbp1ivdq1ie5lmrhp13kjZ ~]$ free -m total used free shared buff/cache av ...
- 轻松3步实现c#windowsform窗体美化
1.需要下载IrisSkin4.dll或者IrisSkin2.dll和ssk皮肤文件. 2.添加引用IrisSkin4.dll或者IrisSkin2.dll到项目中,将下载好的ssk皮肤文件复制到项目 ...