因为自己还在出差中,没时间深入学习,最近工作里又有对一些技术的思考,所以这里记录下来,等回去有时间可以按照这个思路进行学习,这里主要起到备忘的作用。

  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知识的更多相关文章

  1. java开发知识IO知识之输入输出流以及文件

    目录 java开发知识IO知识之输入输出流以及文件 一丶流概述 二丶输入流讲解 InputStream类. 1. 输入流以及类层次结构 2.文件操作.使用输入流读取 三丶输出流 OutputStrea ...

  2. mysql 原理 ~ 线程与IO

    一 简介:今天来聊聊具体的线程和IO 二 具体线程与作用 1 master thread    mysql的主要工作触发线程 1 redo and binlog日志      2 合并插入缓冲.    ...

  3. Replication基础(六) 复制中的三个线程(IO/SQL/Dump)

    Reference:  https://blog.csdn.net/sun_ashe/article/details/82181811?utm_source=blogxgwz1 简介在MySQL复制技 ...

  4. java线程方面的知识

    java中单继承,多实现的: 若为多继承,那么当多个父类中有重复的属性或者方法时,子类的调用结果会含糊不清,因此用了单继承. 为什么是多实现呢? 通过实现接口拓展了类的功能,若实现的多个接口中有重复的 ...

  5. 第40节:Java中的IO知识案例

    流是一连流串的字符,是信息的通道,分输出流和输入流. IO的分类 第一种分:输入流和输出流. 第二种分:字节流和字符流. 第三种分:节点流和处理流. Java中流的分类: 流的运动方向,可分为输入流和 ...

  6. 线程池ThreadPool知识碎片和使用经验速记

    ThreadPool(线程池)大概的工作原理是,初始时线程池中创建了一些线程,当应用程序需要使用线程池中的线程进行工作,线程池将会分配一个线程,之后到来的请求,线程池都会尽量使用池中已有的这个线程进行 ...

  7. core—线程与IO

    CPU执行线程期间,从内存里调用指令,然后运行,这些指令有可能要从硬盘里面,网络里,读取数据.我们知道在计算机硬件体系中,从内存读取数据的速度会大于从硬盘或网络里面的速度.线程必须要等到硬盘里面的数据 ...

  8. Java阶段性测试--知识点:数组,面向对象,集合、线程,IO流

    #Java基础测试 涉及知识点:数组,面向对象,重载,重写,继承,集合,排序,线程,文件流 一.多项选择题(可能是单选,也可能是多选) 1.下列标识符命名不合法的是(   D  ). A.$_Name ...

  9. Tomcat系列(9)——Tomcat 6方面调优(内存,线程,IO,压缩,缓存,集群)

    核心部分 内存 线程 IO 压缩 缓存 集群 一.JVM内存优化 Tomcat内存优化,包括内存大小,垃圾回收策略. Windows 下的catalina.bat,Linux 下的catalina.s ...

随机推荐

  1. html视频播放器的代码 及其参数详解

    播放视频最实用的一段代码是: 程序代码 <"></embed></object> 其他的看参数自己修改吧 .avi格式 代码片断如下: 程序代码 < ...

  2. Orchard教程索引页

    Orchard官方教程(译)索引 链接标注 原文 则表示未译,其他带有中文标题的表示译文内容. 入门 安装Orchard--Installing Orchard 通过zip包手动安装Orchard-- ...

  3. Linux上搭建Hadoop2.6.3集群以及WIN7通过Eclipse开发MapReduce的demo

    近期为了分析国内航空旅游业常见安全漏洞,想到了用大数据来分析,其实数据也不大,只是生产项目没有使用Hadoop,因此这里实际使用一次. 先看一下通过hadoop分析后的结果吧,最终通过hadoop分析 ...

  4. 安装openssl 扩展的时候出现Cannot find config.m4. Make sure that you run '/usr/local/php/bin/phpize' in the top level source directory of the module的解决方法

    进入php源码包目录:cd /usr/local/php-5.6.25/ext/openssl 执行命令:  cp ./config0.m4 ./config.m4 即可

  5. oracle中批量生成字段类型的脚本

    select ' ALTER TABLE '||table_name || '  MODIFY( '|| column_name || ' DATE );' from USER_TAB_COLUMNS ...

  6. div内文字超出换行问题

    1.强制换行: div的样式加上: word-wrap:break-word;word-break:break-all; 2.在文字中间加入建议换行标志<wbr>可以每隔几个字符加一个,

  7. Android之获取数据库路径

    如果数据库名为:“ifoData.db”,则它的路径求法为 String pathDatabase=Mcontext.getDatabasePath("ifoData.db").g ...

  8. bootstrap之HTML模板

    bootstrap之HTML模板 <!DOCTYPE html> <html> <head> <title>Bootstrap 模板</title ...

  9. 误删/usr文件夹解决办法

    http://blog.chinaunix.net/uid-2623904-id-3044156.html http://www.centoscn.com/CentOS/Intermediate/20 ...

  10. 如何使用其他文件中定义的类Python

    我在文件a.py中定义了一个类class A(object),现在想在b.py中的类B中某个函数中创建一个A的对象,需要如何操作呢? 我在b的头加了import a.py然后使用语句 obj = A( ...