要使业务系统无极缩放,微服务架构方兴未艾。本质上,就是采用API(例如REST) 封装服务调用,形成服务框架。
既然是分布式API调用,必然涉及到网络IO常见的三种方式:
1) BIO:Blocking IO,阻塞方式,一个socket用一个线程处理
2) NIO: Non-blocking IO,事件驱动,采用reactor模式,一个线程中处理多个socket,JDK1.4以上版本支持
3) AIO:Asynchronous IO,异步,采用Proactor模式,NIO在有通知时可以进行相关操作,...
分类:
其他好文 时间:
2015-03-11 08:11:41
阅读次数:
197
性能劣化随着代码写得越来越烂,程序运行时数据库操作更多、IO阻塞等待跟过、不必要的对象创建、GC回收更频繁,线程的上下文切换也更多,开销越来越多,所有因素综合起来,程序运行更慢,响应延迟加大。当到达临界点的时候,压垮骆驼的最后一根稻草出现了,系统直接崩溃。坏东西、副作用是会累积的。代码的实现一直保持...
分类:
其他好文 时间:
2015-02-15 20:31:40
阅读次数:
128
在部署 web 应用到生产环境,或者在对 web 应用进行性能测试的时候,经常会有人问:如何决定 web 应用线程池大小?决定一个 IO 阻塞型 web 应用的线程池大小是一项很艰巨的任务。通常是通过进行大量的性能测试来完成。在一个 web 应用中同时拥有多个线程池会让决定最优线程池大小的过程变得更加复杂。本文将就这个常见的问题进行一些讨论和建议。线程池web 应用中的线程池大小决定了在指定时间内...
分类:
编程语言 时间:
2015-02-15 16:41:01
阅读次数:
124
Selector:java nio无阻塞io实现的关键。 阻塞io和无阻塞io: 阻塞io是指jdk1.4之前版本面向流的io,服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一...
分类:
其他好文 时间:
2015-01-03 22:35:36
阅读次数:
387
引言:UNIX/LINUX下大多数都是用gzip格式来做文件的压缩方案的,而gzip文件损坏的情况也屡见不鲜,常见的有遇到坏扇区、压缩进程io阻塞,或恢复后的压缩文件被破坏等。因近期有做关于gzip文件的修复研究,特分为三个篇章对此成果进行表述,分别为原理篇,方法篇,案例篇。此为..
分类:
其他好文 时间:
2014-12-20 18:21:55
阅读次数:
299
非阻塞式的 I/O 是进程调用 I/O 操作时,若数据未准备就绪,则立即返回一个 EWOULDBLOCK 错误,在数据准备就绪之前,应用进程采用轮询的方式检查数据是否准备就绪。直到数据准备就绪,则内核把该数据复制到应用进程的缓冲区,完成数据复制之前进程处于阻塞状态,直到数据复制完成后才返回。即 I/O 操作第一阶段处于轮询检查状态,第二阶段处于阻塞状态。...
分类:
其他好文 时间:
2014-12-17 09:07:32
阅读次数:
251
单例模式是日常应用中最广泛的模式了,其目的就是令到单个进程中只存在一个类的实例,从而可以实现数据的共享,节省系统开销,防止io阻塞等等但是在多进程的应用中,单例模式就实现不了了,例如一些web应用,django,这些,因为会启动多条进程来监听http请求,这样的会通过单例模式是实现不了数据共享的,也...
分类:
编程语言 时间:
2014-10-16 21:20:53
阅读次数:
210
一、MINA简介 在介绍Mina之前,要先介绍一下NIO和BIO这两个名词: BIO:Blocking IO,阻塞IO,每个客户端的请求对应一个线程处理。使用BIO有一个问题,当客户端的连接请求过多时,服务端就会需要很多线程来处理客户端的请求,这样很容易使得服务器资源消耗过度等问题。 NIO:...
分类:
其他好文 时间:
2014-07-29 21:02:22
阅读次数:
232
阻塞和非阻塞IO
阻塞IO指当进行IO操作时, 如果IO操作无法立即完成,当前线程进入阻塞状态,直到IO操作完成,IO函数返回。
非阻塞IO指当进行IO操作时,如果IO操作无法立即完成,IO函数立即返回,线程不会阻塞。
写与读操作对阻塞与非阻塞IO的语义
写操作,只有完成所有指定数据的写入时,写操作才算完成。
读操作,只要能读取到数据,读操作就算完成。...
分类:
其他好文 时间:
2014-06-11 07:12:32
阅读次数:
316