自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (7)
  • 收藏
  • 关注

转载 Linux Epoll vs Windows IOCP

1 Epoll vs. IOCPEpoll 和 IOCP 都是为高性能网络服务器而设计的高效 I/O 模型;都是基于事件驱动的。事件驱动有个著名的好莱坞原则(“不要打电话给我们,我们会打电话给你”)。 不同之处在于:1. Epoll 用于 Linux 系统;而 IOCP 则是用于 Windows ;(啊,好大的鸡蛋 … ) 2. Epoll 是当事件资源满足时发出可处理通知

2014-01-29 22:31:17 3673

转载 Nginx事件驱动总结

其实最开始想要看nginx的源代码的初衷就是为了搞懂它的nginx的事件驱动到底是怎么回事。。。到现在为止nginx代码的大体结构部分已经看的差不多了,对它的事件驱动也算是有了一个较为全面的了解,终于可以写这篇文章了。。。首先用一张图来描述整个event的结构:首先最高层的是epoll自己定义的事件结构:[cpp] view plaincopy

2014-01-29 22:28:28 5618

转载 远程调用原理与对比(RMI、MINA、ESB、Hessian、SOAP、EJB)

1引用在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制就是必须的了,在这篇

2014-01-29 22:19:08 1554

转载 Netty事件驱动总结

Netty源码也看了一段时间了,从最开始的勇斗不会用,到现在能够理解它的实现运行原理,还是蛮有成就感的。。而写到越发的觉得不管是C++还是Java,其实最终设计都差不太多。。。如果要总结的写可以写很多字,画很多图,算了吧,好麻烦,一切尽在不言中,来一个图吧:

2014-01-29 22:07:04 1331

转载 JVM性能优化

很多程序员在解决JVM性能问题的时候,花开了很多时间去调优应用程序级别的性能瓶颈,当你读完这本系列文章之后你会发现我可能更加系统地看待这类的问题。我说过JVM的自身技术限制了Java企业级应用的伸缩性。首先我们先列举一些主导因素。l  主流的硬件服务器提供了大量的内存l  分布式系统有大量内存的需求,而且该需求在持续增长l  一个普通Java应用程序所持有的对空间大概在1GB~4GB,

2014-01-29 21:40:24 1200

转载 Disruptor(无锁并发框架)-发布

假如你生活在另外一个星球,我们最近开源了一套高性能的基于消息传递的开源框架。下面我给大家介绍一下如何将消息通过Ring buffer在无锁的情况下进行处理。在深入介绍之前,简介介绍下Ring buffer的工作原理。1.ring buffer是由一个大数组组成的。2.所有ring buffer的“指针”(也称为序列或游标)是java long类型的(64位有符号数)

2014-01-29 21:11:34 1129

转载 Linux中epoll IO多路复用机制

epoll简介epoll 是Linux内核中的一种可扩展IO事件处理机制,最早在 Linux 2.5.44内核中引入,可被用于代替POSIX select 和 poll 系统调用,并且在具有大量应用程序请求时能够获得较好的性能( 此时被监视的文件描述符数目非常大,与旧的 select 和 poll 系统调用完成操作所需 O(n) 不同, epoll能在O(1)时间内完成操作,所以性能相当高

2014-01-29 16:50:53 2968

转载 Linux中select IO多路复用机制

Linux提供select函数来实现多路复用输入/输出模型。select系统调用是用来让我们的程序监视多个文件句柄的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有一个或多个发生了状态改变。关于文件句柄,其实就是一个整数,我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。0、1、2是整数表示的,对应的FILE *结构的表示就是stdin、stdo

2014-01-29 16:39:57 4182

转载 Linux的进程/线程间通信方式总结

Linux系统中的进程通信方式主要以下几种:同一主机上的进程通信方式   * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal)   * System V进程通信方式:包括信号量(Semaphore), 消息队列(Message Queue), 和共享内存(Shared Memory)网络主机间的进程通信方式

2014-01-29 16:10:24 29138

转载 你需要知道的 16 个 Linux 服务器监控命令

