Browsed by
分类: Windows

性能调优攻略

性能调优攻略

关于性能优化这是一个比较大的话题,在《由12306.cn谈谈网站性能技术》中我从业务和设计上说过一些可用的技术以及那些技术的优缺点,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级别的技术和方法。本文的东西是我的一些经验和知识,并不一定全对,希望大家指正和补充

在开始这篇文章之前,大家可以移步去看一下宝酷以前发表的《代码优化概要》,这篇文章基本上告诉你——要进行优化,先得找到性能瓶颈! 但是在讲如何定位系统性能瓶劲之前,请让我讲一下系统性能的定义和测试,因为没有这两件事,后面的定位和优化无从谈起。

一、系统性能定义

让我们先来说说如何什么是系统性能。这个定义非常关键,如果我们不清楚什么是系统性能,那么我们将无法定位之。我见过很多朋友会觉得这很容易,但是仔细一问,其实他们并没有一个比较系统的方法,所以,在这里我想告诉大家如何系统地来定位性能。 总体来说,系统性能就是两个事:

  1. Throughput ,吞吐量。也就是每秒钟可以处理的请求数,任务数。
  2. Latency, 系统延迟。也就是系统在处理一个请求或一个任务时的延迟。

一般来说,一个系统的性能受到这两个条件的约束,缺一不可。比如,我的系统可以顶得住一百万的并发,但是系统的延迟是2分钟以上,那么,这个一百万的负载毫无意义。系统延迟很短,但是吞吐量很低,同样没有意义。所以,一个好的系统的性能测试必然受到这两个条件的同时作用。 有经验的朋友一定知道,这两个东西的一些关系:

  • Throughput越大,Latency会越差。因为请求量过大,系统太繁忙,所以响应速度自然会低。
  • Latency越好,能支持的Throughput就会越高。因为Latency短说明处理速度快,于是就可以处理更多的请求。

二、系统性能测试

经过上述的说明,我们知道要测试系统的性能,需要我们收集系统的Throughput和Latency这两个值。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (53 人打了分,平均分: 4.28 )
Loading...
HTTP幂等性概念和应用

HTTP幂等性概念和应用

[ 感谢 Todd 同学投递本文 ]

基于HTTP协议的Web API是时下最为流行的一种分布式服务提供方式。无论是在大型互联网应用还是企业级架构中,我们都见到了越来越多的SOA或RESTful的Web API。为什么Web API如此流行呢?我认为很大程度上应归功于简单有效的HTTP协议。HTTP协议是一种分布式的面向资源的网络应用层协议,无论是服务器端提供Web服务,还是客户端消费Web服务都非常简单。再加上浏览器、Javascript、AJAX、JSON以及HTML5等技术和工具的发展,互联网应用架构设计表现出了从传统的PHP、JSP、ASP.NET等服务器端动态网页向Web API + RIA(富互联网应用)过渡的趋势。Web API专注于提供业务服务,RIA专注于用户界面和交互设计,从此两个领域的分工更加明晰。在这种趋势下,Web API设计将成为服务器端程序员的必修课。然而,正如简单的Java语言并不意味着高质量的Java程序,简单的HTTP协议也不意味着高质量的Web API。要想设计出高质量的Web API,还需要深入理解分布式系统及HTTP协议的特性。

幂等性定义

本文所要探讨的正是HTTP协议涉及到的一种重要性质:幂等性(Idempotence)。在HTTP/1.1规范中幂等性的定义是:

Methods can also have the property of “idempotence” in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request.

从定义上看,HTTP方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用。幂等性属于语义范畴,正如编译器只能帮助检查语法错误一样,HTTP规范也没有办法通过消息格式等语法手段来定义它,这可能是它不太受到重视的原因之一。但实际上,幂等性是分布式系统设计中十分重要的概念,而HTTP的分布式本质也决定了它在HTTP中具有重要地位。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (21 人打了分,平均分: 3.38 )
Loading...
如何学好C语言

如何学好C语言

有人在宝酷的留言版上询问下面的问题

keep_walker :
今天晚上我看到这篇文章。
http://programmers.stackexchange.com/questions/62502/small-c-projects

我也遇到了和提问的老外一样的问题。。能给像遇到这样烦恼的程序员一点建议嘛?谢谢!

我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程编到一定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子。比如:你长期地使用Java和.NET ,这些有虚拟机的语言对于开发便利是便利,但是对于程序员来说可能并不太好,原因有两个:

  1. 虚拟机屏蔽了操作系统的系统调用,以及很多底层机制。
  2. 大量的封装好的类库也屏蔽了很多实现细节。

