自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 CPU高速缓存行之伪共享

什么是伪共享为了理解“伪共享”,在上一文CPU高速缓存那些事儿中我们主要对CPU高速缓存的原理构造进行大致的了解,其实通过CPU高速缓存的理解以及在文末提到的缓存一致性协议,我们已经能够很容易的理解所谓的“伪共享”的问题。       在这里,我们在来回顾一下CPU高速缓存的知识,在现代计算机中,CPU缓存是分层次结构的,例如:L1,L2,L3,当CPU发起一个读取内存指令的时候,首先...

2018-07-30 23:02:20 1276

原创 CPU高速缓存那些事儿

引言在分析JDK8新增的高并发原子累加器Striped64的时候,发现有一个“伪共享”的概念,而要理解它必须对CPU缓存有一定的了解,所以本文将先对CPU的缓存架构以及一些相关术语做一个研究探索。 CPU缓存的原理      众所周知,在如今的计算机时代,CPU的运算处理速度与内存读写速度的差异非常巨大,为了解决这种差异充分利用CPU的使用效率,CPU缓存应运而生,它是介于CP...

2018-07-29 16:07:57 11534 2

原创 线程基础知识概述

一、概念术语进程:进程通常是程序、应用的同义词。不过,用户所看到的一个单独的应用事实上可能还会有一系列的协作进程(cooperating processes),例如Linux上就可以通过fork创建一个进程副本。最简单的情况下,一个应用就是一个进程。大部分Java虚拟机的实现都是作为单进程运行的,但是我们也可以通过ProcessBuilder来创建附加的进程。 线程:线程有时又称之...

2017-04-18 15:05:06 194

原创 Java NIO - Epoll(转)

在JDK5U9之后,NIO在Linux 内核版本大于2.6的服务器上支持了epoll。其对并发的处理会有大幅度的性能提升,JVM启动参数如下:-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider  在tomcat中启用的办法是在 catalina.sh 的开头加入下面这一行:CATAL...

2017-03-12 22:57:21 627

原创 Java AIO 实例(转)

转载:http://m.blog.csdn.net/article/details?id=51512200AIO异步非阻塞IO实例:客户端发送数学表达式,经过服务端接收计算后返回客户端。 1、服务端包括,Server、ServerHandler、ServerWriteHandler、ServerReadHandler、AcceptHandler、Calculator   1...

2017-03-12 22:17:37 247

原创 Java NIO 处理粘包、断包问题

NIO socket是非阻塞的通讯模式,与IO阻塞式的通讯不同点在于NIO的数据要通过channel放到一个缓存池ByteBuffer中,然后再从这个缓冲池中读出数据,而IO的模式是直接从inputstream中read。所以对于NIO,由于存在缓冲池的大小限制和网速的不均匀会造成一次读的操作放入缓存池中的数据不完整,便形成了断包问题。同理,如果一次性读入两个及两个以上的数据,则无法分辨两个数...

2017-03-12 20:59:25 1062

原创 Netty AIO

Netty也支持AIO并提供了相应的类: AioEventLoopGroup,AioCompletionHandler, AioServerSocketChannel,AioSocketChannel, AioSocketChannelConfig。其它使用方法和NIO类似。 Netty对缓冲区的扩展io.netty.buffer和java.nio.ByteBuffer的区别官方文...

2016-10-18 23:57:21 193

原创 Java AIO 简介

前言从JDK 7版本开始,Java新加入的文件和网络io特性称为nio2(new io 2, 因为jdk1.4中已经有过一个NIO了),包含了众多性能和功能上的改进,其中最重要的部分,就是对异步io的支持,称为Java AIO(asynchronous IO)。因为AIO的实施需充分调用OS参与,IO需要操作系统支持、并发也同样需要操作系统的支持,所以性能方面不同操作系统差异会比较明显。...

2016-10-18 23:51:19 538

原创 Java NIO MappedByteBuffer

前言java通常采用BufferedReader,BufferedInputStream等带缓冲的IO类处理文件读写,不过java nio中引入了一种基于MappedByteBuffer操作大文件的方式,其读写性能极高。MappedByteBuffer引入了内存映射文件的方法,该方案是建立的操作系统的内存管理机制上的。 操作系统的内存管理机制操作系统的内存分为:物理内存与进程虚...

2016-10-13 22:50:26 177

原创 Java NIO FileChannel

Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。 打开FileChannel在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAccessFil...

2016-10-08 14:18:39 87

原创 Java NIO Buffer缓冲区

缓冲区简介操作系统有用户空间与系统空间的概念,JVM对应的JAVA进程是位于用户空间的,处于该空间的进程不能直接访问硬件设备,当JAVA进程要进行I/O操作时,只能通过系统调用将控制权交给内核,内核准备好进程所需要的数据,将这些数据拷贝到用户空间缓冲区(如下图所示)。Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。...

2016-10-08 14:12:12 153

原创 JAVA NIO源码分析---总结篇

通过上一篇对JAVA NIO的源码分析,对一些重要的代码实现进行了探究,现将从源码分析中得出的结论总结如下。一、源码分析流程梳理。1.Selector.open() 获取选择器的时候,根据不同的操作系统创建Selector实现类,实现类创建了用于保存通道句柄和事件类型的数据结构PollArrayWrapper,如果是Windows系统将会创建一对相互连接的socket通道模拟管道用于唤...

2016-10-05 21:41:20 209

原创 Java NIO源码分析

1.前言JDK1.4之前的传统阻塞IO(BIO),服务端需要为每一个客户端连接创建单独的线程为其服务,从JDK1.4开始NIO非阻塞式IO出现,它只需要单独的一个线程就能接收多个客户端请求,而真正处理各个请求的细节可以使用多线程的方式高效率的完成,这些处理线程与具体的业务逻辑分离,做到了IO的复用。 2.源码分析首先以一段典型的NIO使用代码开始: Selector s...

2016-10-04 20:40:42 409

原创 Socket原理探索

 1、网络进程通信之socket在使用TCP/IP协议族进行网络通信的过程中,网络层的IP地址可以唯一标识一台网络主机,而传输层的协议+端口可以唯一标识主机中的应用程序进程,利用这样的三元组合(IP地址,协议,端口)就可以在网络中唯一标识网络中的进程,从而为进程在网络中的通信建立了基石。TCP/IP协议族为网络通信提供了编程接口,Socket正是其代表,Socket起源于Unix,...

2016-09-18 17:20:30 102

原创 Java传统IO

传统IO有两种形式,一种是阻塞IO,另一种是阻塞IO+每个请求创建线程/线程池。阻塞IOIO的阻塞、非阻塞主要表现在一个IO操作过程中,如果有些操作很慢,比如读操作时需要准备数据,那么当前IO进程是否等待操作完成,还是得知暂时不能操作后先去做别的事情?一直等待下去,什么事也不做直到完成,这就是阻塞。抽空做些别的事情,这是非阻塞。在传统IO里,InputStream.read()方法...

2016-09-11 20:58:24 178

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除