如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Linux 系统管理员。有些 Linux 发行版会提供 GUI 程序来进行系统的监控,例如 SUSE Linux 就有一个非常棒而且专业的工具 YaST,KDE 的 KDE System Guard 同样很出色。当然,要使用这些工具,你必须在服务器跟前进行操作,而且这些 GUI 的程

2014-01-29 15:51:51 1101

原创 ZeroMQ的核心优势

ZMQ定义为“史上最快的消息队列”,从网络通信的角度看,它处于会话层之上,应用层之下。ZMQ相较于传统的socket网络编程,最大的特点和优势体现如下:ZMQ为应用程序提供了一套简单的套接字API,不用考虑实际使用的协议类型(进程内、进程间、机器间、或广播);ZMQ提供了多种模式进行消息路由,如请求-应答模式、发布-订阅模式等。这些模式可以用来搭建网络拓扑结构;ZMQ是通过后台的I

2014-01-29 00:01:10 4795

转载 Linux上实现双向进程间通信管道(socketpair)

Linux 提供了 popen 和 pclose 函数,用于创建和关闭管道与另外一个进程进行通信。其接口如下: FILE *popen(const char *command, const char *mode);int pclose(FILE *stream);遗憾的是,popen 创建的管道只能是单向的 -- mode 只能是 "r" 或 "w" 而不

2014-01-28 22:51:19 16241 1

转载 Linux中select、poll和epoll的区别

在Linux Socket服务器短编程时,为了处理大量客户的连接请求,需要使用非阻塞I/O和复用,select、poll和epoll是Linux API提供的I/O复用方式,自从Linux 2.6中加入了epoll之后,在高性能服务器领域得到广泛的应用,现在比较出名的nginx就是使用epoll来实现I/O复用支持高并发,目前在高并 发的场景下,nginx越来越收到欢迎。这里有个文章参考。Ng

2014-01-27 14:28:26 1250

转载 高性能的通讯库-ZeroMQ的几个高性能特征

这两天研究了一下ZeroMQ,号称史上最好的通讯库,比RabbitMQ快很多,基于C语言开发的,实时流处理sorm的task之间的通信就是用的ZeroMQ。ZeroMQ在使用模式上支持多种,有req-reply,publish-subscribe,push-pull。下图是zeroMQ的架构图简单说明一下,从上到下依次是网络、zeroMQ、用户的应用,相当于

2014-01-25 00:06:12 1885

转载 Tomcat基于Coyote的连接器源码分析

不论Tomcat的容器设计得如何精妙,本质上Tomcat就是个HTTP服务器,需要从socket中获得HTTP数据流;另一方面,容器只能处理封装好的org.apache.coyote.Request,从socket到Request之间需要有个转换过程。因此,连接socket和容器之间的重任就交给了CoyoteCoyote简介Coyote是Tomcat的Connector框架的名字,简单说就

2014-01-22 20:57:57 1471

原创 ZeroMQ阅读笔记