一段时间后,你会发现你知其然,不知所以然。。我以前在CSDN上写过一篇《Java NIO类库Selector机制解析(》,在那篇文章中我说提到过(有讥讽的语气)Java的程序员不懂底层实现,所以很难把技术学得更扎实。此时,一部分程序员会不自然地想学学底层的技术,很自然的,C语言就被提了上来。

下面是我给这位朋友的一些建议:

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (162 人打了分,平均分: 4.69 )
Loading...
纯文本配置还是注册表

纯文本配置还是注册表

我们知道Unix/Linux下的程序配置文件从来都是纯文本的,你可以自由地修改和查看,他们也没有什么什么XML之类的玩意(参看XML的这两篇文章:),这个最重要的Unix文化(参看Unix传奇下篇)40多年来就这么沿续下来了。我很佩服Microsoft的创新能力,一会儿用INI,一会儿用注册表,一会又是用XML,这就是Windows的编程中那“强大”的创新。在网上又看到有人在争论为什么用注册表而不是纯文本,所以,写下这篇文章。

引入注册表所谓的原因

首先,让我们来看一下为什么微软觉得要使用注册表而不是ini文件,下面是一些其列出来的ini方面的毛病:

  • ini文件不支持Unicode
  • ini文件的安全权限不够
  • ini文件在多进程下存取会有问题
  • 如果一个进程锁上了这个文件,另一个进程就无法获得,只能出错。
  • ini文件只能包含字符串,无法使用二进制
  • 解析ini文件相对来说性能比较慢,第一次读写都需要把整个文件读入内存,然后再写回去。
  • ini文件最大只有32K
  • ini文件的默认目录在Windows系统目录下,只能这个目录只能Windows管理员才能访问
  • ini只能包含了两层,对于多层不支持。
  • 把ini文件放在中央服务器上管理很困难。

而微软说,注册表可以完美地解决这些问题。居然微软只说到了ini文件,但我觉得不单单是ini,所有的以纯文本方式保存配置文件的方法都会出现上述这样的问题。

我的观点

那么,当你在看到这些言论时,你是怎么想的?你有没有经过自己的独立思考?还是你觉得注册表完美地解决了所有的一切?下面是我的一些观点:

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (26 人打了分,平均分: 3.58 )
Loading...
Windows编程革命简史

Windows编程革命简史

源文:A Brief History of Windows Programming Revolutions (Ron Burk)

首先,是 Windows API 和 DLL Hell。(译注:DLL Hell——DLL灾难,就是微软的DLL升级时因为不同版本可能造成应用程序无法运行的灾难,首当其冲的是COM编程,相信大家都知道某些木马或是病毒更改了一些系统的DLL可以导致整个Windows不举,这就是DLL Hell) 于是,第一次革命是DDE——我们可以创建一个状态条在上面显示Microsoft的股票价格(译注:Dynamic Data Exchange,工作原理是: 甲方申请一块全局内存,然后把内存指针postmessage到乙方,乙方根据收到的指针访问那块全局内存)。

在那个时候,Microsoft 创建了 VERSIONINFO 资源来管理版本信息,当然,是用来消除DLL Hell。但是,另一个微软内部的小组发现了DDE的致命缺陷:这不是他们做的!

为了解决这个问题,他们创造了OLE(很像DDE,只是名字不一样),而且,我还记得在一次 Microsoft 大会上,某个微软的演讲者正式宣布—— Windows API 马上就会被 OLE API 所重写并取代,我还盲目地相信了这一说法。而且,所有的在图形界面的控件都会是OCX,那是OLE引入的接口,同样,其目的是为了消除DLL Hell。相信大家都记得,那个时候,我们是怎么地梦想着有一天,我们的应用程序(当然是非常大的程序)可以完全地被嵌入到Word文档中。

然而,在Microsoft的某处,Microsoft有些人开始信仰 C++,其确信MFC的出现并可以解决所有的一切问题,但是,因为历史原因,OLE并没有出局,其改了一个名字,叫COM,此时,我们立马意识到OLE(以前的DDE?)真正意味着什么——其用精心的版本管理系统来消除DLL Hell。与此同时,Microsoft的一个变节小组发现了一个MFC的致命缺陷:这不是他们做的!

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (55 人打了分,平均分: 4.13 )
Loading...
McAfee误杀svchost.exe

McAfee误杀svchost.exe

这两天,杀毒软件又出事了。还记得2007年5月,那次是Norton把简体中文Windows下的netapi32.dll 和 lsasrv.dll。最近的一次是,2008年11月,AVG把user32.dll给干掉了。

这次是McAfee的5958版病毒库,导致McAfee误杀了Windows XP SP3下的svchost.exe,这最终导致了Windows不断地重复启动,据说有数十万PC成了小白鼠。简单地到Twitter和各国外技术社区看看,真是受灾严重啊。

下面是出错信息:

The file C:WINDOWS\system32\svchost.exe contains the W32/Wecorl.a Virus.
Undetermined clean error, OAS denied access and continued.
Detected using Scan engine version 5400.1158 DAT version 5958.0000.

其实,可能大家都误解了,McAfee把svchost.exe识别为一个恶意程序,我觉得这是一种“实事求是”的态度啊,svchost.exe难道不是Windows下的万恶之源吗?多少年来,svchost.exe成为了多少病毒,木马和流氓程序的温床,这么多年过去了,Windows用户们默默地承受着svchost.exe所带来的痛苦,经过这么长的时间,只有McAfee不惧M$的淫威第一个站出来把svchost.exe揪出来办了,这是一种什么样的精神啊……

好烂啊有点差凑合看看还不错很精彩 (22 人打了分,平均分: 3.95 )
Loading...
微软的安全补丁分析

微软的安全补丁分析

截止至2009年底,大约有90%的微软安全补丁是把管理员权限给disable了。根据 BeyondTrust的报告,到今年3月分,Windows 7 有57%的安全补丁是以移除管理员权限作为解决方法的,相比较而言,Windows 2000 是 53%,Windows XP 是 62%,Windows Server 2003 是 55%,Windows Vista 是 54% 以及 Windows Server 2008 是 53%,而最牛的要算是 —— 100% 的 Microsoft Office 和 94%  Internet Explorer (其中100% 的 IE8 )的安全补丁是移除管理员权限。

这对于某些公司的IT部门来说是个好消息,因为这些公司的IT部门通常是不会让公司的员工有本机的管理员权限的,根据微软大量的安全补丁是移除某些管理员权限的这一特性,这意味着对于本机只有一般用户权限IT管理,将会防住很大一部份的恶意攻击。

Paul Cooke, Windows Client Enterprise Security主管说:“我们相信,如果你只是用一般用户来操作Windows的话,这会是一种很好的方式”。而这一提法,相对于Unix的尽可能的不用root用户操作系统这一观点,整整落后了几十年,Windows的用户很习惯于在Administrator下操作系统,这样,一旦中招,任何程序都以系统管理员的权限运行,所以结果也是毁灭性的。这样操作电脑的方式对于Unix的用户来说简直是不可想像的,因为在Unix下,99%的情况下,操作者都不会使用管理员的账号。

还记得以前和朋友的一段对话:

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (15 人打了分,平均分: 3.47 )
Loading...
Windows 7 的新粉丝 Linus Torvalds

Windows 7 的新粉丝 Linus Torvalds

正当Windows 7 开始热卖的时候,正当广大北美用户抱怨Windows 7的销售价格,在东方要比西方便宜很多的时候。我们著名的Linus Torvalds来到了日本东京的一个软件商店里“庆祝Windows 7的Release”,难道他是去那里买一份便宜的Windows 7?

Linus Torvalds 在一个日本的软件商店

Linus Torvalds, 图片来自一个未经确认的 Yodobashi 商店, Tokyo, Japan. 来源: Jim Zemlin/The Linux Foundation (点击看大图)

这个图片目前还没有新闻报道,不过已有很多来源可以参考了……

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (11 人打了分,平均分: 3.18 )
Loading...
Windows下和程序员相关小工具

Windows下和程序员相关小工具

1 HOUR SOFTWARE – 很多的小工具集

.NET Memory Profiler – 可以找出.NET程序中的内存泄露问题,并找出可优化的内存。

.NET Reflector – 查看,导航,搜索.NET汇编中的类的继承关系。

Active Webcam – Webcam 视频监视软件。

ArsClip – 剪贴版管理程序,可以跟踪每次剪贴版中的内容,并可以通过设置热键,取出粘贴其中的内容。

ASP2ASPX – 转换ASP 程序页到ASP.NET

AutoHotKey – 自动点击键盘和鼠标。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (14 人打了分,平均分: 3.00 )
Loading...