关于作者

用户名:larryzhu
笔名:朱之光
地区: 上海
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



google ad

访问统计:
文章个数:206
评论个数:24
留言条数:4




Powered by BlogDriver 2.1

WHED-Work Hard Every Day!

 

记录人生点点滴滴

文章

Staged Event Driven Architecture (SEDA) 介绍
摘要:Staged Event Driven Architecture (SEDA) 是加州大学伯克利分校研究的一套优秀的高性能互联网服务器架构模型。其设计目标是:支持大规模并发处理、简化系统开发、支持处理监测、支持系统资源管理。本文会先对两种目前被广泛使用的网络服务器架构模型进行介绍。然后对SEDA进行详细描述。 查看全文

- 作者: 朱之光 2008年08月12日, 星期二 16:31  回复(0) |  引用(0) 加入博采

Emacs 基本概念和基本命令

Emacs 基本概念和基本命令

作者:朱之光

Emacs有两个最重要的概念:Buffer和Window。

Buffer表示一份数据。可以是文件加载到内存后形成,也可以是一个尚未命名的草稿(类似MFC中的CDocument)

Window是显示Buffer的界面区,同时也是用户编辑Buffer的界面。整个Emacs界面就是由多个Window组成。(类似MFC中的View)

Emacs可以同时打开多个Buffer,用户可以自己确定哪些Buffer显示/隐藏。一个Window同一时间只能显示一个Buffer,但一个Buffer可以同时显示在多个Window上。(类似MFC中的多文档/多视图)

如下图所示:

Emacs提供了丰富的命令来进行相关操作。

Buffer commands:
 C-x C-f  Find file
 C-x C-s  Save file
 C-x k  Close file
 C-x s  Save some buffers
 C-x C-b  List buffers
 C-x b  Switch buffer

Editing commands:
 C-x u  Undo
 C-_  Undo
 C-s   forward search
 C-r   reverse search
 M-x replace-string/replace-regexp
   replace string/regexp
 M-%  replace while searching

Window commands:
 C-x o  Switch between windows
 C-x 1  Delete all but one window
 C-x 2  HSplit current window into 2 windows
 C-x 3  VSplit current window into 2 windows

System commands:
 C-x C-c  Quit Emacs

- 作者: 朱之光 2008年08月3日, 星期日 09:22  回复(0) |  引用(0) 加入博采

Vim编辑器配合ctags实现函数原型快速定位介绍 (摘)

Vim编辑器配合ctags实现函数原型快速定位介绍 (摘)

找一个源码目录,在终端上运行如下命令,会生成一个tags文件。

ctags -R

然后打开vi,输入类似如下的指令,tags=后面为刚才生成的tags文件的全路径名。
:set tags=/Your/Path/To/tags

或者 vim -t /Your/Path/To/tags

然后就可以尝试跳转了。如果是经常使用的工程,将上面的set一行写在你的.vimrc文件里即可。

查阅标识符原型:
光标移动到标识符上,按下Ctrl-]键。Vim会打开原型声明所在的文件,并定位到具体的行列。

Ctrl-t键,Vim将跳回刚才的位置。

g]键(先按g再按]):如果有同名的多个tag,可以用这两个键进行跳转,会提示选择序号。

- 作者: 朱之光 2008年07月30日, 星期三 17:58  回复(0) |  引用(0) 加入博采

vi 替换命令用法详解 (转)

vi 替换命令用法详解 (转)

转自:http://www.domsn.net/exurl.php/reply/641.html

格式
:[range]s/[pattern1]/[pattern2]/[g]

说明:

1、range 是命令执行范围的指定,可以使用百分号(%)表示所有行,使用点(.)表示当前行,使用美元符号($)表示最后一行。你还可以使用行号,例如10,20表 示第10到20行,.,$表示当前行到最后一行,.+2,$-5表示当前行后两行直到全文的倒数第五行,等等。

2、s 表示其后是一个替换命令。

3、pattern1 这是要查找的一个正则表达式,这篇文章中有一大堆例子。

4、pattern2 这是希望把匹配串变成的模式的正则表达式,这篇文章中有一大堆例子。

5、g 可选标志,带这个标志表示替换将针对行中每个匹配的串进行,否则则只替换行中第一个匹配串。