ZeroMQ是一种基于消息队列的多线程网络库,提供跨越多种传输协议的套接字。ZeroMQ是网络通信中新的一层,介于应用层和传输层之间。ZeroMQ的主要特性是面向消息进行通信,所以它提供的是比Libevent处在网络通信中更高一层的组件,如果程序员要使用ZeroMQ,只需要做如下事情:告知所使用的通信模型,比如请求回应模型(Request-Reply)、发布订阅模型(Publish

2014-01-21 00:07:10 1473

转载 MySQL性能优化的最佳20+条经验

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你有用。1. 为

2014-01-19 21:46:00 1166

原创 Disruptor 框架源码分析

Disruptor 是一个高性能异步处理框架,也可以认为是一个消息通信框架,它本质上为生产者-消费者模型。Disruptor消息处理流程Disruptor核心类和接口EventHandler:用户提供具体的实现,在里面实现事件的处理逻辑。Sequence:代表事件序号或一个指向缓存某个位置的序号。WaitStrategy:功能包括:当没有可消费的事件时,根据特定

2014-01-19 16:02:37 4044

转载 关于线程Thread和协程Coroutine

线程与协同程序的主要区别在于,一个具有多线程的程序可以同时运行几个线程,而协同程序却需要彼此协作地运行。就是说,一个具有多个协同程序的程序在任何时刻只能运行一个协同程序,并且正在运行的协同程序只会在其显示地挂起时,它的执行才会暂停。线程和协程的异同协程(Coroutine)类似于线程(Thread)的地方是:每个协程都有有自己的堆栈,自己的局部变量。线程和协程的主要区别在于:

2014-01-18 17:26:35 2908 1

转载 协程与例程

协程(coroutine)技术是一种程序控制机制,早在上世纪60年代就已提出,用它可以很方便地实现协作式多任务。协程是一种程序组件,是由子例程的概念泛化而来的,子例程只有一个入口点且只返回一次,而协程允许多个入口点,可以在指定位置挂起和恢复执行。被广为引用的协程定义:•协程的本地数据在后续调用中始终保持•协程在控制离开时暂停执行,当控制再次进入时只能从离开的位置继续执行在协

2014-01-18 16:12:04 2177

转载 Tomcat基于Coyote的HTTP 1.1协议连接器

1. 模块架构org.apache.coyote.http11包支持http1.1协议,内部分为三类:ARP、NIO、普通http,这里只对最基本的普通http(使用java的IO流,而非NIO流)作简单研究。这个包主要有以下几个类:Http11Protocol,实现了ProtocolHandler接口Http11Processor,实现了ActionHook接口InternalI

2014-01-17 20:35:40 3259

转载 Kilim框架的Actor并发模型

1.Kilim是一个Java消息传递框架,它提供了超轻量级的线程和工具,可以在这些线程之间进行快速、安全、零复制的消息传递。2.Kilim的核心在于Mailbox跨线程共享内存,没有锁或同步,Mailbox支持多生产者,单消费者队列。3.Kilim的Actor协程场景存在大量的处理线程,都消耗在等待后端的处理,做异步化才有意义4.Actor采取的这种类似消息机制的方式,实际在守

2014-01-16 01:39:36 1797

转载 Disruptor框架入门

Disruptor是LMAX出品的一个高效的无锁并发框架,它高效核心在于其无锁队列RingBuffer的独特设计。1.Disruptor是什么? Disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式的实现,或者事件监听模式的实现。 Disruptor 比传统的基于锁的消息框架的优势在于:它是无锁的、CPU友好;它不会

2014-01-16 00:08:39 3770

转载 一种高效无锁内存队列的实现

Disruptor是LMAX公司开源的一个高效的内存无锁队列。这两天看了一下相关的设计文档和博客,下面尝试进行一下总结。第一部分。引子谈到并发程序设计,有几个概念是避免不了的。1.锁:锁是用来做并发最简单的方式,当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换,等待锁的线程会被挂起直至锁释放。在上下文切换的时候,cpu之前缓存的指令和数据都将失效,对性能有很大的损失

2014-01-15 13:16:38 2643

转载 Netty之源代码解析

Netty始终要写一篇来作为终结的,但是到了写的时候才发现无从下手,了解 的还是不够吧。无奈,从四处摘录了一大片东西,很多都是官网下来的,没有什么文字说明,权当参考了。首先来一张总体架构图,这个是从Neety官网上摘下来的,描述了Netty的核心架构和总体功能。 1.  BootStrap Bootstrap : ChannelFactory, Ch

2014-01-13 23:33:47 1686 1

转载 Java NIO框架Netty教程(五)-Netty中OIO模型(对比NIO)

一篇OIO和NIO对比的小研究。Netty中不光支持了Java中NIO模型,同时也提供了对OIO模型的支持。(New IO vs Old IO)。首先,在Netty中,切换OIO和NIO两种模式是非常方便的,只需要初始化不同的Channel工程即可。?1234ServerBootstrap bootstrap =new Serve

2014-01-13 23:29:06 6479 3

转载 MySQL架构方案

Scale Out:横向扩展,增加处理节点提高整体处理能力Scale Up:纵向扩展,通过提升单个节点的处理能力达到提升整体处理能力的目的ReplicationMySQL的replication是异步的,适用于对数据实时性要求不是特别关键的场景。slave端的IO线程负责从master读取日志,SQL线程专门负责在slave端应用从master读过来的日志(早期MySQL用

2014-01-12 16:37:07 1436 2

转载 MySQL建议列属性尽量为NOT NULL

首先,我们要搞清楚“空值” 和 “NULL” 的概念:1、空值是不占用空间的2、MySQL中的NULL其实是占用空间的所谓的NULL就是什么都没有,连\0都没有,\0在字符串中是结束符,但是在物理内存是占空间的,等于一个字节,而NULL就是连这一个字节都没有。在数据库里是严格区分的,任何数跟NULL进行运算都是NULL, 判断值是否等于NULL,不能简单用=,而要用IS NULL关

2014-01-12 16:21:54 20019

转载 TCP协议疑难杂症全景解析

说明:1).本文以TCP的发展历程解析容易引起混淆,误会的方方面面2).本文不会贴大量的源码,大多数是以文字形式描述,我相信文字看起来是要比代码更轻松的3).针对对象:对TCP已经有了全面了解的人。因为本文不会解析TCP头里面的每一个字段或者3次握手的细节,也不会解释慢启动和快速重传的定义4).除了《TCP/IP详解》(卷一,卷二)以及《Unix网络编程》以及Linux源代码之外,

