0%

云计算

云计算的概念

  • 对于云计算的理解基本上可以认为是资源到架构的全面弹性
    • 资源一般特指 CPU(计算)、Mem(存储)和 IO (网络)三大资源,云计算的做法就是将闲置的这些资源充分利用起来,租给用户使用,尤其是可以提供弹性的服务提供
      • 所谓的云计算的弹性可以包括时间灵活性与空间灵活性
        • 时间灵活性:想什么时候要就什么时候要,需要的时候一点就出来了
        • 空间灵活性:想要多少就有多少。需要一个太很小的电脑,可以满足;需要一个特别大的空间例如云盘,云盘给每个人分配的空间动不动就很大很大,随时上传随时有空间,永远用不完,也是可以满足的
阅读全文 »

常见的IO模型

同步与阻塞

  • IO模型是按照同步与阻塞来区分的,所以需要首先理解同步与阻塞的概念—-这部分对于同步与阻塞的概念的理解是很重要的

  • 首先,可以认为一个IO操作包含两个部分:

    • 发起IO请求(阻塞与非阻塞)
      • 在发起IO请求时,对于NIO来说通过channel发起IO操作请求后,其实就返回了,所以是非阻塞,如果发出请求后一直等待结果就是阻塞的
    • 实际的IO读写操作(同步与异步)
      • 在实际的IO读写操作,如果操作系统帮你完成了再通知你,那就是异步,如果发起请求的一方不断的轮询结果并需要自己执行数据从内核态到用户态的转移工作的就叫做同步
阅读全文 »

并发编程

  • 并发编程的三大特性(或者说是实现并发安全的三大特性)

    • 原子性
      • 一个的操作或者多次操作,要么所有的操作全部都得到执行并且不会收到任何因素的干扰而中断,要么所有的操作都执行,要么都不执行。synchronizedLock可以保证代码片段的原子性,Atomic原子类可以保证一个变量、数组、对象、对象属性的读写的原子性
        • 注意与同步问题区分,原子性问题不是同步问题
    • 可见性
      • 当一个变量对多线程共享变量进行了修改,那么另外的线程都是立即可以看到修改后的最新值。volatile 关键字可以保证共享变量的可见性,synchronized可以保证整体的可见性,也就是在同步代码块内对共享变量的修改,在退出同步代码快释放锁后立即可见(以上两者使用的其实都是内存屏障)final关键字也可以实现可见性,实现安全发布
    • 有序性
      • 代码在执行的过程中的先后顺序,Java 在编译器以及运行期间的优化,代码的执行顺序未必就是编写代码时候的顺序,并发编程应能保证无论是单线程还是多线程中的指令执行的逻辑顺序与代码编写顺序一致。volatile 关键字可以禁止指令进行重排序优化;synchronized也可以实现有序性,但是其并不是阻止同步代码块内的指令重排序(换句话说就是同步代码快内可能出现指令重排),而是保证同步代码快整体的有序
阅读全文 »

Unsafe类解析

概述

  • Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用
  • 但由于Unsafe类使Java语言拥有了类似C语言指针一样操作内存空间的能力,这无疑也增加了程序发生相关指针问题的风险。在程序中过度、不正确使用Unsafe类会使得程序出错的概率变大,使得Java这种安全的语言变得不再“安全”,因此对Unsafe的使用一定要慎重。这也是Unsafe类得名的由来
阅读全文 »