- 作者: 朱之光 2008年07月30日, 星期三 15:58  回复(0) |  引用(0) 加入博采

apt-get 介绍

apt的镜像源存放在/etc/apt/sources.list中。可以根据所在地区网络情况对文件进行修改。

http://ubuntu.cn99.com/ubuntu/对于中国地区速度非常理想。

apt-get命令介绍

apt-get update
更新同步本地package数据库。(每次修改/etc/apt/sources.list后需要执行)

apt-get clean && apt-get autoclean
清除本地package缓存

apt-get upgrade
尝试更新本地已经安装的所有package

apt-get dist-upgrade
更新整个发布版本到另外一个版本

apt-get dselect-upgrade
dselect更新

apt-get install mozilla-firefox
安装package

apt-get remove mozilla-firefox
删除package

apt-get --purge remove mozilla-firefox
删除package,包括所有配置文件

apt-get source mozilla-firefox
获取源码

apt-get build-dep mozilla-firefox
更新源码包依赖的源码

- 作者: 朱之光 2008年07月21日, 星期一 14:19  回复(0) |  引用(0) 加入博采

OpenSSL 编译

OpenSSL 编译

作者:朱之光

步骤:

1、安装Perl;

2、下载OpenSSL并解压到e:\work\openssl;

3、启动VS command prompt控制台;

4、cd e:\work\openssl

5、perl Configure VC-WIN32 --prefix=d:\openssl

6、ms\do_ms.bat

7、修改ms\nt.mak和ms\ntdll.mak

去掉CFLAG定义中的/WX。(/WX表示treat warning as error,该开关会导致openssl无法编译)

8、执行编译

nmake -f ms\nt.mak install             <-- Static Library

nmake -f ms\ntdll.mak install         <-- Dynamic Library

注意:
如果跳过第7步,会导致编译错误。如下:
.\crypto\cversion.c(105) : error C2220: warning treated as error - no 'object' file generated

- 作者: 朱之光 2008年07月17日, 星期四 16:32  回复(0) |  引用(0) 加入博采

.Net Framework自带的微型WebServer

.Net Framework自带的微型WebServer

在调试Asp.net网站程序的时候VS会启动一个WebServer协助调试,而不需要使用IIS。

这个WebServer就是随同.Net Framework一起发布的WebDev.WebServer。下面是其使用方法。

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\WebDev.WebServer.EXE /port:1091 /path:"" /vpath:"/MyApp"

这个WebServer甚至可以随同你自己的应用程序一起发布:)。

使用限制:

WebDev.WebServer.exe仅接受本机访问。

- 作者: 朱之光 2008年07月13日, 星期日 19:32  回复(0) |  引用(0) 加入博采

Singleton -- fully lazy instantiation

Singleton -- fully lazy instantiation

public sealed class Singleton
{
    Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            return Nested.instance;
        }
    }
    
    class Nested
    {
        // Explicit static constructor to tell C# compiler
        // not to mark type as beforefieldinit
        static Nested()
        {
        }

        internal static readonly Singleton instance = new Singleton();
    }
}

- 作者: 朱之光 2008年06月30日, 星期一 18:03  回复(0) |  引用(0) 加入博采

OpenMP 介绍

OpenMP 介绍

 

作者:朱之光 (larry1zhu@gmail.com)

 

1、  简介

2、  Hello world!

3、  循环优化

4、  其他

5、  参考网址

 

简介

OpenMP是一种面向共享内存以及分布式共享内存的多处理器多线程并行编程接口。

SGI发起。官方网站www.openmp.org

 

Microsoft VC++ 从版本2005起加入了OpenMP支持。使得我们可以很轻易的写出并行运算的程序。

 

先看一个简单例子(Hello world!)

1、  创建一个简单的Windows Console工程;

2、  启用OpenMP支持

工程属性->C/C++->Language->OpenMP Support: Yes

3、  编写如下代码

  

4、  执行结果

5、  调整并行执行数量

设置环境变量:OMP_NUM_THREADS=10

(设置10个并行执行线程,也可以在程序内部调用omp_set_threads_num(10);实现。)

6、  再执行一次

  

下面对程序进一步说明。