2014-01-12 15:28:59 1415 1

转载 Future异步事件驱动

简单来讲,Future是这样一种Pattern: 它本身表示‘将来(future)’,你提交一个异步的任务,比如提交到一个threadpool,与此同时拿到一个Future对象,任务的执行是异步的,这时候你可以去做其它的事情,等到异步任务结束的时候,你可通过前面的Future对象拿到异步执行的任务的结果。Future要获取异步任务执行的结果,需要通过轮询或者阻塞等待的方式,这样的方式,总显得不

2014-01-10 00:51:52 2747

转载 Java并发编程总结

多线程并发环境下,本质上要解决地是这两个问题:线程之间如何通信线程之间如何同步  在Windows操作系统中Java线程和内核线程一对一影射(_beginthread)在Linux操作系统中Java下使用pthread实现。Phtread在linux下有两种实现,linux 2.6内核缺省使用NPTL。也是一对一影射。Executors•这是一种任务分解。任务提供者和执行者•在本线

2014-01-08 23:16:00 1926

转载 Executor/ExecutorService和ExecutorCompletionService

上篇文章讲到了Callable和Futre,这篇文章接着来说说执行器相关的接口和类。在JavaSE5之后,在API的java.util.concurrent包中给出了Executor这样一个接口。因为在Java7之前,JDK中这个接口最终都是以一个线程池ThreadPool的方式实现的,所以很多人也直接叫“线程池”。除了ThreadPool之外,还有ForkJoinPool实现,本文中,我们不妨直

2014-01-05 23:05:07 3670

转载 Callable、Future和CompletionService

在整理执行器Executor之前,需要提到这样几个类/接口,这些类在使用执行器实现并发开发的时候是比较有用的,他们就是Callable、Future和CompletionService。0. Callable在最开始整理Java多线程并发的文章时就提到过了,Runnable是在JDK1.0中就有的。我们再来回头看下java.lang.Runnable:public inte

2014-01-05 23:00:01 1474

转载 Lock、ReentrantLock和AbstractQueuedSynchronizer的源码要点分析整理

前面已经说了很多Java并发和线程安全的东西,也提到并对比了内在锁和J.U.C包(java.util.concurrent包,后同)中Lock的锁。从这篇开始,对Java并发的整理从理论进入“实践”阶段,本篇对Lock、ReentrantLock和AbstractQueuedSynchronizer源码做简要分析和整理。先从Lock这个interface说起,然后分析ReentrantLock和A

2014-01-05 22:32:43 1595

转载 AbstractQueuedSynchronizer在工具类ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier中的应用

