其中主要讲解内容如下:

一次IO的完整过程为:用户空间 --调用-- read方法---内核空间接收到任务后 -- 读取系统磁盘内容 -- 填充 --- 内核空间 -- 内核缓存空间填充满  --  将内核中缓存内容  --  复制 -- 指定用户空间

总结一次IO涉及到两个阶段:准备数据阶段、将数据从内核空间读取到用户空间

IO五种基本模型

1. blocking I/O 阻塞IO

      该模型在数据准备阶段、将内核数据复制到用户空间这两个阶段都会处于线程阻塞状态

2.  nonblocking IO  非阻塞IO

      在模型中用户空间---调用---read  ---  内核空间--- 内核空间立刻返回(未准备好) ,但用户空间会不断向内核空间发出询问 --  内核空间发出数据准备完成状态  -- 用户进程获取执行权限

    该模型在多核时会突显其优势

3. IO multiplexing 多路复用IO

    多路复用IO,采用的是select/epoll的方式,可以使用单个线程来监控多个网络连接IO,当有数据到达时,它会通知到对应的用户进程。当用户进程调用select时,整个进程是处于阻塞态的,内核会检测select所负责的所有Socket,当其中任意一个Socket数据准备好了,select会返回一个readable的信号,此后用户进程再发起一次系统调用,将数据从内核空间拷备到用户空间

4. signal driven IO 信号驱动IO

5. asynchronous IO 异步IO

用户进程发起aio_read的系统调用后,会立刻得到内核空间的响应,用户空间可以处理自己的事情,此后内核空间就可以等待数据完成,将数据准备完成后,内核空间将数据拷备到用户空间,然后给用户进程发送一个完成的信号,这次IO交互就完成了

 

java.util.concurrent包相关内容介绍

java并发工具箱 concurrent概要介绍


      Java并发编程:并发容器之ConcurrentHashMap


本文主要讲述内容为:ConcurrentHashMap引入了segment,一个segment为一个hashtable,在读取时不加锁;在写如时只会锁定一个segment不影响其他segment,以此达到并发效果。文章中通过源码详细讲解ConcurrentHashMap的实现方式。

ConcurrentHashMap在读取的时候不加锁是因为get方法使用了volital ; 这样当使用remove,put操作与get操作发生竞争时,可以保证写入操作在读取操作之前。

 

     Java并发编程:CountDownLatch、CyclicBarrier和Semaphore


主要讲述内容:

CountDownLatch : 主要用户线程A要等待其他若干线程执行完成后才可执行的情况

CyclicBarrier : 主要用于一组线程互相等待,到某一状态后一同执行

Semaphore : 一般用于控制某一资源的使用权限

 

     Java并发编程:Lock


主要讲述了java.util.concurrent包下的lock的知识

详细讲述重入锁,公平锁非公平锁、可中断锁、读写锁内容

 

 

threadlocal详解


通过源码讲解threadlocal的实现,以及其应用场景