1、  OpenMP需要包含omp.h,启用OpenMP支持后,编译器会自动引用vcomp.lib

2、  #pragma omp parallel是一个编译器指引,指导编译器生成相应代码;

3、  #pragma omp parallel 告诉编译器,后面{}中的程序块需要分配多个线程并行执行;

#pragma omp parallel

{

//此处的程序块会被多个线程并行执行

}

4、  进入程序块后OpenMP库代码会被执行,最终产生OMP_NUM_THREADS个工作线程,并行执行程序块中的代码;

5、  只有所有线程都执行完后才会结束程序块,执行后面的代码。后面的代码将是单线程执行;

 

 

循环优化

循环优化是并行计算中的重要课题。OpenMP对循环优化提供了部分支持。

参看如下代码:

由于程序设置了并行线程数量为3,所以0-100的循环会被分割为三个部分:0-3334-6667-100。分别由三个线程并发执行。

结果如下:

 

 

其他

并行计算和多线程编程一样,主要需要考虑两个问题:数据访问的互斥和线程间的同步

OpenMP对此提供了相应的支持。请参考文后提供的网址。

 

 

参考网址

http://msdn.microsoft.com/en-us/library/tt15eb9t.aspx

 

- 作者: 朱之光 2008年06月10日, 星期二 15:29  回复(0) |  引用(0) 加入博采

Raid 介绍
摘要:Raid 0, Raid 1, Raid 5 介绍 查看全文

- 作者: 朱之光 2008年05月21日, 星期三 17:43  回复(0) |  引用(0) 加入博采

英文中精确时间表示

second                1 sec

millisecond          10^-3 sec

microsecond        10^-6 sec

nanosecond        10^-9 sec

- 作者: 朱之光 2008年05月6日, 星期二 10:16  回复(0) |  引用(0) 加入博采

Windows消息机制要点 (转)
摘要:1. 窗口过程 每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:窗口句柄(Window Handle),消息ID(Message ID),和两个消息参数(wParam, lParam), 当窗口收到消息时系统就会调用此窗口过程来处理消息。(所以叫回调函数) 查看全文

- 作者: 朱之光 2008年04月30日, 星期三 06:25  回复(0) |  引用(0) 加入博采

.Net下使用脚本技术

.Net下使用脚本技术

作者:朱之光 http://larryzhu.bokee.com

脚本技术可以带来极大的灵活性。可以代替配置文件,可以支持用户自定义业务流程。

本文将讨论其中两种脚本技术:Microsoft Script Control Vsa

1. 基于Microsoft Script Control

该方法通过引入Microsoft Script Control,来负责执行VBScriptJscript脚本。

优点:易于使用,可以很方便的访问其他COM组件。支持常用的vbscrip, jscript脚本语法。

缺点:不能直接访问.Net对象,仅可访问具有COM Visible属性的类的实例。

下面是操作示例:

第一步,建立一个C# Windows Form Application工程;

第二步,添加COM引用;

效果

接下来就可以在工程中使用了。

实例代码:

[ComVisible(true)] //Form1具有ComVisible属性

[ClassInterface(ClassInterfaceType.AutoDispatch)]

public partial class Form1 : Form

{

ScriptControlClass script = new ScriptControlClass(); //创建script引擎对象

public Form1()

{

InitializeComponent();

script.Language = "jscript"; //设置语言

}

private void button2_Click(object sender, EventArgs e)

{

script.ExecuteStatement(richTextBox1.Text);

}

private void button1_Click(object sender, EventArgs e)

{

script.AddObject("form", this, true); //this加入script引用范围。

script.ExecuteStatement("form.Left = form.Left - 100;"); //执行该脚本会让当前窗口左移100像素。

}

}

2. 基于VSA (Visual Studio for Applications)

VSA是微软提出的用于代替VBA的一套新的脚本程序架构。参考:http://msdn2.microsoft.com/en-us/magazine/cc301954.aspx

VSA建立在强大的.Net平台之上,实际的脚本语言为Jscript.Net。脚本会被动态编译为assembly再执行。

优点:脚本将被编译成assembly,可以无缝访问.Net对象;assembly会被JIT成为本地代码,执行效率高;

缺点:使用较为复杂;脚本必须写成符合Jscript.Net语法。