在java.util.concurrent包中,AbstractQueuedSynchronizer的应用非常广泛,而不局限于在ReentrantLock中的实现,本文简要介绍下AbstractQueuedSynchronizer在Semaphore、CountDownLatch、ReentrantReadWriteLock等类中的应用。0. 回顾上文在介绍AQS的时候,介绍了AQ

2014-01-05 22:24:55 1633

转载 Continuation 异步化机制

Jetty 的 Continuation 机制讨论 Jetty 的 Continuation 机制,首先需要提到 Ajax 技术,Ajax 技术是当前开发 Web 应用的非常热门的技术,也是 Web 2.0 的一个重要的组成部分。Ajax 技术中的一个核心对象是 XMLHttpRequest 对象,这个对象支持异步请求,所谓异步请求即是指当客户端发送一个请求到服务器的时候,客户端不必一直等待服

2014-01-05 16:27:36 4281 1

转载 Java NIO原理图文分析及代码实现

前言: 最近在分析hadoop的RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。可以参考:http://baike.baidu.com/view/32726.htm )机制时,发现hadoop的RPC机制的实现主要用到了两个技术:动态代理(动态代理可以参考博客:http:/

2014-01-05 16:09:02 1839

转载 网站性能优化之HTTP请求过程

网站性能优化中首要的一条就是要减少HTTP请求,那么为要减少HTTP请求呢?其实有些HTTP分析工具可以帮我们了解当浏览器请求一个资源时大致需要经历的哪些过程。1 域名解析(DNS Lookup):    这个没什么好说的就是把域名解析到指定IP地址的服务器所需要的时间。2 创建连接(connection):    创建一个Tcp 连接到服务器或代理服务器所需要的时间,如使用的是h

2014-01-05 14:47:38 1120

转载 HttpClient超时机制算法探讨

前面提到了一个需要管理所有request请求的timeout,原先文章的一种处理方式是起一个异步线程的方式,通过jdk的unsafe的await机制控制timeout。  存在的问题:1.  创建新线程的开销不小。2.  大量线程的调度和切换,引起不必要的context switch和同事在沟通的过程中,提到一种新思路,就是有一个monitor线程来管理所有request的ti

2014-01-04 23:59:00 2474

转载 Java线程安全杂谈——锁、状态依赖与协同以及锁优化

从谈Java并发开始synchronized和锁就时常被谈到,上篇讲Java内存模型特点的时候,也说道用synchronized几乎可以同时满足原子性、可见性和有序性三点,那本篇就来说一下锁的概念、synchronized和API层面Lock锁框架的比较选择。后面也会讲到状态依赖与协同问题、条件队列和锁优化。0. 先说说synchronized。synchronized关键字可谓是并发里的

2014-01-04 23:12:46 2557

面向对象的分析设计与建模UML.pdf

面向对象的分析设计与建模UML.pdf 经典中的经典!

2012-01-20

Linux多线程编程.pdf

Linux多线程编程.pdf 非常经典得课件!

2012-01-19

Linux C编程—精华本.pdf

Linux C编程—精华本.pdf,绝对精华!

2012-01-19

嵌入式Linux知识培训

非常经典哦 言简意赅 不用多说! 主要包括以下四部分内容: 一、嵌入式Linux开发的基本知识 二、Linux下使用C语言进行系统开发 三、面向嵌入式Linux的GUI系统的体系结构及二次开 发 四、基于Linux OS Smart Phone的体系结构及开发内容

2009-02-17

基于Agent的智能搜索平台

我们所做的电影DVD的在线购物系统是基于Agent的智能搜索平台,它为顾客提供海量信息的搜索和个性化的偏好智能筛选服务。 每当一个顾客注册时,我们便为该顾客创建一个记录,记录顾客注册的信息和网上购物的行为。在日后的使用过程中,他不断变化的真实的偏好将反映在实际的购物行为上,通过对其进行分析,挖掘潜在的数据,来判断顾客的兴趣所在,并且系统将试图不断的修正现有的偏好记录来模拟顾客的行为。

2009-02-17

空空如也

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

TA关注的人

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