摘要: Netty是一个高性能 事件驱动的异步的非堵塞的IO(NIO)框架,用于建立TCP等底层的连接,基于Netty可以建立高性能的Http服务器。支持HTTP、 WebSocket 、Protobuf、 Binary TCP |和UDP,Netty已经被很多高性能项目作为其Socket底层基础,如HornetQ Infinispan Vert.xPlay Framework Finangle和 Cassandra。其竞争对手是:Apache MINA和 Grizzly。 传统堵塞的IO读取如下:InputStream is = new FileInputStream("input.bin 阅读全文
posted @ 2014-04-03 16:40 外星猿 阅读(819) 评论(0) 推荐(0) 编辑
摘要: Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内容,如果没有内容进来,read()也是傻傻的等,这会影响我们程序继续做其他事情,那么改进做法就是开设线程,让线程去等待,但是这样做也是相当耗费资源的。Java NIO非堵塞技术实际是采取Reactor模式,或者说是Observer模式为我们监察I/O端口,如果有内容进来,会自动通知我们,这样,我们就不必开启多个线程死等,从外界看,实现了流畅的I/O读写,不堵塞了。Java NIO出现不只是一个技术 阅读全文
posted @ 2014-04-03 16:39 外星猿 阅读(549) 评论(0) 推荐(0) 编辑
摘要: 一、什么是线程基础知识。线程是CPU调度的最小单元。一个线程可以看作是在执行一个任务。除创建和销毁,线程的生命周期还包括就绪、运行、阻塞。二、多线程的工作原理CPU是按时间片来运行任务的,多个线程都有机会获得时间片,这样多个任务就可以并发地执行。线程间的切换会涉及到上下文保存的开销。由于线程间共享进程内的数据资源,故线程切换的开销比进程切换的开销要小很多。在大多数通用的处理器中,上下文切换的开销相当于5000到10000个时钟周期。因为大多时候一个线程不可能满负荷地占用CPU,会有一些IO或接口调用的操作,这个时候CPU是空闲的,就可以切换别的线程执行,从而大大地提高效率和并发量。三、如何使用 阅读全文
posted @ 2014-03-30 23:20 外星猿 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 面对当今大数据存储,设想当mysql中一个表的总记录超过1000W,会出现性能的大幅度下降吗?答案是肯定的,一个表的总记录超过1000W,在操作系统层面检索也是效率非常低的解决方案:目前针对海量数据的优化有两种方法:1、大表拆小表的方式(主要有分表和分区两者技术)(1)分表技术垂直分割优势:降低高并发情况下,对于表的锁定。不足:对于单表来说,随着数据库的记录增多,读写压力将进一步增大。水平分割如果单表的IO压力大,可以考虑用水平分割,其原理就是通过hash算法,将一张表分为N多页,并通过一个新的表(总表),记录着每个页的的位置。假如一个门户网站,它的数据库表已经达到了1000万条记录,那么此时 阅读全文
posted @ 2014-03-25 17:58 外星猿 阅读(552) 评论(0) 推荐(0) 编辑
摘要: show profile是由Jeremy Cole捐献给MySQL社区版本的。默认的是关闭的,但是会话级别可以开启这个功能。开启它可以让MySQL收集在执行语句的时候所使用的资源。为了统计报表,把profiling设为1mysql> SET profiling = 1;之后在运行一个查询mysql> SELECT COUNT(DISTINCT actor.first_name) AS cnt_name, COUNT(*) AS cnt-> FROM sakila.film_actor-> INNER JOIN sakila.actor USING(actor_id)-& 阅读全文
posted @ 2014-03-25 16:55 外星猿 阅读(257) 评论(0) 推荐(0) 编辑
摘要: source:http://www.open-open.com/lib/view/open1330065251640.html网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果,因此简单地根据某个给出方案来配置mysql是行不通的,最好能使用 status信息对mysql进行具体的优化。mysql> show global status; 可以列出mysql服务器运行各种状态值,另外,查询mysql服务器配置信息语句:mysql> s 阅读全文
posted @ 2014-03-25 16:29 外星猿 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 1、关于集合的两道面试题先来看几道题目:1、创建一个不可变的的集合:public static void main(String[] args) { Set set = new HashSet(); set.add("Java"); set.add("JEE"); set.add("Spring"); set.add("Hibernate"); set = Collections.unmodifiableSet(set); set.add("Ajax"); // not allowed.}可以看 阅读全文
posted @ 2014-03-20 10:12 外星猿 阅读(283) 评论(0) 推荐(1) 编辑
摘要: Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。概述:对于从事C、C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又是执行最基础工作的劳动人民——拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任。... 阅读全文
posted @ 2014-03-19 13:48 外星猿 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 在分布式开发中,锁是线程控制的重要途径。Java为此也提供了2种锁机制,synchronized和lock。做为Java爱好者,自然少不了对比一下这2种机制,也能从中学到些分布式开发需要注意的地方。我们先从最简单的入手,逐步分析这2种的区别。一、synchronized和lock的用法区别synchronized:在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。lock:需要显示指定起始位置和终止位置。一般使用ReentrantLock类做为锁,多个线程中必须要使用一个ReentrantLock类做为对象才能保证锁的生效。且 阅读全文
posted @ 2014-03-19 10:59 外星猿 阅读(1688) 评论(0) 推荐(0) 编辑
摘要: 什么是连接?连接,是我们的编程语言与数据库交互的一种方式。我们经常会听到这么一句话“数据库连接很昂贵“。有人接受这种说法,却不知道它的真正含义。因此,下面我将解释它究竟是什么。[如果你已经知道了,你可以跳到它的工作原理部分]创建连接的代码片段:1String connUrl ="jdbc:mysql://your.database.domain/yourDBname";2Class.forName("com.mysql.jdbc.Driver");3Connection con = DriverManager.getConnection (connUrl 阅读全文
posted @ 2014-03-13 16:56 外星猿 阅读(272) 评论(0) 推荐(0) 编辑