首先需要添加如下引用

将以下代码保存为ScriptingHost.cs

http://cid-a1aae4940c5d7eca.skydrive.live.com/self.aspx/larryzhu_blog/ScriptHost.cs

调用代码:

// create a new host factory

VsaScriptingHostFactory _factory = new VsaScriptingHostFactory();

// create a new set of hosts

//test1.js将会被加载执行

VsaScriptingHost[] hosts = _factory.Create(@"MyScriptingHost", @"Scripting", true, Application.StartupPath + "\\" + "test1.js");

// wire up to the events of each host

foreach(VsaScriptingHost host in hosts)

{

//event处理

host.AssemblyReferencesNeeded += new ScriptingHostEventHandler(OnAssemblyReferencesNeeded);

host.CompilerException += new ScriptingHostCompilerExceptionEventHandler(OnCompilerException);

host.GlobalItemsNeeded += new ScriptingHostEventHandler(OnGlobalItemsNeeded);

}

// execute the hosts

foreach (VsaScriptingHost host in hosts)

{

host.Execute();

}

以下是test1.js文件内容。Jscript.Net语法

===============================================================================

import System;

import System.Diagnostics;

import System.ComponentModel;

import System.Windows.Forms;

// declare an instance of the Scriptlet type, and create a new instance all at once

var scriptlet : Scriptlet = new Scriptlet;

// call the main method to get things running inside the class,

// i just don't like top-down sequential execution

// outside of classes, it just seems archaic to me

scriptlet.Main();

///

/// The Scriptlet class contains methods to redirect script flow from sequential into a class controlled flow

///

public class Scriptlet // extends Scriptlet

{

///

/// Initializes a new instance of the Scriptlet class

///

function Scriptlet()

{

}

///

/// The main method that channels script flow into the class

///

function Main() : void

{

Debug.WriteLine("This information is being written to the Debug output from a script!!!");

Debug.WriteLine(_scriptingHost.VsaEngine.RootMoniker);

// change the title of the window

_scriptableForm.Text = "Scriptable Window";

// add a menu item

_scriptableForm.FileMenu.MenuItems[0].MenuItems.Add("Scripted Menu Item");

// wire up to some events on the form

_scriptableForm.add_Closing(this.ScriptableForm_Closing);

MessageBox.Show("aaa");

}

///

/// Intercepts the closing event from the form

///

function ScriptableForm_Closing(sender : Object, e : CancelEventArgs) : void

{

// prompts the user and confirms

if (MessageBox.Show("Are you sure you want to exit?", "Exit Confirmation",

MessageBoxButtons.YesNo,

MessageBoxIcon.Question) == DialogResult.No)

e.Cancel = true;

}

}

===============================================================================

- 作者: 朱之光 2008年04月29日, 星期二 17:59  回复(0) |  引用(0) 加入博采

TCP 协议中的流量控制 (转)

TCP 协议中的流量控制 (转)

 

TCP协议上的网络协议特别

1)交互数据类型,例如teletssh,这种类型的协议在大多数情况下只是做小流量的数据交换,比如说按一下键盘,回显一些文字等等。

(2)数据成块类型,例如ftp,这种类型的协议要求TCP能尽量的运载数据,把数据的吞吐量做到最大,并尽可能的提高效率。针对这两种情况,TCP给出了两种不同的策略来进行数据传输。

 

1. TCP的交互数据

1.1.捎带ACK的发送方式

这个策略是说,当主机收到远程主机的TCP数据报之后,通常不马上发送ACK数据报,而是等上一个短暂的时间,如果这段时间里面主机还有发送到远程主机的TCP数据报,那么就把这个ACK数据报捎带着发送出去,把本来两个TCP数据报整合成一个发送。一般的,这个时间是200ms。可以明显地看到这个策略可以把TCP数据报的利用率提高很多。

1.2.Nagle算法

当主机A给主机B发送了一个TCP数据报并进入等待主机BACK数据报的状态时,TCP的输出缓冲区里面只能有一个TCP数据报,并且,这个数据报不断地收集后来的数据,整合成一个大的数据报,等到B主机的ACK包一到,就把这些数据一股脑的发送出去

 

 

2.TCP的成块数据