使用异步 I/O 大大提高应用程序的性能
摘要:AIO 简介Linux 异步 I/O 是 Linux 内核中提供的一个相当新的增强。它是 2.6 版本内核的一个标准特性,但是我们在 2.4 版本内核的补丁中也可以找到它。AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍后或在接收到 I/O 操作完成的通知时,进程就可以检索 I/O 操作的结果。I/O 模型在深入介绍 AIO API 之前,让我们先来探索一下 Linux 上可以使用的不同 I/O 模型。这并不是一个详尽的介绍,但是我们将试图介绍最常用的一些模型来解释它们与异步 I/O 之间的区别。图 1 给出了同步和异步模型,以及阻塞和非阻塞的模型。图
阅读全文
posted @
2011-12-26 23:41
啊T
阅读(291)
推荐(0)
Nodejs和浏览器的主线程和子线程
摘要:在我接触JavaScript(无论浏览器还是NodeJS)的时间里,总是遇到有朋友有多线程的需求。而在NodeJS方面,有朋友甚至直接说到,NodeJS是单线程的,无法很好的利用多核CPU。诚然,在前端的浏览器中,由于前端的JavaScript与UI占据同一线程,执行JavaScript确实为UI响应造成了一定程度上的麻烦。但是,除非用到超大的循环语句执行JavaScript,或是用阻塞式的Ajax,或是太过频繁的定时器执行外,JavaScript并没有给前端应用带来明显的问题,所以也很少有朋友抱怨JavaScript是单线程而不能很好利用多核CPU的问题,因为没有因此出现性能瓶颈。但是,我们
阅读全文
posted @
2011-12-26 22:47
啊T
阅读(1328)
推荐(0)
Javascript 异步加载详解
摘要:本文总结一下浏览器在 javascript 的加载方式。关键词:异步加载(async loading),延迟加载(lazy loading),延迟执行(lazy execution),async 属性, defer 属性一、同步加载与异步加载的形式1. 同步加载我们平时最常使用的就是这种同步加载形式: <script src="http://yourdomain.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止了后续的解析,因此停止了后续的文件加载(如图像)、渲染、代码执行。js之所以要同步执行,
阅读全文
posted @
2011-12-26 21:25
啊T
阅读(39160)
推荐(18)
IOCP原理
摘要:要想彻底征服IOCP,并应用好IOCP这个模型,首先就让我们穿越到遥远的计算机青铜器时 代(以出现PC为标志),那时候普通的PC安装的还是DOS平台,微软公司主要靠这个操作系统在IT界的原始丛林中打拼,在DOS中编写程序,不得不与很 多的硬件直接打交道,而最常操作的硬件无非是键盘、声显卡、硬盘等等,这些设备都有一个特点就是速度慢,当然是相对于PC平台核心CPU的速度而言,尤其 是硬盘这个机械电子设备,其速度对于完全电子化得CPU来说简直是“相对静止”的设备。很多时候CPU可以干完n件(n>1000)事情的时间中, 这些硬件可能还没有完成一件事情,显然让CPU和这些硬件同步工作将是一种严重
阅读全文
posted @
2011-12-26 20:38
啊T
阅读(3342)
推荐(2)
libevent源码分析
摘要:1、入门1.1、概述Libevent是一个用于开发可扩展性网络服务器的基于事件驱动(event-driven)模型的网络库。Libevent有几个显著的亮点: (1)事件驱动(event-driven),高性能;(2)轻量级,专注于网络,不如 ACE 那么臃肿庞大; (3)源代码相当精炼、易读; (4)跨平台,支持 Windows、Linux、*BSD和 Mac Os; (5)支持多种 I/O多路复用技术, epoll、poll、dev/poll、select 和kqueue 等; (6)支持 I/O,定时器和信号等事件; (7)注册事件优先级; Libevent 已经被广泛的应用,作为底层的
阅读全文
posted @
2011-12-26 20:18
啊T
阅读(702)
推荐(1)
nodejs异步IO的实现
摘要:本文为原创文章,出自http://cnodejs.org,转载请注明出处和作者 作者:changlin 原文:http://cnodejs.org/blog/?p=244 nodejs的核心之一就是非阻塞的异步IO,于是想知道它是怎么实现的,挖了下nodejs源码,找到些答案,在此跟大家分享下。首先,我用了一段js代码test-fs-read.js做测试,代码如下: var path = require('path'), fs = require('fs'), filepath = path.join(__dirname, 'experiment.log
阅读全文
posted @
2011-12-26 19:15
啊T
阅读(1459)
推荐(0)
转:Node入门
摘要:关于本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识。本书绝不是一本“Hello World”的教程。状态你正在阅读的已经是本书的最终版。因此,只有当进行错误更正以及针对新版本Node.js的改动进行对应的修正时,才会进行更新。本书中的代码案例都在Node.js 0.4.9版本中测试过,可以正确工作。读者对象本书最适合与我有相似技术背景的读者: 至少对一门诸如Ruby、Python、PHP或者Java这样面向对象的语言有一定的经验;对JavaScript处于初学阶段,并且完全是一个Node.js的新手。这里指的适合对其他编程语言有一定经验
阅读全文
posted @
2011-12-25 23:46
啊T
阅读(530)
推荐(0)
TCP/IP三次握手和HTTP过程
摘要:1、TCP连接手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。建立起一个TCP连接需要经过“三次握手”:第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此
阅读全文
posted @
2011-12-25 21:41
啊T
阅读(37904)
推荐(6)
JS杂记
摘要:监控当前页面的加载状态document.onreadystatechange = subSomething; function subSomething(){ if(document.readyState == "complete" && document.getElementById("fre").contentWindow.document.readyState == "complete") { var son = document.getElementById("fre").contentWi
阅读全文
posted @
2011-12-23 11:05
啊T
阅读(256)
推荐(0)
缓存技术
摘要:1.ASP.NET Output Caching 当一个网页频繁被访问的时候,我们可以通过把整个网页缓存来提高执行效率。这样作的优点是,当用户再次访问这个网页的时候,被格式化好的HTML会被直接送显。 为什么会存在这种效果呢?我们通过ASP.NET的基本运行机制来解释这个问题。ASP.NET是一个动态的服务器,当用户从客户端提供一个请求的 时候,那么服务端的IIS接受到请求,然后根据用户的提示执行相应的代码。执行代码之后生成一个结果。这个结果会被缓存成一个HTML放在Server 端,然后通过响应用户的Request将这个HTML传送到客户端。在这之中我们发现,很多时候,用户的请求...
阅读全文
posted @
2011-12-22 17:41
啊T
阅读(460)
推荐(0)
Page Cache(页面缓存)
摘要:本页内容 上下文 问题 影响因素 解决方案 结果上下文 相关模式 上下文 您正在编写为用户提供动态信息的、基于 Web 的应用程序。您观察到许多用户访问某个特定页面,但动态信息不发生改变。 返回页首 问题 如果动态生成的 Web 页被频繁请求并且构建时需要耗用大量的系统资源,那么,如何才能改进这类网页的响应时间? 返回页首 影响因素 下列影响因素作用于此上下文内的系统,在考虑问题的解决方案时必须协调这些因素: 生 成动态 Web 页会耗用各种各样的系统资源。当 Web 服务器收到页面请求时,它通常必须从外部数据源...
阅读全文
posted @
2011-12-22 17:39
啊T
阅读(2576)
推荐(0)
在 ASP.NET 中使用绝对过期实现 Page Cache
摘要:本页内容 上下文 实现策略 测试考虑事项 结果上下文 变体 相关模式 上下文 您要在 ASP.NET 中构建一个 Web 应用程序,并且希望对页面进行缓存以提高性能。您已经评估了 Page Cache (页面缓存)中提出的备用选择方案,并且已决定采用绝对过期的策略。 返回页首 实现策略 页面缓存通过对从动态网页生成的内容进行缓存来提高请求响应的吞吐量。默认情况下,在 ASP.NET 中支持页面缓存,但除非定义有效的过期策略,否则,不会对来自任何给定响应的输出进行缓存。要定义过期策略,可以使用低级 OutputCache API 或...
阅读全文
posted @
2011-12-22 17:39
啊T
阅读(610)
推荐(0)
关于自定义SessionState存储之SessionStateStoreProviderBase类
摘要:SessionStateStoreProviderBase类 为session-state数据存储的提供者定义需要成员. [AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand,Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermissionAttribute(SecurityAction.LinkDemand,Level=AspNetHostingPermissionLevel.Minimal)] publicabstractclass...
阅读全文
posted @
2011-12-19 17:00
啊T
阅读(850)
推荐(0)
转:Session,有没有必要使用它?
摘要:阅读目录开始Session的来龙去脉Session对并发访问的影响Session的缺点总结不使用Session的替代方法Asp.net MVC 中的Session现有的代码怎么办? 今天来说说 Session 。这个东西嘛,我想每个Asp.net开发人员都知道它,尤其是初学Asp.net时,肯定也用过它,因为用它保存会话数据确实非常简单。 与前二篇博客不同,这次我不打算细说它的使用,而是打算说说它的缺点,同时我还会举个实际的例子,来看看它到底有什么不好的影响。 当然了,光批评是没有意义,事情也得解决,没有会话也不行,所以,本文将也给出一个自认为能替代Session的解决方案。 回到顶部...
阅读全文
posted @
2011-12-19 14:46
啊T
阅读(420)
推荐(0)
改变ASP.NET_SessionId值
摘要:通过改变ASP.NET_SessionId的值,来获取ASP.NET_SessionId对应所存储的Session值。1)因为Session的初始化是在AcquireRequestState事件,所以必须在调用AcquireRequestState事件之前对ASP.NET_SessionId的值进行修改。2)ASP.NET_SessionId的值进行修改后,必须把修改后的值,返回到客户端,进行客户端的cookie值修改。 1.ASP.NET_SessionId的值,必须要符合其规则,不然的话,系统会默认生成一个新的。若修改的ASP.NET_SessionId是在另外一个域下,规则不符合,系统会
阅读全文
posted @
2011-12-16 19:14
啊T
阅读(6223)
推荐(0)
application/x-www-form-urlencoded和multipart/form-data
摘要:在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型。 下边是说明: application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式。 multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。 text/plain: 窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。补充form的enctype属性为编码方式,常用有两 种:application/x-www-form-urlencoded和multipar...
阅读全文
posted @
2011-12-16 10:28
啊T
阅读(475)
推荐(0)
Windows内存计数器
摘要:Windows内存中有三个数据很重要,Pages/sec, Available Bytes和Committed Bytes. 在测试中内存的缺少会造成频繁的页错误,导致系统不停在磁盘和内存中交换数据,有可能表现出IO瓶颈的现象,实则内存不足。在页错误中,有分为硬件错误和 软件错误,硬件错误是指程序需要的数据不在内存中需要从硬盘读取,软件错误是指数据还在内存的缓存中但已不再程序的驻留内存里,需要从内存的其他地方读取。访问硬盘比内存要慢几个数量级,所以当系统出现很多硬件页错误时候,系统就会慢的很多,成为系统产生抖动。 如何发现硬件页错误呢?通过在性能监视器里监控一下指标:Memory\Page..
阅读全文
posted @
2011-12-15 17:47
啊T
阅读(1044)
推荐(0)
启用非托管代码调试
摘要:Visual Studio 作为一种强大的开发平台,已经提供了非常多的调试手段。但这些调试手段相对来说还是停留在表面上,无非是设置断点、变量查看以及调用堆栈列表等。某些时候 我们希望了解更多的东西,尤其是那些被隐藏到背后和运行期的东西,诸如对象运行状态、内存分布等等,这些相对底层的知识可以让我们更好地理解 .NET CLR / JIT 的一些行为。当然,并不是所有人都需要了解这些知识,毕竟汇编和高级调试器使用起来还是非常麻烦的。 SOS.dll 是 Microsoft 提供的一种调试扩展,全称是 Son of Strike,可用来调试托管代码。SOS.dll 拥有非常强大的功能,包括 ...
阅读全文
posted @
2011-12-06 15:01
啊T
阅读(3671)
推荐(0)
与GC相关的性能计数器
摘要:如果遇到了性能问题,在使用debug之前分析问题较为不错的一个工具就是perfmon.解决问题最好的方法是思考,这也是熊力大哥在其书中一直在强调的. 如果您的网站遇到下面的几种情形,那还是先看看perfmon里GC相关的东西吧: cpu占用高,内存占用不高.cpu和内存占用都比较高cpu和内存占用都不高,但是网站响应很慢 打开perfmon找到.NET CLR Memory后下面有好几个counter,从哪个开始看呢? 1) % Time in GC 这 个值是说从上一次GC结束到当前这次GC的时间的百分比. 比如上次GC结束时经历了100w个循环,当前的GC消耗是50w个循环,这个计数器的.
阅读全文
posted @
2011-12-06 11:15
啊T
阅读(504)
推荐(0)