备忘录--关于线程和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 ...
随机推荐
- Java源码之 java.util.concurrent 学习笔记01
准备花点时间看看 java.util.concurrent这个包的源代码,来提高自己对Java的认识,努力~~~ 参阅了@梧留柒的博客!边看源码,边通过前辈的博客学习! 包下的代码结构分类: 1.ja ...
- mac个人设置
修改spotlight快捷键 mac默认的command+space和我windows下的习惯冲突,修改为ctrl+space 删除输入法切换的快捷键 因为我不需要切换不同语言的快捷键.中英文切换直接 ...
- NetMQ(二): 请求响应模式 Request-Reply
ZeroMQ系列 之NetMQ 一:zeromq简介 二:NetMQ 请求响应模式 Request-Reply 三:NetMQ 发布订阅模式 Publisher-Subscriber 四:NetMQ ...
- Intel.parallel.studio.xe.2015.Update.2.ISO-TBE 下载
磁力链下载点我 还有linux版本 Intel.parallel.studio.xe.2015.Update.1.LINUX.ISO-TBE 收集自网络,要跨请跨原作者,谢谢.
- CSS3简单的栅格系统
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Drools 查询学习
Drools 查询学习查询以 query 关键字开始,以 end 关键字结束,在 package 当中一个查询要有唯一的名称,查询的内容就是查询的条件部分,条件部分内容的写法与规则的 LHS 部分写法 ...
- win10控制台程序printf死锁问题
昨天遇到一个奇葩的问题,服务器正常运行但经常出现客户端无法连接的问题.我很好奇,在accept返回的地方断点,发现无法accept了.这就怪了,以前从没出现过这种情况.服务器网络用的asio,无法ac ...
- MVC中RenderBody的工作原理
A)什么是RenderBody 根据MSDN的解释(http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US& ...
- Python实战 :2017国考职业表excel转数据库,再查询生成excel
最近看2017年国考的职业表,多而杂,不好过滤我想要的信息,特此把它转成Sqlite3数据库,再从数据库里把查询结果导出成excel,方便找职业. (后附上整套代码) 环境:python2.7 x ...
- post与get区别
学习中,遇到get和post的提交方式,搜索整理了一下其区别: 关键词: PHP,Post,Get,区别 转载文章一: PHP中post与get的区别 Post 方法通过 HTTP post 机制,将 ...