<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>庆亮的博客</title>
	<atom:link href="http://www.qingliangcn.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.qingliangcn.com</link>
	<description>关注LAMP&#124;PHP源代码分析&#124;web架构&#124;PHP扩展&#124;Erlang&#124;服务端架构</description>
	<lastBuildDate>Wed, 10 Mar 2010 08:05:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Erlang中日志管理三两话</title>
		<link>http://www.qingliangcn.com/2010/03/erlang%e4%b8%ad%e6%97%a5%e5%bf%97%e7%ae%a1%e7%90%86%e4%b8%89%e4%b8%a4%e8%af%9d/</link>
		<comments>http://www.qingliangcn.com/2010/03/erlang%e4%b8%ad%e6%97%a5%e5%bf%97%e7%ae%a1%e7%90%86%e4%b8%89%e4%b8%a4%e8%af%9d/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 08:05:42 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Erlang]]></category>
		<category><![CDATA[ejabberd]]></category>
		<category><![CDATA[sasl]]></category>
		<category><![CDATA[动态日志]]></category>
		<category><![CDATA[日志]]></category>

		<guid isPermaLink="false">http://www.qingliangcn.com/?p=242</guid>
		<description><![CDATA[日志系统的重要性就不罗嗦了，直接开始吧。
&#160;
一、基本概念
&#160;
在Erlang中，通过两个概念管理错误事情：事件管理器(event manager)和事件处理句柄(event handles)。通常各种错误、警告和消息事件都会有Erlang运行时系统发送给事件管理器。在Erlang中，默认的事情管理器为error logger，其进程名注册为error_logger。默认情况下error_logger把这些事件直接输出到控制台上。
&#160;
&#160;&#160;&#160;&#160;&#160;&#160; 在系统启动的一开始，error_logger只有一个简单的事件处理句柄，该处理句柄只是做缓冲和原始格式的打印操作。查看error_logger的源码，可以看到其启动过程如下：
&#160;
-spec start() -&#62; {&#39;ok&#39;, pid()} &#124; {&#39;error&#39;, any()}.
&#160;
start() -&#62;
&#160;&#160;&#160; case gen_event:start({local, error_logger}) of
&#160;&#160;&#160; {ok, Pid} -&#62;
&#160;&#160;&#160; &#160;&#160;&#160; simple_logger(?buffer_size),
&#160;&#160;&#160; &#160;&#160;&#160; {ok, Pid};
&#160;&#160;&#160; Error -&#62; Error
&#160;&#160;&#160; end.
&#160;
-spec start_link() -&#62; {&#39;ok&#39;, pid()} &#124; {&#39;error&#39;, any()}.
&#160;
start_link() -&#62;
&#160;&#160;&#160; case gen_event:start_link({local, error_logger}) of
&#160;&#160;&#160; {ok, Pid} -&#62;
&#160;&#160;&#160; &#160;&#160;&#160; simple_logger(?buffer_size),
&#160;&#160;&#160; &#160;&#160;&#160; {ok, Pid};
&#160;&#160;&#160; Error -&#62; Error
end.
&#160;
OK，只是简单的注册了一个进程，看看simple_logger的内容：
&#160;
simple_logger(Buffer_size) when is_integer(Buffer_size) -&#62;
gen_event:add_handler(error_logger, [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'"><font color="#000000" size="3">日志系统的重要性就不罗嗦了，直接开始吧。</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt; mso-list: l0 level1 lfo1"><font size="3"><font color="#000000"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: ignore"><font face="Times New Roman">一、</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">基本概念</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">在</span><span lang="EN-US"><font face="Times New Roman">Erlang</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">中，通过两个概念管理错误事情：事件管理器</span><span lang="EN-US"><font face="Times New Roman">(event manager)</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">和事件处理句柄</span><span lang="EN-US"><font face="Times New Roman">(event handles)</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">。通常各种错误、警告和消息事件都会有</span><span lang="EN-US"><font face="Times New Roman">Erlang</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">运行时系统发送给事件管理器。在</span><span lang="EN-US"><font face="Times New Roman">Erlang</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">中，默认的事情管理器为</span><span lang="EN-US"><font face="Times New Roman">error logger</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">，其进程名注册为</span><span lang="EN-US"><font face="Times New Roman">error_logger</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">。默认情况下</span><span lang="EN-US"><font face="Times New Roman">error_logger</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">把这些事件直接输出到控制台上。<span id="more-242"></span></span></font></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">在系统启动的一开始，</span><span lang="EN-US"><font face="Times New Roman">error_logger</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">只有一个简单的事件处理句柄，该处理句柄只是做缓冲和原始格式的打印操作。查看</span><span lang="EN-US"><font face="Times New Roman">error_logger</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">的源码，可以看到其启动过程如下：</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">-</span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">spec</span></b><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> start() -&gt; {&#39;ok&#39;, pid()} | {&#39;error&#39;, any()}</span><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt">.</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">start() -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">case</span></b><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> gen_event:start({local, error_logger}) </span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">of</span></b><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>{ok, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Pid</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">} -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>simple_logger(?buffer_size),</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>{ok, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Pid</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">};</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Error</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> -&gt; </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Error</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">end</span></b><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt">.</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">-</span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">spec</span></b><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> start_link() -&gt; {&#39;ok&#39;, pid()} | {&#39;error&#39;, any()}</span><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt">.</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">start_link() -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">case</span></b><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> gen_event:start_link({local, error_logger}) </span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">of</span></b><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>{ok, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Pid</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">} -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>simple_logger(?buffer_size),</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>{ok, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Pid</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">};</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Error</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> -&gt; </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Error</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">end</span></b><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt">.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><font size="3"><span lang="EN-US"><font face="Times New Roman">OK</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">，只是简单的注册了一个进程，看看</span></font><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">simple_logger</span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'"><font size="3">的内容：</font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">simple_logger(</span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Buffer_size</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">) </span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">when</span></b><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> is_integer(</span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Buffer_size</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">) -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">gen_event:add_handler(error_logger, error_logger, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Buffer_size</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">)</span><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt">.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">看来</span><span lang="EN-US"><font face="Times New Roman">error_logger</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">在一开始的时候除了充当</span><span lang="EN-US"><font face="Times New Roman">manager</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">，也担当了</span><span lang="EN-US"><font face="Times New Roman">handler</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">的角色。</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">在启动的过程中，</span><span lang="EN-US"><font face="Times New Roman">kernel application</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">使用一个标准的事件处理句柄来代替之前的那个简单版本，这个版本会将输出到控制台的结果做个漂亮的格式化。当然，可以通过</span><span lang="EN-US"><font face="Times New Roman">kernel</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">的配置选项来修改上述行为，例如将结果输出到文件或者干脆什么都不干（忽略任何</span><span lang="EN-US"><font face="Times New Roman">event</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">）。口说无凭，还是继续看源码吧：</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">kernel.erl</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">文件：</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">start(</span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">_</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">, []) -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">case</span></b><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> supervisor:start_link({local, kernel_sup}, kernel, []) </span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">of</span></b><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>{ok, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Pid</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">} -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Type</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> = get_error_logger_type(),</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>error_logger:swap_handler(</span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Type</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">),</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>{ok, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Pid</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">, []};</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Error</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> -&gt; </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Error</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">end</span></b><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt">.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><font size="3"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">首先，</span><span lang="EN-US"><font face="Times New Roman">kernel</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">把自己注册为一个名为</span></font><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">kernel_sup</span></font><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: 'courier new'; mso-hansi-font-family: 'courier new'; mso-font-kerning: 0pt; mso-bidi-font-family: 'courier new'">的监控树进程，其次立刻就更换了</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">error_logger</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: 'courier new'; mso-hansi-font-family: 'courier new'; mso-font-kerning: 0pt; mso-bidi-font-family: 'courier new'">的处理句柄。</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">go on</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: 'courier new'; mso-hansi-font-family: 'courier new'; mso-font-kerning: 0pt; mso-bidi-font-family: 'courier new'">：</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">get_error_logger_type() -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">case</span></b><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> application:get_env(kernel, error_logger) </span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">of</span></b><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>{ok, tty} -&gt; tty;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>{ok, {file, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">File</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">}} </span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">when</span></b><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> is_list(</span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">File</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">) -&gt; {logfile, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">File</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">};</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>{ok, false} -&gt; false;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>{ok, silent} -&gt; silent;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>undefined -&gt; tty; </span><span lang="EN-US" style="font-family: 'courier new'; color: firebrick; font-size: 10pt; mso-font-kerning: 0pt">% default value</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>{ok, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Bad</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">} -&gt; exit({bad_config, {kernel, {error_logger, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Bad</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">}}})</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">end</span></b><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt">.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'"><font color="#000000" size="3">代码很容易理解，根据配置来决定以何种方式处理日志。</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt; mso-list: l0 level1 lfo1"><font size="3"><font color="#000000"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: ignore"><font face="Times New Roman">二、</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">定制</span><span lang="EN-US"><font face="Times New Roman">Kernel</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">选项</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'"><font color="#000000" size="3">继续接着上面的代码往下走：</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">swap_handler(tty) -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>gen_event:swap_handler(error_logger, {error_logger, swap},</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>{error_logger_tty_h, []}),</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>simple_logger();</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">swap_handler({logfile, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">File</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">}) -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>gen_event:swap_handler(error_logger, {error_logger, swap},</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>{error_logger_file_h, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">File</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">}),</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>simple_logger();</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">swap_handler(silent) -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>gen_event:delete_handler(error_logger, error_logger, delete),</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>simple_logger();</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">swap_handler(false) -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">ok</span><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt">.</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> </span><span lang="EN-US" style="font-family: 'courier new'; color: firebrick; font-size: 10pt; mso-font-kerning: 0pt">% keep primitive event handler as-is<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; color: firebrick; font-size: 10pt; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">可以看出，如果我们真的希望什么都不做，那么应该传递参数</span><span lang="EN-US"><font face="Times New Roman"> silent</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">，而不是</span><span lang="EN-US"><font face="Times New Roman">false</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">，因为</span><span lang="EN-US"><font face="Times New Roman">false</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">情况下原来的原始处理句柄并没有被移除掉。</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">打开命令提示符，做个简单的实验</span><span lang="EN-US"><font face="Times New Roman">(&gt;</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">表示命令提示符</span><span lang="EN-US"><font face="Times New Roman">)</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">：</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><b style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">实验一，定制为</span><span lang="EN-US"><font face="Times New Roman">false</font></span></b><b style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">参数：</span><span lang="EN-US"><o:p></o:p></span></b></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">&gt; erl -kernel error_logger false<span style="mso-spacerun: yes">&nbsp; </span>//</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">传递</span><span lang="EN-US"><font face="Times New Roman">false</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">参数</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">2&gt; error_logger:error_msg(&quot;Haha&quot;). <span style="mso-spacerun: yes">&nbsp;</span>// </font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">尝试产生一个</span><span lang="EN-US"><font face="Times New Roman">error event</font></span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><font color="#000000" face="Times New Roman" size="3">ok{error_logger,{{</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">2010,2&gt; 3,10},{15,9,1}},&quot;Haha&quot;,[]}<span style="mso-spacerun: yes">&nbsp; </span>//</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">这里是结果</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><b style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">实验二，定制为</span><span lang="EN-US"><font face="Times New Roman">silent</font></span></b><b style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">参数：</span><span lang="EN-US"><o:p></o:p></span></b></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">&gt; erl -kernel error_logger silent<span style="mso-spacerun: yes">&nbsp; </span>//</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">传递</span><span lang="EN-US"><font face="Times New Roman">silent </font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">参数</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><font color="#000000" face="Times New Roman" size="3">1&gt;<span style="mso-spacerun: yes">&nbsp; </span>error_logger:error_msg(&quot;Haha&quot;).</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">ok<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>// </font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">看到这里只有</span><span lang="EN-US"><font face="Times New Roman">ok</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">，没有其他任何信息了！</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><font color="#000000" face="Times New Roman" size="3">2&gt;</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt; mso-list: l0 level1 lfo1"><font face="Times New Roman"><font size="3"><font color="#000000"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: ignore">三、</span></span><span lang="EN-US">SASL</span></font></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">SASL</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">全称</span><span lang="EN-US"><font face="Times New Roman">System Architecture Support Libraries</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">，提供如下几个服务：</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US" style="mso-font-kerning: 0pt"><font face="Times New Roman">alarm_handler</font></span><span lang="EN-US" style="font-family: 'verdana', 'sans-serif'; mso-font-kerning: 0pt"> <o:p></o:p></span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US" style="mso-font-kerning: 0pt"><font face="Times New Roman">overload</font></span><span lang="EN-US" style="font-family: 'verdana', 'sans-serif'; mso-font-kerning: 0pt"> <o:p></o:p></span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US" style="mso-font-kerning: 0pt"><font face="Times New Roman">rb</font></span><span lang="EN-US" style="font-family: 'verdana', 'sans-serif'; mso-font-kerning: 0pt"> <o:p></o:p></span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US" style="mso-font-kerning: 0pt"><font face="Times New Roman">release_handler</font></span><span lang="EN-US" style="font-family: 'verdana', 'sans-serif'; mso-font-kerning: 0pt"> <o:p></o:p></span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font face="Times New Roman"><font size="3"><font color="#000000"><span lang="EN-US" style="mso-font-kerning: 0pt">systools</span><span lang="EN-US" style="font-family: 'verdana', 'sans-serif'; mso-font-kerning: 0pt"><o:p></o:p></span></font></font></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">SASL</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">带有</span><span lang="EN-US"><font face="Times New Roman">error_logger</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">的事件处理句柄用于格式化</span><span lang="EN-US"><font face="Times New Roman">SASL</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">错误和</span><span lang="EN-US"><font face="Times New Roman">crash</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">报告，这些句柄如下：</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span class="code"><span lang="EN-US"><font face="Courier"><font size="3"><font color="#000000">sasl_report_tty_h<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>sasl_report_file_h<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>error_logger_mf_h<o:p></o:p></font></font></font></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">细节参考</span><span lang="EN-US"><font face="Courier">OTP</font></span></span><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">文档可知。</span><span lang="EN-US"><o:p></o:p></span></span></font></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span class="code"><span lang="EN-US"><font face="Courier">SASL</font></span></span><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">的默认</span><span lang="EN-US"><font face="Courier">event handler</font></span></span><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">会将</span><span lang="EN-US"><font face="Courier">crash</font></span></span><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">报告、</span><span lang="EN-US"><font face="Courier">supervisor</font></span></span><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">和进程报告输出到控制台，如果你希望看到这些信息，那么在</span><span lang="EN-US"><font face="Courier">erlang</font></span></span><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">启动时需要加上指定的参数以启动</span><span lang="EN-US"><font face="Courier">sasl</font></span></span><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">。</span><span lang="EN-US"><o:p></o:p></span></span></font></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">为了方便日志的查看，通常</span><span lang="EN-US"><font face="Courier">sasl</font></span></span><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">和其他日志是分开输出的，可以在启动</span><span lang="EN-US"><font face="Courier">erl</font></span></span><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">时使用如下命令行参数：</span><span lang="EN-US"><o:p></o:p></span></span></font></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US"><font color="#000000" face="Times New Roman" size="3">-sasl sasl_error_logger {file,&quot;/data/ log/sasl.log&quot;}</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt; mso-list: l0 level1 lfo1"><font size="3"><font color="#000000"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: ignore"><font face="Times New Roman">四、</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">站在巨人的肩膀上</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">这里并不打算介绍一个</span><span lang="EN-US"><font face="Times New Roman">gen_event behavior</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">模块的写法，而是想介绍一个非常强大、成熟的一个日志系统：</span><span lang="EN-US"><font face="Times New Roman">ejabberd</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">的日志系统。它包含两个部分：</span></font></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">dynamic_compile.erl<span style="mso-spacerun: yes">&nbsp;&nbsp; </span></font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">动态编译基础模块</span></font></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">ejabberd_logger_h.erl<span style="mso-spacerun: yes">&nbsp; </span></font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">这是个</span><span lang="EN-US"><font face="Times New Roman">gen_event behavior</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">模块，可以定制我们写日志的行为</span></font></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">ejabberd_loglevel.h<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">这个是</span><span lang="EN-US"><font face="Times New Roman">ejabberd</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">日志系统的精华，可以在运行时动态调节日志的输出级别。</span></font></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'"><font color="#000000" size="3">用法很简单：</font></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">error_logger:add_report_handler(ejabberd_logger_h, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">LogPath</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">),</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">ejabberd_loglevel:set(</span><span lang="EN-US" style="font-family: 'courier new'; color: #5a5ab4; font-size: 10pt; mso-font-kerning: 0pt">4</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">)<span style="mso-tab-count: 1"> </span>//</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: 'courier new'; mso-hansi-font-family: 'courier new'; mso-font-kerning: 0pt; mso-bidi-font-family: 'courier new'">级别</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">4</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: 'courier new'; mso-hansi-font-family: 'courier new'; mso-font-kerning: 0pt; mso-bidi-font-family: 'courier new'">是</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">info</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: 'courier new'; mso-hansi-font-family: 'courier new'; mso-font-kerning: 0pt; mso-bidi-font-family: 'courier new'">日志</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'; mso-font-kerning: 0pt">原理很简单，利用</span><span lang="EN-US" style="mso-font-kerning: 0pt"><font face="Times New Roman">code</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'; mso-font-kerning: 0pt">模块的</span><span lang="EN-US" style="mso-font-kerning: 0pt"><font face="Times New Roman">load_binary</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'; mso-font-kerning: 0pt">来实现动态代码替换，但是确实非常强大，可以在需要的时候打开某些特定级别的日志，在系统负载高的时候或者不需要的时候关闭它。</span></font></font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2010/03/erlang%e4%b8%ad%e6%97%a5%e5%bf%97%e7%ae%a1%e7%90%86%e4%b8%89%e4%b8%a4%e8%af%9d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QQ群：PHP内核与扩展研究 48448818</title>
		<link>http://www.qingliangcn.com/2010/03/qq%e7%be%a4%ef%bc%9aphp%e5%86%85%e6%a0%b8%e4%b8%8e%e6%89%a9%e5%b1%95%e7%a0%94%e7%a9%b6-48448818/</link>
		<comments>http://www.qingliangcn.com/2010/03/qq%e7%be%a4%ef%bc%9aphp%e5%86%85%e6%a0%b8%e4%b8%8e%e6%89%a9%e5%b1%95%e7%a0%94%e7%a9%b6-48448818/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 01:45:36 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[暂未分类]]></category>

		<guid isPermaLink="false">http://www.qingliangcn.com/2010/03/qq%e7%be%a4%ef%bc%9aphp%e5%86%85%e6%a0%b8%e4%b8%8e%e6%89%a9%e5%b1%95%e7%a0%94%e7%a9%b6-48448818/</guid>
		<description><![CDATA[QQ群：PHP内核与扩展研究 48448818
PHP内核与扩展研究。加群请说明自己感兴趣领域或者擅长领域！否则一律不予通过，请谅
]]></description>
			<content:encoded><![CDATA[<p>QQ群：PHP内核与扩展研究 48448818<br />
PHP内核与扩展研究。加群请说明自己感兴趣领域或者擅长领域！否则一律不予通过，请谅</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2010/03/qq%e7%be%a4%ef%bc%9aphp%e5%86%85%e6%a0%b8%e4%b8%8e%e6%89%a9%e5%b1%95%e7%a0%94%e7%a9%b6-48448818/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>list comprehensions与list map性能对比</title>
		<link>http://www.qingliangcn.com/2010/02/list-comprehensions%e4%b8%8elist-map%e6%80%a7%e8%83%bd%e5%af%b9%e6%af%94/</link>
		<comments>http://www.qingliangcn.com/2010/02/list-comprehensions%e4%b8%8elist-map%e6%80%a7%e8%83%bd%e5%af%b9%e6%af%94/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 02:50:50 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Erlang]]></category>

		<guid isPermaLink="false">http://www.qingliangcn.com/?p=237</guid>
		<description><![CDATA[可以使用List&#160;comprehensions时不要&#160;使用map或者filter，简单的性能测试对比一下：

第一组，map和list&#160;comprehensions对比，代码如下：

%%map方式
-module(map_test).

-export([start/1]).

start(N)&#160;-&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;statistics(runtime),
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;erlang:statistics(wall_clock),
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;lists:map(fun&#160;(X)&#160;-&#62;&#160;X*X&#160;end,&#160;lists:seq(1,&#160;N)),
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{_,&#160;T1}&#160;=&#160;erlang:statistics(runtime),
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{_,&#160;T2}&#160;=&#160;erlang:statistics(wall_clock),
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;io:format(&#34;total&#160;times:&#160;~p,&#160;load&#160;time:&#160;~p&#160;(~p)&#34;,&#160;[N,&#160;T1,&#160;T2]).



%%list&#160;comprehensions方式

-module(list_comp_test).

-export([start/1]).

start(N)&#160;-&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;statistics(runtime),
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;erlang:statistics(wall_clock),
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[X*X&#160;&#124;&#124;&#160;X&#160;&#60;-&#160;lists:seq(1,&#160;N)],
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{_,&#160;T1}&#160;=&#160;erlang:statistics(runtime),
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{_,&#160;T2}&#160;=&#160;erlang:statistics(wall_clock),
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;io:format(&#34;total&#160;times:&#160;~p,&#160;load&#160;time:&#160;~p&#160;(~p)&#34;,&#160;[N,&#160;T1,&#160;T2]).

测试N为1000000时结果对比：



结果取得是平均值，可以很明显的看出comprehension方式性能要高。

关于filter，则类似。不再作测试。

]]></description>
			<content:encoded><![CDATA[<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'">可以使用</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'">List&nbsp;comprehensions</span><span style="font-family: '新宋体'; font-size: 10pt; mso-spacerun: 'yes'">时不要</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'">使用<font face="Courier New">map</font><font face="新宋体">或者</font><font face="Courier New">filter</font><font face="新宋体">，简单的性能测试对比一下：</font></span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'">第一组，<font face="Courier New">map</font><font face="新宋体">和</font><font face="Courier New">list&nbsp;comprehensions</font><font face="新宋体">对比，代码如下：</font></span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">%%map<font face="新宋体">方式</font></span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">-module(map_test)</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">-export([start/</span><span style="font-family: 'courier new'; color: rgb(90,90,180); font-size: 10pt; mso-spacerun: 'yes'">1</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">])</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">start(</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">N</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statistics(runtime),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;erlang:statistics(wall_clock),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lists:map(</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">fun</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;(</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">X</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">X</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">*</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">X</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">end</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;lists:seq(</span><span style="font-family: 'courier new'; color: rgb(90,90,180); font-size: 10pt; mso-spacerun: 'yes'">1</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">N</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">_</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">T1</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;=&nbsp;erlang:statistics(runtime),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">_</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">T2</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;=&nbsp;erlang:statistics(wall_clock),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;io:format(</span><span style="font-family: 'courier new'; color: rgb(188,143,143); font-size: 10pt; mso-spacerun: 'yes'">&quot;total&nbsp;times:&nbsp;~p,&nbsp;load&nbsp;time:&nbsp;~p&nbsp;(~p)&quot;</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;[</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">N</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">T1</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">T2</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">])</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">%%list&nbsp;comprehensions<font face="宋体">方式</font></span><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">-module(list_comp_test)</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">-export([start/</span><span style="font-family: 'courier new'; color: rgb(90,90,180); font-size: 10pt; mso-spacerun: 'yes'">1</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">])</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">start(</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">N</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statistics(runtime),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;erlang:statistics(wall_clock),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">X</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">*</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">X</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;||&nbsp;</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">X</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&lt;-&nbsp;lists:seq(</span><span style="font-family: 'courier new'; color: rgb(90,90,180); font-size: 10pt; mso-spacerun: 'yes'">1</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">N</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)],</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">_</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">T1</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;=&nbsp;erlang:statistics(runtime),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">_</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">T2</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;=&nbsp;erlang:statistics(wall_clock),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;io:format(</span><span style="font-family: 'courier new'; color: rgb(188,143,143); font-size: 10pt; mso-spacerun: 'yes'">&quot;total&nbsp;times:&nbsp;~p,&nbsp;load&nbsp;time:&nbsp;~p&nbsp;(~p)&quot;</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;[</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">N</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">T1</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(0,128,0); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">T2</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">])</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'">测试<font face="Courier New">N</font><font face="宋体">为</font><font face="Courier New">1000000</font><font face="宋体">时结果对比：</font></span><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><img height="271" src="http://www.qingliangcn.com/blog/wp-content/uploads/wps_clip_image-824.png" width="543" /><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '新宋体'; font-size: 10pt; mso-spacerun: 'yes'">结果取得是平均值，可以很明显的看出<font face="Courier New">comprehension</font><font face="新宋体">方式性能要高。</font></span><span style="font-family: '新宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p15" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '新宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'times new roman'; font-size: 10pt; mso-spacerun: 'yes'">关于filter，则类似。不再作测试。</span></p>
<p><!--EndFragment--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2010/02/list-comprehensions%e4%b8%8elist-map%e6%80%a7%e8%83%bd%e5%af%b9%e6%af%94/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用新的域名 www.qingliangcn.com</title>
		<link>http://www.qingliangcn.com/2010/02/%e4%bd%bf%e7%94%a8%e6%96%b0%e7%9a%84%e5%9f%9f%e5%90%8d-www-qingliangcn-com/</link>
		<comments>http://www.qingliangcn.com/2010/02/%e4%bd%bf%e7%94%a8%e6%96%b0%e7%9a%84%e5%9f%9f%e5%90%8d-www-qingliangcn-com/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 04:43:49 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[暂未分类]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=232</guid>
		<description><![CDATA[即日起使用新的域名 www.qingliangcn.com，原有域名保留一定时间。
]]></description>
			<content:encoded><![CDATA[<p>即日起使用新的域名 <a href="http://www.qingliangcn.com">www.qingliangcn.com</a>，原有域名保留一定时间。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2010/02/%e4%bd%bf%e7%94%a8%e6%96%b0%e7%9a%84%e5%9f%9f%e5%90%8d-www-qingliangcn-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>虎年好运,新春愉快!</title>
		<link>http://www.qingliangcn.com/2010/02/%e8%99%8e%e5%b9%b4%e5%a5%bd%e8%bf%90%e6%96%b0%e6%98%a5%e6%84%89%e5%bf%ab/</link>
		<comments>http://www.qingliangcn.com/2010/02/%e8%99%8e%e5%b9%b4%e5%a5%bd%e8%bf%90%e6%96%b0%e6%98%a5%e6%84%89%e5%bf%ab/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 14:57:45 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[暂未分类]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=230</guid>
		<description><![CDATA[虎年好运,新春愉快!
]]></description>
			<content:encoded><![CDATA[<p>虎年好运,新春愉快!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2010/02/%e8%99%8e%e5%b9%b4%e5%a5%bd%e8%bf%90%e6%96%b0%e6%98%a5%e6%84%89%e5%bf%ab/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>erlang tcp发包速度测试</title>
		<link>http://www.qingliangcn.com/2010/02/erlang-tcp%e5%8f%91%e5%8c%85%e9%80%9f%e5%ba%a6%e6%b5%8b%e8%af%95/</link>
		<comments>http://www.qingliangcn.com/2010/02/erlang-tcp%e5%8f%91%e5%8c%85%e9%80%9f%e5%ba%a6%e6%b5%8b%e8%af%95/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 08:34:57 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Erlang]]></category>
		<category><![CDATA[erlang tcp io]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=216</guid>
		<description><![CDATA[&#160;

这段时间我们的项目遇到广播包的一些性能问题，想起之前看到yufeng老大提到的1s广播40K包的问题，我也想测试测试我们机器的IO能力。
这次仅仅测试发包的能力，采用的是一对一的方式。

测试代码：

-module(socket_io_test).

-export([server/0,&#160;client/1]).

server()&#160;-&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;spawn(fun()&#160;-&#62;&#160;do_server()&#160;end).

do_server()&#160;-&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;case&#160;gen_tcp:listen(38888,&#160;[binary,&#160;{reuseaddr,&#160;true},&#160;{active,&#160;false}])&#160;of
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{ok,&#160;ListenSocket}&#160;-&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;do_server_loop(ListenSocket);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{error,&#160;Reason}&#160;-&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;io:format(&#34;listen&#160;38888&#160;failed:&#160;~p&#34;,&#160;[Reason])
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end.

do_server_loop(LSock)&#160;-&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;case&#160;gen_tcp:accept(LSock)&#160;of
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{ok,&#160;ClientSocket}&#160;-&#62;&#160;do_recv(ClientSocket);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{error,&#160;Reason}&#160;-&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;io:format(&#34;accept&#160;failed:&#160;~p&#34;,&#160;[Reason])
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end.

do_recv(ClientSocket)&#160;-&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;gen_tcp:recv(ClientSocket,&#160;0),
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;do_recv(ClientSocket).

client(N)&#160;-&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;case&#160;gen_tcp:connect(&#34;127.0.0.1&#34;,&#160;38888,&#160;[binary])&#160;of
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{ok,&#160;Socket}&#160;-&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;erlang:statistics(runtime),
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;erlang:statistics(wall_clock),
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;do_send(N,&#160;Socket),
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{_,&#160;T1}&#160;=&#160;erlang:statistics(runtime),
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{_,&#160;T2}&#160;=&#160;erlang:statistics(wall_clock),
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;io:format(&#34;~p&#160;~p&#34;,&#160;[T1,&#160;T2]);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{error,&#160;Reason}&#160;-&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;io:format(&#34;connect&#160;failed:&#160;~p&#34;,&#160;[Reason])
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end.

do_send(N,&#160;Socket)&#160;-&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;lists:foreach(fun(_)&#160;-&#62;&#160;gen_tcp:send(Socket,&#160;&#60;&#60;&#34;Hello&#160;world!&#34;&#62;&#62;)&#160;end,&#160;lists:seq(1,&#160;N)).

启动服务端:
socket_io_test:server().

启动发包客户端：
socket_io_test:client(100000).&#160;100000表示发包的数量，每个包的大小为12个字节，加上TCP头部，一共36字节。&#160;




测试包的数量：&#160;400000(40W)
服务器环境：&#160;
Intel(R)&#160;Xeon(R)&#160;CPU&#160;&#160;&#160;E5420&#160;&#160;@&#160;2.50GHz&#160;双四核
12G内存
100M带宽独享

测试结果：








runtime




wall_clock





-smp&#160;auto



650&#160;



1558





-smp&#160;auto&#160;+h&#160;99999



630



1641





+K&#160;true&#160;



670&#160;



1626





-smp&#160;disable



410



770





+K&#160;true&#160;-smp&#160;disable


430


797





+K&#160;true&#160;-smp&#160;disable&#160;+h&#160;99999


420


1133






结果表明&#160;smp&#160;disable模式下发包速度明显快于smp&#160;auto模式，原因在于多核模式下，CPU切换的代价是相当高的。另外由于是一对一的发包，所以+K参数也没有什么效果。

产生的问题：
多核并发IO是否没有优势？得去看看Linux底层的实现了。（原谅我对这块的无知）
1.如果多核并发进行网络IO的能力要弱于单核，那么在用erlang进行服务端设计的时候就应该尽量让网关独占某个CPU并设置为-smp&#160;disable模式。
2.如果有优势，如何利用呢？嗯，这又是一个问题。

]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<div class="Section0">
<p class="p0" style="text-indent:36.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">这段时间我们的项目遇到广播包的一些性能问题，想起之前看到<font face="Courier New">yufeng</font><font face="宋体">老大提到的</font><font face="Courier New">1s</font><font face="宋体">广播</font><font face="Courier New">40K</font><font face="宋体">包的问题，我也想测试测试我们机器的</font><font face="Courier New">IO</font><font face="宋体">能力。</font></span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="text-indent:36.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">这次仅仅测试发包的能力，采用的是一对一的方式。</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">测试代码：<span id="more-216"></span></span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">-module(socket_io_test)</span><span style="mso-spacerun:'yes'; color:rgb(0,0,255); font-size:10.0000pt; font-family:'Courier New'; ">.</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">-export([server/</span><span style="mso-spacerun:'yes'; color:rgb(90,90,180); font-size:10.0000pt; font-family:'Courier New'; ">0</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;client/</span><span style="mso-spacerun:'yes'; color:rgb(90,90,180); font-size:10.0000pt; font-family:'Courier New'; ">1</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">])</span><span style="mso-spacerun:'yes'; color:rgb(0,0,255); font-size:10.0000pt; font-family:'Courier New'; ">.</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">server()&nbsp;-&gt;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spawn(</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">fun</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">()&nbsp;-&gt;&nbsp;do_server()&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">end</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">)</span><span style="mso-spacerun:'yes'; color:rgb(0,0,255); font-size:10.0000pt; font-family:'Courier New'; ">.</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">do_server()&nbsp;-&gt;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">case</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;gen_tcp:listen(</span><span style="mso-spacerun:'yes'; color:rgb(90,90,180); font-size:10.0000pt; font-family:'Courier New'; ">38888</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;[binary,&nbsp;{reuseaddr,&nbsp;true},&nbsp;{active,&nbsp;false}])&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">of</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ok,&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">ListenSocket</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">}&nbsp;-&gt;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do_server_loop(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">ListenSocket</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">);</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{error,&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">Reason</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">}&nbsp;-&gt;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;io:format(</span><span style="mso-spacerun:'yes'; color:rgb(188,143,143); font-size:10.0000pt; font-family:'Courier New'; ">&quot;listen&nbsp;38888&nbsp;failed:&nbsp;~p&quot;</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;[</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">Reason</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">])</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">end</span><span style="mso-spacerun:'yes'; color:rgb(0,0,255); font-size:10.0000pt; font-family:'Courier New'; ">.</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">do_server_loop(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">LSock</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">)&nbsp;-&gt;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">case</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;gen_tcp:accept(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">LSock</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">)&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">of</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ok,&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">ClientSocket</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">}&nbsp;-&gt;&nbsp;do_recv(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">ClientSocket</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">);</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{error,&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">Reason</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">}&nbsp;-&gt;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;io:format(</span><span style="mso-spacerun:'yes'; color:rgb(188,143,143); font-size:10.0000pt; font-family:'Courier New'; ">&quot;accept&nbsp;failed:&nbsp;~p&quot;</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;[</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">Reason</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">])</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">end</span><span style="mso-spacerun:'yes'; color:rgb(0,0,255); font-size:10.0000pt; font-family:'Courier New'; ">.</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">do_recv(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">ClientSocket</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">)&nbsp;-&gt;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gen_tcp:recv(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">ClientSocket</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(90,90,180); font-size:10.0000pt; font-family:'Courier New'; ">0</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">),</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do_recv(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">ClientSocket</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">)</span><span style="mso-spacerun:'yes'; color:rgb(0,0,255); font-size:10.0000pt; font-family:'Courier New'; ">.</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">client(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">N</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">)&nbsp;-&gt;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">case</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;gen_tcp:connect(</span><span style="mso-spacerun:'yes'; color:rgb(188,143,143); font-size:10.0000pt; font-family:'Courier New'; ">&quot;127.0.0.1&quot;</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(90,90,180); font-size:10.0000pt; font-family:'Courier New'; ">38888</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;[binary])&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">of</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ok,&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">Socket</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">}&nbsp;-&gt;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;erlang:statistics(runtime),</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;erlang:statistics(wall_clock),</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do_send(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">N</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">Socket</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">),</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">_</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">T1</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">}&nbsp;=&nbsp;erlang:statistics(runtime),</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">_</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">T2</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">}&nbsp;=&nbsp;erlang:statistics(wall_clock),</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;io:format(</span><span style="mso-spacerun:'yes'; color:rgb(188,143,143); font-size:10.0000pt; font-family:'Courier New'; ">&quot;~p&nbsp;~p&quot;</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;[</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">T1</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">T2</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">]);</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{error,&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">Reason</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">}&nbsp;-&gt;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;io:format(</span><span style="mso-spacerun:'yes'; color:rgb(188,143,143); font-size:10.0000pt; font-family:'Courier New'; ">&quot;connect&nbsp;failed:&nbsp;~p&quot;</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;[</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">Reason</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">])</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">end</span><span style="mso-spacerun:'yes'; color:rgb(0,0,255); font-size:10.0000pt; font-family:'Courier New'; ">.</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">do_send(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">N</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">Socket</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">)&nbsp;-&gt;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lists:foreach(</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">fun</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">_</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">)&nbsp;-&gt;&nbsp;gen_tcp:send(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">Socket</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;&lt;&lt;</span><span style="mso-spacerun:'yes'; color:rgb(188,143,143); font-size:10.0000pt; font-family:'Courier New'; ">&quot;Hello&nbsp;world!&quot;</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&gt;&gt;)&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">end</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;lists:seq(</span><span style="mso-spacerun:'yes'; color:rgb(90,90,180); font-size:10.0000pt; font-family:'Courier New'; ">1</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">N</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">))</span><span style="mso-spacerun:'yes'; color:rgb(0,0,255); font-size:10.0000pt; font-family:'Courier New'; ">.</span><span style="mso-spacerun:'yes'; color:rgb(0,0,255); font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,255); font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'宋体'; ">启动服务端<font face="Courier New">:</font></span><span style="mso-spacerun:'yes'; color:rgb(0,0,255); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">socket_io_test</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">:server().</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">启动发包客户端：</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">socket_io_test</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">:client(100000).&nbsp;100000<font face="宋体">表示发包的数量，每个包的大小为</font><font face="Courier New">12</font><font face="宋体">个字节，加上</font><font face="Courier New">TCP</font><font face="宋体">头部，一共</font><font face="Courier New">36</font><font face="宋体">字节。&nbsp;</font></span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">测试包的数量：&nbsp;<font face="Courier New">400000(40W)</font></span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">服务器环境：&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">Intel(R)&nbsp;Xeon(R)&nbsp;CPU&nbsp;&nbsp;&nbsp;E5420&nbsp;&nbsp;@&nbsp;2.50GHz&nbsp;<font face="宋体">双四核</font></span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">12G<font face="宋体">内存</font></span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">100M<font face="宋体">带宽独享</font></span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">测试结果：</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<table style="border-collapse:collapse;<br />
mso-table-layout-alt:fixed;<br />
padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; "><br />
<tbody>
<tr style="height:26.0000pt; ">
<td style="width:276.9500pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:0.5000pt solid rgb(0,0,0); border-right:0.5000pt solid rgb(0,0,0); border-top:0.5000pt solid rgb(0,0,0); border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="369">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
<td style="width:79.5000pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:none; ; border-right:0.5000pt solid rgb(0,0,0); border-top:0.5000pt solid rgb(0,0,0); border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="106">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">runtime</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
<td style="width:75.7500pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:none; ; border-right:0.5000pt solid rgb(0,0,0); border-top:0.5000pt solid rgb(0,0,0); border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="101">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">wall_clock</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
</tr>
<tr style="height:32.7500pt; ">
<td style="width:276.9500pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:0.5000pt solid rgb(0,0,0); border-right:0.5000pt solid rgb(0,0,0); border-top:none; ; border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="369">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">-smp&nbsp;auto</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
<td style="width:79.5000pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:none; ; border-right:0.5000pt solid rgb(0,0,0); border-top:none; ; border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="106">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">650&nbsp;</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
<td style="width:75.7500pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:none; ; border-right:0.5000pt solid rgb(0,0,0); border-top:none; ; border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="101">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">1558</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
</tr>
<tr style="height:32.7500pt; ">
<td style="width:276.9500pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:0.5000pt solid rgb(0,0,0); border-right:0.5000pt solid rgb(0,0,0); border-top:none; ; border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="369">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">-smp&nbsp;auto&nbsp;+h&nbsp;99999</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
<td style="width:79.5000pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:none; ; border-right:0.5000pt solid rgb(0,0,0); border-top:none; ; border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="106">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">630</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
<td style="width:75.7500pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:none; ; border-right:0.5000pt solid rgb(0,0,0); border-top:none; ; border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="101">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">1641</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
</tr>
<tr style="height:35.0000pt; ">
<td style="width:276.9500pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:0.5000pt solid rgb(0,0,0); border-right:0.5000pt solid rgb(0,0,0); border-top:none; ; border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="369">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">+K&nbsp;true&nbsp;</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
<td style="width:79.5000pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:none; ; border-right:0.5000pt solid rgb(0,0,0); border-top:none; ; border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="106">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">670&nbsp;</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
<td style="width:75.7500pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:none; ; border-right:0.5000pt solid rgb(0,0,0); border-top:none; ; border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="101">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">1626</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
</tr>
<tr style="height:34.7500pt; ">
<td style="width:276.9500pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:0.5000pt solid rgb(0,0,0); border-right:0.5000pt solid rgb(0,0,0); border-top:none; ; border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="369">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">-smp&nbsp;disable</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
<td style="width:79.5000pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:none; ; border-right:0.5000pt solid rgb(0,0,0); border-top:none; ; border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="106">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">410</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
<td style="width:75.7500pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:none; ; border-right:0.5000pt solid rgb(0,0,0); border-top:none; ; border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="101">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">770</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
</tr>
<tr style="height:37.0000pt; ">
<td style="width:276.9500pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:0.5000pt solid rgb(0,0,0); border-right:0.5000pt solid rgb(0,0,0); border-top:none; ; border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="369">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">+K&nbsp;true&nbsp;-smp&nbsp;disable</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
<td style="width:79.5000pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:none; ; border-right:0.5000pt solid rgb(0,0,0); border-top:none; ; border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="106">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">430</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
<td style="width:75.7500pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:none; ; border-right:0.5000pt solid rgb(0,0,0); border-top:none; ; border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="101">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">797</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
</tr>
<tr style="height:40.0000pt; ">
<td style="width:276.9500pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:0.5000pt solid rgb(0,0,0); border-right:0.5000pt solid rgb(0,0,0); border-top:none; ; border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="369">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">+K&nbsp;true&nbsp;-smp&nbsp;disable&nbsp;+h&nbsp;99999</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
<td style="width:79.5000pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:none; ; border-right:0.5000pt solid rgb(0,0,0); border-top:none; ; border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="106">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">420</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
<td style="width:75.7500pt; padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ; border-left:none; ; border-right:0.5000pt solid rgb(0,0,0); border-top:none; ; border-bottom:0.5000pt solid rgb(0,0,0); " valign="top" width="101">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">1133</span><span style="color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">结果表明&nbsp;<font face="Courier New">smp&nbsp;disable</font><font face="宋体">模式下发包速度明显快于</font><font face="Courier New">smp&nbsp;auto</font><font face="宋体">模式，原因在于多核模式下，</font><font face="Courier New">CPU</font><font face="宋体">切换的代价是相当高的。另外由于是一对一的发包，所以</font><font face="Courier New">+K</font><font face="宋体">参数也没有什么效果。</font></span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">产生的问题：</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">多核并发<font face="Courier New">IO</font><font face="宋体">是否没有优势？得去看看</font><font face="Courier New">Linux</font><font face="宋体">底层的实现了。（原谅我对这块的无知）</font></span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">1.</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">如果多核并发进行网络<font face="Courier New">IO</font><font face="宋体">的能力要弱于单核，那么在用</font><font face="Courier New">erlang</font><font face="宋体">进行服务端设计的时候就应该尽量让网关独占某个</font><font face="Courier New">CPU</font><font face="宋体">并设置为</font><font face="Courier New">-smp&nbsp;disable</font><font face="宋体">模式。</font></span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">2.</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">如果有优势，如何利用呢？嗯，这又是一个问题。</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2010/02/erlang-tcp%e5%8f%91%e5%8c%85%e9%80%9f%e5%ba%a6%e6%b5%8b%e8%af%95/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Erlang中计算16位的MD5字符串</title>
		<link>http://www.qingliangcn.com/2010/01/erlang%e4%b8%ad%e8%ae%a1%e7%ae%9716%e4%bd%8d%e7%9a%84md5%e5%ad%97%e7%ac%a6%e4%b8%b2/</link>
		<comments>http://www.qingliangcn.com/2010/01/erlang%e4%b8%ad%e8%ae%a1%e7%ae%9716%e4%bd%8d%e7%9a%84md5%e5%ad%97%e7%ac%a6%e4%b8%b2/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 02:55:07 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Erlang]]></category>
		<category><![CDATA[md5]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=213</guid>
		<description><![CDATA[&#160;
erlang的bif中自带了md5计算函数，但是结果却是二进制的，即使转成list，也是10进制表示，google了一下得到一段代码用于获得字符串形式的md5结果（16位）：

md5(S)&#160;-&#62;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
Md5_bin&#160;=&#160;&#160;erlang:md5(S),&#160;
Md5_list&#160;=&#160;binary_to_list(Md5_bin),&#160;
lists:flatten(list_to_hex(Md5_list)).&#160;
&#160;
list_to_hex(L)&#160;-&#62;&#160;
lists:map(fun(X)&#160;-&#62;&#160;int_to_hex(X)&#160;end,&#160;L).&#160;
&#160;
int_to_hex(N)&#160;when&#160;N&#160;&#60;&#160;256&#160;-&#62;&#160;
[hex(N&#160;div&#160;16),&#160;hex(N&#160;rem&#160;16)].&#160;
hex(N)&#160;when&#160;N&#160;&#60;&#160;10&#160;-&#62;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;$0+N;&#160;
hex(N)&#160;when&#160;N&#160;&#62;=&#160;10,&#160;N&#160;&#60;&#160;16&#160;-&#62;&#160;&#160;&#160;&#160;&#160;&#160;
$a&#160;+&#160;(N-10).

英文链接&#160;&#160;http://sacharya.com/md5-in-erlang/
]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; ">erlang<font face="宋体">的</font><font face="Courier New">bif</font><font face="宋体">中自带了</font><font face="Courier New">md5</font><font face="宋体">计算函数，但是结果却是二进制的，即使转成</font><font face="Courier New">list</font><font face="宋体">，也是</font><font face="Courier New">10</font><font face="宋体">进制表示，</font><font face="Courier New">google</font><font face="宋体">了一下得到一段代码用于获得字符串形式的</font><font face="Courier New">md5</font><font face="宋体">结果（</font><font face="Courier New">16</font><font face="宋体">位）：</font></span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">md5(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">S</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">)&nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="text-indent:36.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">Md5_bin</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;=&nbsp;&nbsp;erlang:md5(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">S</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">),&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="text-indent:36.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">Md5_list</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;=&nbsp;binary_to_list(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">Md5_bin</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">),&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="text-indent:36.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">lists:flatten(list_to_hex(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">Md5_list</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">))</span><span style="mso-spacerun:'yes'; color:rgb(0,0,255); font-size:10.0000pt; font-family:'Courier New'; ">.</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">list_to_hex(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">L</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">)&nbsp;-&gt;&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="text-indent:36.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">lists:map(</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">fun</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">X</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">)&nbsp;-&gt;&nbsp;int_to_hex(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">X</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">)&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">end</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">L</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">)</span><span style="mso-spacerun:'yes'; color:rgb(0,0,255); font-size:10.0000pt; font-family:'Courier New'; ">.</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">int_to_hex(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">N</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">)&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">when</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">N</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&lt;&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(90,90,180); font-size:10.0000pt; font-family:'Courier New'; ">256</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;-&gt;&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="text-indent:36.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">[hex(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">N</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">div</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(90,90,180); font-size:10.0000pt; font-family:'Courier New'; ">16</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">),&nbsp;hex(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">N</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">rem</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(90,90,180); font-size:10.0000pt; font-family:'Courier New'; ">16</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">)]</span><span style="mso-spacerun:'yes'; color:rgb(0,0,255); font-size:10.0000pt; font-family:'Courier New'; ">.</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">hex(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">N</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">)&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">when</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">N</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&lt;&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(90,90,180); font-size:10.0000pt; font-family:'Courier New'; ">10</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;-&gt;&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$0+</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">N</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">;&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">hex(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">N</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">)&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(160,32,240); font-weight:bold; font-size:10.0000pt; font-family:'Courier New'; ">when</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">N</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&gt;=&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(90,90,180); font-size:10.0000pt; font-family:'Courier New'; ">10</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">,&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">N</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;&lt;&nbsp;</span><span style="mso-spacerun:'yes'; color:rgb(90,90,180); font-size:10.0000pt; font-family:'Courier New'; ">16</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">&nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">$a&nbsp;+&nbsp;(</span><span style="mso-spacerun:'yes'; color:rgb(184,134,11); font-size:10.0000pt; font-family:'Courier New'; ">N</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">-</span><span style="mso-spacerun:'yes'; color:rgb(90,90,180); font-size:10.0000pt; font-family:'Courier New'; ">10</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.0000pt; font-family:'Courier New'; ">)</span><span style="mso-spacerun:'yes'; color:rgb(0,0,255); font-size:10.0000pt; font-family:'Courier New'; ">.</span><span style="mso-spacerun:'yes'; color:rgb(0,0,255); font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,255); font-size:10.0000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Times New Roman'; ">英文链接</span><span style="mso-spacerun:'yes'; color:rgb(0,0,255); font-size:10.0000pt; font-family:'宋体'; ">&nbsp;&nbsp;http://sacharya.com/md5-in-erlang/</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2010/01/erlang%e4%b8%ad%e8%ae%a1%e7%ae%9716%e4%bd%8d%e7%9a%84md5%e5%ad%97%e7%ac%a6%e4%b8%b2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Erlang中粘包处理</title>
		<link>http://www.qingliangcn.com/2010/01/erlang%e4%b8%ad%e7%b2%98%e5%8c%85%e5%a4%84%e7%90%86-2/</link>
		<comments>http://www.qingliangcn.com/2010/01/erlang%e4%b8%ad%e7%b2%98%e5%8c%85%e5%a4%84%e7%90%86-2/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 12:53:15 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Erlang]]></category>
		<category><![CDATA[粘包]]></category>

		<guid isPermaLink="false">http://www.nd21.com/2010/01/erlang%e4%b8%ad%e7%b2%98%e5%8c%85%e5%a4%84%e7%90%86-2/</guid>
		<description><![CDATA[erlang中快速简单的处理粘包问题。]]></description>
			<content:encoded><![CDATA[<div class="Section0">
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt">&nbsp;</p>
<div class="Section0">
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span class="Apple-style-span" style="font-size: 13px"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'">开始时用的传统思路（循环读取）：</span><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span class="Apple-style-span" style="font-size: 13px"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span class="Apple-style-span" style="font-size: 13px"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">recv(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">ClientSock</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">PacketLenOld</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Remain</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span class="Apple-style-span" style="font-size: 13px"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">when</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;is_integer(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">PacketLenOld</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">and</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;is_binary(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Remain</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">case</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'courier new'; background: rgb(192,192,192); color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">gen_tcp:recv</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">ClientSock</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(90,90,180); font-size: 10pt; mso-spacerun: 'yes'">0</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">of</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{ok,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">B</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Bin</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;=&nbsp;&lt;&lt;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Remain</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">/binary,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">B</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">/binary&gt;&gt;,</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(178,34,34); font-size: 10pt; mso-spacerun: 'yes'">%%&nbsp;read&nbsp;the&nbsp;packet&nbsp;length</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">if</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">PacketLenOld</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;=:=&nbsp;</span><span style="font-family: 'courier new'; color: rgb(90,90,180); font-size: 10pt; mso-spacerun: 'yes'">0</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">andalso</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;erlang:byte_size(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Bin</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;&gt;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(90,90,180); font-size: 10pt; mso-spacerun: 'yes'">2</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;-&gt;&nbsp;&lt;&lt;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">PacketLen</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">:</span><span style="font-family: 'courier new'; color: rgb(90,90,180); font-size: 10pt; mso-spacerun: 'yes'">16</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Remain2</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">/binary&gt;&gt;&nbsp;=&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Bin</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;true&nbsp;-&gt;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Remain2</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;=&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Bin</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">PacketLen</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;=&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">PacketLenOld</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">end</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'"> </span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(95,158,160); font-size: 10pt; mso-spacerun: 'yes'">?DEBUG</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">(</span><span style="font-family: 'courier new'; color: rgb(188,143,143); font-size: 10pt; mso-spacerun: 'yes'">&quot;packet&nbsp;length&nbsp;~p&quot;</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;[</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">PacketLen</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">]),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">if</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">erlang:byte_size(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Remain2</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;&gt;=&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">PacketLen</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;-&gt;&nbsp;{</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">RealData</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Next</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;=&nbsp;split_binary(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Remain2</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">PacketLen</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">MainData</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;=&nbsp;decode(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">RealData</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;{ok,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">MainData</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(90,90,180); font-size: 10pt; mso-spacerun: 'yes'">0</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Next</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">};</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">true&nbsp;-&gt;&nbsp;{continue,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">PacketLen</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Remain2</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">end</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{error,&nbsp;closed}&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(95,158,160); font-size: 10pt; mso-spacerun: 'yes'">?DEBUG</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">(</span><span style="font-family: 'courier new'; color: rgb(188,143,143); font-size: 10pt; mso-spacerun: 'yes'">&quot;socket&nbsp;closed&nbsp;~p&nbsp;~n&quot;</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;[</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">ClientSock</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">]),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{error,&nbsp;closed};</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{error,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Reason</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(95,158,160); font-size: 10pt; mso-spacerun: 'yes'">?ERROR_MSG</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">(</span><span style="font-family: 'courier new'; color: rgb(188,143,143); font-size: 10pt; mso-spacerun: 'yes'">&quot;socket&nbsp;closed&nbsp;~p&nbsp;with&nbsp;reason:&nbsp;~p&nbsp;~n&quot;</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;[</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">ClientSock</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Reason</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">]),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{error,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Reason</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">end</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'times new roman'; font-size: 10pt; mso-spacerun: 'yes'">翻了翻文档发现实际上在erlang中没有必要这样麻烦</span><span style="font-family: 'times new roman'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'times new roman'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 5pt; margin-bottom: 5pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'verdana'; background: rgb(255,255,0); font-size: 10.5pt; mso-spacerun: 'yes'">The&nbsp;</span><span style="font-family: 'courier'; background: rgb(255,255,0); font-size: 10.5pt; font-weight: normal; mso-spacerun: 'yes'">Length</span><span style="font-family: 'verdana'; background: rgb(255,255,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;argument&nbsp;is&nbsp;only&nbsp;meaningful&nbsp;when&nbsp;the&nbsp;socket&nbsp;is&nbsp;in&nbsp;</span></font></p>
<p class="p0" style="margin-top: 5pt; margin-bottom: 5pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier'; background: rgb(255,255,0); font-size: 10.5pt; font-weight: normal; mso-spacerun: 'yes'">raw</span><span style="font-family: 'verdana'; background: rgb(255,255,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;mode&nbsp;and&nbsp;denotes&nbsp;the&nbsp;number&nbsp;of&nbsp;bytes&nbsp;to&nbsp;read.&nbsp;</span></font></p>
<p class="p0" style="margin-top: 5pt; margin-bottom: 5pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'verdana'; background: rgb(255,255,0); font-size: 10.5pt; mso-spacerun: 'yes'">If&nbsp;</span><span style="font-family: 'courier'; background: rgb(255,255,0); font-size: 10.5pt; font-weight: normal; mso-spacerun: 'yes'">Length</span><span style="font-family: 'verdana'; background: rgb(255,255,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;=&nbsp;0,&nbsp;all&nbsp;available&nbsp;bytes&nbsp;are&nbsp;returned.&nbsp;</span></font></p>
<p class="p0" style="margin-top: 5pt; margin-bottom: 5pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'verdana'; background: rgb(255,255,0); font-size: 10.5pt; mso-spacerun: 'yes'">If&nbsp;</span><span style="font-family: 'courier'; background: rgb(255,255,0); font-size: 10.5pt; font-weight: normal; mso-spacerun: 'yes'">Length</span><span style="font-family: 'verdana'; background: rgb(255,255,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;&gt;&nbsp;0,&nbsp;exactly&nbsp;</span><span style="font-family: 'courier'; background: rgb(255,255,0); font-size: 10.5pt; font-weight: normal; mso-spacerun: 'yes'">Length</span><span style="font-family: 'verdana'; background: rgb(255,255,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;bytes&nbsp;are&nbsp;returned,&nbsp;or&nbsp;an&nbsp;error;</span><span style="font-family: 'verdana'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">recv(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">ClientSock</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">case</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;gen_tcp:recv(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">ClientSock</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(90,90,180); font-size: 10pt; mso-spacerun: 'yes'">2</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">of</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{ok,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">PacketLenBin</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;-&gt;&nbsp;&lt;&lt;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">PacketLen</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">:</span><span style="font-family: 'courier new'; color: rgb(90,90,180); font-size: 10pt; mso-spacerun: 'yes'">16</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&gt;&gt;&nbsp;=&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">PacketLenBin</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">case</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;gen_tcp:recv(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">ClientSock</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">PacketLen</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">of</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{ok,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">RealData</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(95,158,160); font-size: 10pt; mso-spacerun: 'yes'">?DEBUG</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">(</span><span style="font-family: 'courier new'; color: rgb(188,143,143); font-size: 10pt; mso-spacerun: 'yes'">&quot;recv&nbsp;data&nbsp;~p&quot;</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;[</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">RealData</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">]),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{ok,&nbsp;decode(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">RealData</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)};</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{error,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Reason</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(95,158,160); font-size: 10pt; mso-spacerun: 'yes'">?ERROR_MSG</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">(</span><span style="font-family: 'courier new'; color: rgb(188,143,143); font-size: 10pt; mso-spacerun: 'yes'">&quot;read&nbsp;packet&nbsp;data&nbsp;failed&nbsp;with&nbsp;reason:&nbsp;~p&quot;</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;[</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Reason</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">]),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{error,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Reason</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">end</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{error,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Reason</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;-&gt;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; text-indent: 36pt; margin-bottom: 0pt; margin-left: 72pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(95,158,160); font-size: 10pt; mso-spacerun: 'yes'">?ERROR_MSG</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">(</span><span style="font-family: 'courier new'; color: rgb(188,143,143); font-size: 10pt; mso-spacerun: 'yes'">&quot;read&nbsp;packet&nbsp;length&nbsp;failed&nbsp;with&nbsp;reason:&nbsp;~p&quot;</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;[</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Reason</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">]),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{error,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Reason</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font class="Apple-style-span" face="宋体" size="3"><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">end</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></font></p>
</p></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2010/01/erlang%e4%b8%ad%e7%b2%98%e5%8c%85%e5%a4%84%e7%90%86-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OTP中supervisor启动过程</title>
		<link>http://www.qingliangcn.com/2010/01/otp%e4%b8%adsupervisor%e5%90%af%e5%8a%a8%e8%bf%87%e7%a8%8b/</link>
		<comments>http://www.qingliangcn.com/2010/01/otp%e4%b8%adsupervisor%e5%90%af%e5%8a%a8%e8%bf%87%e7%a8%8b/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 02:14:03 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Erlang]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=200</guid>
		<description><![CDATA[&#160;
从rabbit_sup模块开始看起：
rabbit_sup模块的start_link是被rabbit&#160;app模块的start/2方法所调用的

rabbit.erl文件：
start(normal,&#160;[])&#160;-&#62;

{ok,&#160;SupPid}&#160;=&#160;rabbit_sup:start_link(),

rabbit_sup.erl文件：
-define(SERVER,&#160;?MODULE).
start_link()&#160;-&#62;
supervisor:start_link({local,&#160;?SERVER},&#160;?MODULE,&#160;[]).

这里的?SERVER和?MODULE是一样的值，都为rabbit_sup&#160;。

跳转到supervisor.erl文件：

start_link(SupName,&#160;Mod,&#160;Args)&#160;-&#62;
gen_server:start_link(SupName,&#160;supervisor,&#160;{SupName,&#160;Mod,&#160;Args},&#160;[]).

看到supervisor的start_link实际上调用的是gen_server的start_link方法，调用的时候将supervisor作为一个参数传递过去了。

这样到目前为止我们的调用实际为：

gen_server:start_link({local,&#160;rabbit_sup},&#160;supervisor,&#160;{{local,&#160;rabbit_sup},&#160;rabbit_sup,&#160;[]},&#160;[]).

gen_server.erl文件：
start_link(Mod,&#160;Args,&#160;Options)&#160;-&#62;
&#160;&#160;&#160;&#160;gen:start(?MODULE,&#160;link,&#160;Mod,&#160;Args,&#160;Options).

start_link(Name,&#160;Mod,&#160;Args,&#160;Options)&#160;-&#62;
gen:start(?MODULE,&#160;link,&#160;Name,&#160;Mod,&#160;Args,&#160;Options).

gen_server的start_link方法调用了gen模块的start方法，实际调用为：
gen:start(gen_server,&#160;link,&#160;{local,&#160;rabbit_sup},supervisor,&#160;{{local,&#160;rabbit_sup},&#160;rabbit_sup,&#160;[]},&#160;[]).

gen.erl文件：
start(GenMod,&#160;LinkP,&#160;Name,&#160;Mod,&#160;Args,&#160;Options)&#160;-&#62;
&#160;&#160;&#160;&#160;case&#160;where(Name)&#160;of
undefined&#160;-&#62;
&#160;&#160;&#160;&#160;do_spawn(GenMod,&#160;LinkP,&#160;Name,&#160;Mod,&#160;Args,&#160;Options);
Pid&#160;-&#62;
&#160;&#160;&#160;&#160;{error,&#160;{already_started,&#160;Pid}}
end.

start之前判断是否已经创建了该process，没有则创建，有则返回错误！

do_spawn(GenMod,&#160;link,&#160;Name,&#160;Mod,&#160;Args,&#160;Options)&#160;-&#62;
&#160;&#160;&#160;&#160;Time&#160;=&#160;timeout(Options),
&#160;&#160;&#160;&#160;proc_lib:start_link(?MODULE,&#160;init_it,
[GenMod,&#160;self(),&#160;self(),&#160;Name,&#160;Mod,&#160;Args,&#160;Options],
Time,
spawn_opts(Options));
do_spawn(GenMod,&#160;_,&#160;Name,&#160;Mod,&#160;Args,&#160;Options)&#160;-&#62;
&#160;&#160;&#160;&#160;Time&#160;=&#160;timeout(Options),
&#160;&#160;&#160;&#160;proc_lib:start(?MODULE,&#160;init_it,
&#160;&#160;&#160;[GenMod,&#160;self(),&#160;self,&#160;Name,&#160;Mod,&#160;Args,&#160;Options],&#160;
&#160;&#160;&#160;Time,
&#160;&#160;&#160;spawn_opts(Options)).

实际又是调用了gen模块的init_it方法，采用的link的spawn方式。


init_it(GenMod,&#160;Starter,&#160;Parent,&#160;Mod,&#160;Args,&#160;Options)&#160;-&#62;
&#160;&#160;&#160;&#160;init_it2(GenMod,&#160;Starter,&#160;Parent,&#160;self(),&#160;Mod,&#160;Args,&#160;Options).

init_it(GenMod,&#160;Starter,&#160;Parent,&#160;Name,&#160;Mod,&#160;Args,&#160;Options)&#160;-&#62;
&#160;&#160;&#160;&#160;case&#160;name_register(Name)&#160;of
true&#160;-&#62;
&#160;&#160;&#160;&#160;init_it2(GenMod,&#160;Starter,&#160;Parent,&#160;Name,&#160;Mod,&#160;Args,&#160;Options);
{false,&#160;Pid}&#160;-&#62;
&#160;&#160;&#160;&#160;proc_lib:init_ack(Starter,&#160;{error,&#160;{already_started,&#160;Pid}})
&#160;&#160;&#160;&#160;end.

首先尝试注册这个名字，如果发现已经注册，则通知父进程已经创建了。否则跳转到init_in2，

init_it2(GenMod,&#160;Starter,&#160;Parent,&#160;Name,&#160;Mod,&#160;Args,&#160;Options)&#160;-&#62;
GenMod:init_it(Starter,&#160;Parent,&#160;Name,&#160;Mod,&#160;Args,&#160;Options).

这时又跳转到gen_server:init_it方法。

init_it(Starter,&#160;self,&#160;Name,&#160;Mod,&#160;Args,&#160;Options)&#160;-&#62;
&#160;&#160;&#160;&#160;init_it(Starter,&#160;self(),&#160;Name,&#160;Mod,&#160;Args,&#160;Options);
init_it(Starter,&#160;Parent,&#160;Name0,&#160;Mod,&#160;Args,&#160;Options)&#160;-&#62;
&#160;&#160;&#160;&#160;Name&#160;=&#160;name(Name0),
&#160;&#160;&#160;&#160;Debug&#160;=&#160;debug_options(Name,&#160;Options),
&#160;&#160;&#160;&#160;case&#160;catch&#160;Mod:init(Args)&#160;of
{ok,&#160;State}&#160;-&#62;
&#160;&#160;&#160;&#160;proc_lib:init_ack(Starter,&#160;{ok,&#160;self()}),&#160; &#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;loop(Parent,&#160;Name,&#160;State,&#160;Mod,&#160;infinity,&#160;Debug);
{ok,&#160;State,&#160;Timeout}&#160;-&#62;
&#160;&#160;&#160;&#160;proc_lib:init_ack(Starter,&#160;{ok,&#160;self()}),&#160; &#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;loop(Parent,&#160;Name,&#160;State,&#160;Mod,&#160;Timeout,&#160;Debug);
{stop,&#160;Reason}&#160;-&#62;
&#160;&#160;&#160;&#160;%%&#160;For&#160;consistency,&#160;we&#160;must&#160;make&#160;sure&#160;that&#160;the
&#160;&#160;&#160;&#160;%%&#160;registered&#160;name&#160;(if&#160;any)&#160;is&#160;unregistered&#160;before
&#160;&#160;&#160;&#160;%%&#160;the&#160;parent&#160;process&#160;is&#160;notified&#160;about&#160;the&#160;failure.
&#160;&#160;&#160;&#160;%%&#160;(Otherwise,&#160;the&#160;parent&#160;process&#160;could&#160;get
&#160;&#160;&#160;&#160;%%&#160;an&#160;&#39;already_started&#39;&#160;error&#160;if&#160;it&#160;immediately
&#160;&#160;&#160;&#160;%%&#160;tried&#160;starting&#160;the&#160;process&#160;again.)
&#160;&#160;&#160;&#160;unregister_name(Name0),
&#160;&#160;&#160;&#160;proc_lib:init_ack(Starter,&#160;{error,&#160;Reason}),
&#160;&#160;&#160;&#160;exit(Reason);
ignore&#160;-&#62;
&#160;&#160;&#160;&#160;unregister_name(Name0),
&#160;&#160;&#160;&#160;proc_lib:init_ack(Starter,&#160;ignore),
&#160;&#160;&#160;&#160;exit(normal);
{&#39;EXIT&#39;,&#160;Reason}&#160;-&#62;
&#160;&#160;&#160;&#160;unregister_name(Name0),
&#160;&#160;&#160;&#160;proc_lib:init_ack(Starter,&#160;{error,&#160;Reason}),
&#160;&#160;&#160;&#160;exit(Reason);
Else&#160;-&#62;
&#160;&#160;&#160;&#160;Error&#160;=&#160;{bad_return_value,&#160;Else},
&#160;&#160;&#160;&#160;proc_lib:init_ack(Starter,&#160;{error,&#160;Error}),
&#160;&#160;&#160;&#160;exit(Error)
end.

又是调用了supervisor的init方法

&#160;&#160;&#160;&#160;init({SupName,&#160;Mod,&#160;Args})&#160;-&#62;
&#160;&#160;&#160;&#160;process_flag(trap_exit,&#160;true),
&#160;&#160;&#160;&#160;case&#160;Mod:init(Args)&#160;of
{ok,&#160;{SupFlags,&#160;StartSpec}}&#160;-&#62;
&#160;&#160;&#160;&#160;case&#160;init_state(SupName,&#160;SupFlags,&#160;Mod,&#160;Args)&#160;of
{ok,&#160;State}&#160;when&#160;?is_simple(State)&#160;-&#62;
&#160;&#160;&#160;&#160;init_dynamic(State,&#160;StartSpec);
{ok,&#160;State}&#160;-&#62;
&#160;&#160;&#160;&#160;init_children(State,&#160;StartSpec);
Error&#160;-&#62;
&#160;&#160;&#160;&#160;{stop,&#160;{supervisor_data,&#160;Error}}
&#160;&#160;&#160;&#160;end;
ignore&#160;-&#62;
&#160;&#160;&#160;&#160;ignore;
Error&#160;-&#62;
&#160;&#160;&#160;&#160;{stop,&#160;{bad_return,&#160;{Mod,&#160;init,&#160;Error}}}
&#160;&#160;&#160;&#160;end.

呵呵，到了这里终于调用了rabbit_sup的init方法了，根据不同的init返回值做不同的启动子进程的操作。

]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">从<font face="Courier New">rabbit_sup</font><font face="宋体">模块开始看起：</font></span><span style="font-family: '宋体'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">rabbit_sup<font face="宋体">模块的</font><font face="Courier New">start_link</font><font face="宋体">是被</font><font face="Courier New">rabbit&nbsp;app</font><font face="宋体">模块的</font><font face="Courier New">start/2</font><font face="宋体">方法所调用的</font></span><span style="font-family: '宋体'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">rabbit.erl<font face="宋体">文件：</font></span><span style="font-family: '宋体'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">start(normal,&nbsp;[])&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{ok,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">SupPid</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;=&nbsp;rabbit_sup:start_link(),</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">rabbit_sup.erl文件：</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; background: rgb(255,255,255); color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">-define(</span><span style="font-family: 'courier new'; background: rgb(255,255,255); color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">SERVER</span><span style="font-family: 'courier new'; background: rgb(255,255,255); color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; background: rgb(255,255,255); color: rgb(95,158,160); font-size: 10pt; mso-spacerun: 'yes'">?MODULE</span><span style="font-family: 'courier new'; background: rgb(255,255,255); color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)</span><span style="font-family: 'courier new'; background: rgb(255,255,255); color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">start_link()&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">supervisor:start_link({local,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(95,158,160); font-size: 10pt; mso-spacerun: 'yes'">?SERVER</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">},&nbsp;</span><span style="font-family: 'courier new'; color: rgb(95,158,160); font-size: 10pt; mso-spacerun: 'yes'">?MODULE</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;[])</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'times new roman'; font-size: 10pt; mso-spacerun: 'yes'">这里的?SERVER和?MODULE是一样的值，都为rabbit_sup&nbsp;。<span id="more-200"></span></span><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">跳转到</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">supervisor</span><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.erl<font face="宋体">文件：</font></span><span style="font-family: '宋体'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">start_link(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">SupName</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">gen_server:start_link(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">SupName</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;supervisor,&nbsp;{</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">SupName</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">},&nbsp;[])</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'times new roman'; font-size: 10pt; mso-spacerun: 'yes'">看到supervisor的start_link实际上调用的是gen_server的start_link方法，调用的时候将supervisor作为一个参数传递过去了。</span><span style="font-family: 'times new roman'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'times new roman'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'times new roman'; font-size: 10pt; mso-spacerun: 'yes'">这样到目前为止我们的调用实际为：</span><span style="font-family: 'times new roman'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'times new roman'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(255,0,0); font-size: 10pt; mso-spacerun: 'yes'">gen_server:start_link({local,&nbsp;rabbit_sup},&nbsp;supervisor,&nbsp;{{local,&nbsp;rabbit_sup},&nbsp;rabbit_sup,&nbsp;[]},&nbsp;[]).</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">gen_server.erl<font face="宋体">文件：</font></span><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">start_link(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;gen:start(</span><span style="font-family: 'courier new'; color: rgb(95,158,160); font-size: 10pt; mso-spacerun: 'yes'">?MODULE</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;link,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">start_link(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">gen:start(</span><span style="font-family: 'courier new'; color: rgb(95,158,160); font-size: 10pt; mso-spacerun: 'yes'">?MODULE</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;link,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">gen_server<font face="宋体">的</font><font face="Courier New">start_link</font><font face="宋体">方法调用了</font><font face="Courier New">gen</font><font face="宋体">模块的</font><font face="Courier New">start</font><font face="宋体">方法，实际调用为：</font></span><span style="font-family: '宋体'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; color: rgb(255,0,0); font-size: 10pt; mso-spacerun: 'yes'">gen:start(gen_server,&nbsp;link,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(255,0,0); font-size: 10pt; mso-spacerun: 'yes'">{local,&nbsp;rabbit_sup},supervisor,&nbsp;{{local,&nbsp;rabbit_sup},&nbsp;rabbit_sup,&nbsp;[]},&nbsp;[]).</span><span style="font-family: '宋体'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">gen.erl<font face="宋体">文件：</font></span><span style="font-family: '宋体'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">start(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">GenMod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">LinkP</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">case</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;where(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">of</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">undefined&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;do_spawn(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">GenMod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">LinkP</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Pid</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;{error,&nbsp;{already_started,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Pid</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}}</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">end</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'times new roman'; font-size: 10pt; mso-spacerun: 'yes'">start之前判断是否已经创建了该process，没有则创建，有则返回错误！</span><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">do_spawn(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">GenMod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;link,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; text-decoration: underline; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Time</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;=&nbsp;timeout(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;proc_lib:start_link(</span><span style="font-family: 'courier new'; color: rgb(95,158,160); font-size: 10pt; mso-spacerun: 'yes'">?MODULE</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;init_it,</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">[</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">GenMod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;self(),&nbsp;self(),&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">],</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Time</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">spawn_opts(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">));</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">do_spawn(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">GenMod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">_</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Time</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;=&nbsp;timeout(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;proc_lib:start(</span><span style="font-family: 'courier new'; color: rgb(95,158,160); font-size: 10pt; mso-spacerun: 'yes'">?MODULE</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;init_it,</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;[</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">GenMod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;self(),&nbsp;self,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">],&nbsp;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Time</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;spawn_opts(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">))</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'times new roman'; font-size: 10pt; mso-spacerun: 'yes'">实际又是调用了gen模块的init</span><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'">_it<font face="宋体">方法，采用的</font><font face="Times New Roman">link</font><font face="宋体">的</font><font face="Times New Roman">spawn</font><font face="宋体">方式。</font></span><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">init_it(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">GenMod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Starter</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Parent</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;init_it2(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">GenMod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Starter</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Parent</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;self(),&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">init_it(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">GenMod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Starter</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Parent</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">case</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;name_register(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">of</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">true&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;init_it2(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">GenMod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Starter</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Parent</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{false,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Pid</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;proc_lib:init_ack(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Starter</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;{error,&nbsp;{already_started,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Pid</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}})</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">end</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'">首先尝试注册这个名字，如果发现已经注册，则通知父进程已经创建了。否则跳转到</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">init_in2，</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">init_it2(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">GenMod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Starter</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; text-decoration: underline; mso-spacerun: 'yes'">Parent</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">GenMod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">:init_it(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Starter</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Parent</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'times new roman'; font-size: 10pt; mso-spacerun: 'yes'">这时又跳转到gen_server:init_it方法。</span><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">init_it(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Starter</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;self,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;init_it(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Starter</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;self(),&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">init_it(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Starter</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Parent</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name0</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;=&nbsp;name(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name0</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Debug</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;=&nbsp;debug_options(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Options</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">case</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">catch</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">:init(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">of</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{ok,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">State</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;proc_lib:init_ack(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Starter</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;{ok,&nbsp;self()}),&nbsp;</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'"> </span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;loop(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Parent</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">State</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;infinity,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Debug</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{ok,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">State</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Timeout</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;proc_lib:init_ack(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Starter</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;{ok,&nbsp;self()}),&nbsp;</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'"> </span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;loop(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Parent</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">State</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Timeout</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Debug</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{stop,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Reason</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(178,34,34); font-size: 10pt; mso-spacerun: 'yes'">%%&nbsp;For&nbsp;consistency,&nbsp;we&nbsp;must&nbsp;make&nbsp;sure&nbsp;that&nbsp;the</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(178,34,34); font-size: 10pt; mso-spacerun: 'yes'">%%&nbsp;registered&nbsp;name&nbsp;(if&nbsp;any)&nbsp;is&nbsp;unregistered&nbsp;before</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(178,34,34); font-size: 10pt; mso-spacerun: 'yes'">%%&nbsp;the&nbsp;parent&nbsp;process&nbsp;is&nbsp;notified&nbsp;about&nbsp;the&nbsp;failure.</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(178,34,34); font-size: 10pt; mso-spacerun: 'yes'">%%&nbsp;(Otherwise,&nbsp;the&nbsp;parent&nbsp;process&nbsp;could&nbsp;get</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(178,34,34); font-size: 10pt; mso-spacerun: 'yes'">%%&nbsp;an&nbsp;&#39;already_started&#39;&nbsp;error&nbsp;if&nbsp;it&nbsp;immediately</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(178,34,34); font-size: 10pt; mso-spacerun: 'yes'">%%&nbsp;tried&nbsp;starting&nbsp;the&nbsp;process&nbsp;again.)</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;unregister_name(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name0</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;proc_lib:init_ack(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Starter</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;{error,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Reason</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;exit(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Reason</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">ignore&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;unregister_name(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name0</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;proc_lib:init_ack(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Starter</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;ignore),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;exit(normal);</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{&#39;EXIT&#39;,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Reason</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;unregister_name(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Name0</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;proc_lib:init_ack(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Starter</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;{error,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Reason</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;exit(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Reason</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Else</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Error</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;=&nbsp;{bad_return_value,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Else</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">},</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;proc_lib:init_ack(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Starter</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;{error,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Error</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;exit(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Error</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">end</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'times new roman'; font-size: 10pt; mso-spacerun: 'yes'">又是调用了supervisor的init方法</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">init({</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">SupName</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">})&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;process_flag(trap_exit,&nbsp;true),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">case</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">:init(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">of</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{ok,&nbsp;{</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">SupFlags</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">StartSpec</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}}&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">case</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;init_state(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">SupName</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">SupFlags</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Args</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">of</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{ok,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">State</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">when</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;?is_simple(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">State</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;init_dynamic(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">State</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">StartSpec</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{ok,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">State</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;init_children(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">State</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">StartSpec</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Error</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;{stop,&nbsp;{supervisor_data,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Error</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}}</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">end</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">ignore&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;ignore;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Error</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;{stop,&nbsp;{bad_return,&nbsp;{</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Mod</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;init,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Error</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}}}</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">end</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'times new roman'; font-size: 10pt; mso-spacerun: 'yes'">呵呵，到了这里终于调用了rabbit_sup的init方法了，根据不同的init返回值做不同的启动子进程的操作。</span><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p><!--EndFragment--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2010/01/otp%e4%b8%adsupervisor%e5%90%af%e5%8a%a8%e8%bf%87%e7%a8%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rabbitmq代码摘录(1)</title>
		<link>http://www.qingliangcn.com/2009/12/rabbitmq_source_code_1/</link>
		<comments>http://www.qingliangcn.com/2009/12/rabbitmq_source_code_1/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 06:45:47 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Erlang]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=198</guid>
		<description><![CDATA[
&#160;
诸多erlang应用都是基于erlang现有的一些application，rabbitmq也不例外，在rabbitmq中，需要的application有sasl、os_mon、mnesia。而rabbitmq启动这些application（包括其自身）的代码写的相当的巧妙：（源码基于rabbitmq&#160;1.7.0）


文件&#160;rabbit.erl

-define(APPS,&#160;[os_mon,&#160;mnesia,&#160;rabbit]).

start()&#160;-&#62;
&#160;&#160;&#160;&#160;try
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ok&#160;=&#160;prepare(),
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ok&#160;=&#160;rabbit_misc:start_applications(?APPS)&#160;
&#160;&#160;&#160;&#160;after
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;%%give&#160;the&#160;error&#160;loggers&#160;some&#160;time&#160;to&#160;catch&#160;up
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;timer:sleep(100)
&#160;&#160;&#160;&#160;end.

stop()&#160;-&#62;
&#160;&#160;&#160;&#160;ok&#160;=&#160;rabbit_misc:stop_applications(?APPS).

文件&#160;rabbit_misc.erl

manage_applications(Iterate,&#160;Do,&#160;Undo,&#160;SkipError,&#160;ErrorTag,&#160;Apps)&#160;-&#62;
&#160;&#160;&#160;&#160;Iterate(fun&#160;(App,&#160;Acc)&#160;-&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;case&#160;Do(App)&#160;of
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ok&#160;-&#62;&#160;[App&#160;&#124;&#160;Acc];
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{error,&#160;{SkipError,&#160;_}}&#160;-&#62;&#160;Acc;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{error,&#160;Reason}&#160;-&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;lists:foreach(Undo,&#160;Acc),
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;throw({error,&#160;{ErrorTag,&#160;App,&#160;Reason}})
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end,&#160;[],&#160;Apps),
&#160;&#160;&#160;&#160;ok.

start_applications(Apps)&#160;-&#62;
&#160;&#160;&#160;&#160;manage_applications(fun&#160;lists:foldl/3,
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fun&#160;application:start/1,
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fun&#160;application:stop/1,
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;already_started,
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cannot_start_application,
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Apps).

stop_applications(Apps)&#160;-&#62;
&#160;&#160;&#160;&#160;manage_applications(fun&#160;lists:foldr/3,
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fun&#160;application:stop/1,
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fun&#160;application:start/1,
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;not_started,
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cannot_stop_application,
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Apps).

顺序启动或者关闭几个application，在失败的情况下首先判断操作失败的原因，如果是已经启动或者已经停止，则跳过；如果是启动失败或者停止失败，则先依次停止或者启动之前已经操作成功的application，之后抛出异常结束进程。


]]></description>
			<content:encoded><![CDATA[<div class="Section0">
<p class="p0" style="margin-top: 0pt; text-indent: 36pt; margin-bottom: 0pt">&nbsp;</p>
<p class="p0" style="margin-top: 0pt; text-indent: 36pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'">诸多<font face="Times New Roman">erlang</font><font face="宋体">应用都是基于</font><font face="Times New Roman">erlang</font><font face="宋体">现有的一些</font><font face="Times New Roman">application</font><font face="宋体">，</font><font face="Times New Roman">rabbitmq</font><font face="宋体">也不例外，在</font><font face="Times New Roman">rabbitmq</font><font face="宋体">中，需要的</font><font face="Times New Roman">application</font><font face="宋体">有</font><font face="Times New Roman">sasl</font><font face="宋体">、</font><font face="Times New Roman">os_mon</font><font face="宋体">、</font><font face="Times New Roman">mnesia</font><font face="宋体">。而</font><font face="Times New Roman">rabbitmq</font><font face="宋体">启动这些</font><font face="Times New Roman">application</font><font face="宋体">（包括其自身）的代码写的相当的巧妙：（源码基于</font><font face="Times New Roman">rabbitmq&nbsp;1.7.0</font><font face="宋体">）</font></span><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 36pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 36pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">文件&nbsp;<font face="Times New Roman">rabbit.erl</font></span><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; background: rgb(255,255,255); color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">-define(</span><span style="font-family: 'courier new'; background: rgb(255,255,255); color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">APPS</span><span style="font-family: 'courier new'; background: rgb(255,255,255); color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;[os_mon,&nbsp;mnesia,&nbsp;rabbit])</span><span style="font-family: 'courier new'; background: rgb(255,255,255); color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; background: rgb(255,255,255); color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; background: rgb(255,255,255); color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">start()&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">try</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ok&nbsp;=&nbsp;prepare(),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ok&nbsp;=&nbsp;rabbit_misc:start_applications(</span><span style="font-family: 'courier new'; color: rgb(95,158,160); font-size: 10pt; mso-spacerun: 'yes'">?APPS</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">after</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(178,34,34); font-size: 10pt; mso-spacerun: 'yes'">%%give&nbsp;the&nbsp;error&nbsp;loggers&nbsp;some&nbsp;time&nbsp;to&nbsp;catch&nbsp;up</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer:sleep(</span><span style="font-family: 'courier new'; color: rgb(90,90,180); font-size: 10pt; mso-spacerun: 'yes'">100</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">end</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">stop()&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;ok&nbsp;=&nbsp;rabbit_misc:stop_applications(</span><span style="font-family: 'courier new'; color: rgb(95,158,160); font-size: 10pt; mso-spacerun: 'yes'">?APPS</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 36pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">文件&nbsp;<font face="Times New Roman">rabbit_misc.erl</font></span><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">manage_applications(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Iterate</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Do</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Undo</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">SkipError</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">ErrorTag</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Apps</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Iterate</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">(</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">fun</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">App</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Acc</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">case</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Do</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">App</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">of</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ok&nbsp;-&gt;&nbsp;[</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">App</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;|&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Acc</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">];</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{error,&nbsp;{</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">SkipError</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">_</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}}&nbsp;-&gt;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Acc</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{error,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Reason</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lists:foreach(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Undo</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Acc</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw({error,&nbsp;{</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">ErrorTag</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">App</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Reason</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}})</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">end</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">end</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,&nbsp;[],&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Apps</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">),</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;ok</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">start_applications(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Apps</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;manage_applications(</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">fun</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;lists:foldl/</span><span style="font-family: 'courier new'; color: rgb(90,90,180); font-size: 10pt; mso-spacerun: 'yes'">3</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">fun</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;application:start/</span><span style="font-family: 'courier new'; color: rgb(90,90,180); font-size: 10pt; mso-spacerun: 'yes'">1</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">fun</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;application:stop/</span><span style="font-family: 'courier new'; color: rgb(90,90,180); font-size: 10pt; mso-spacerun: 'yes'">1</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;already_started,</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cannot_start_application,</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Apps</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">stop_applications(</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Apps</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)&nbsp;-&gt;</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;manage_applications(</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">fun</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;lists:foldr/</span><span style="font-family: 'courier new'; color: rgb(90,90,180); font-size: 10pt; mso-spacerun: 'yes'">3</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">fun</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;application:stop/</span><span style="font-family: 'courier new'; color: rgb(90,90,180); font-size: 10pt; mso-spacerun: 'yes'">1</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(160,32,240); font-size: 10pt; font-weight: bold; mso-spacerun: 'yes'">fun</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;application:start/</span><span style="font-family: 'courier new'; color: rgb(90,90,180); font-size: 10pt; mso-spacerun: 'yes'">1</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">,</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;not_started,</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cannot_stop_application,</span><span style="font-family: 'courier new'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; text-indent: 36pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'courier new'; color: rgb(184,134,11); font-size: 10pt; mso-spacerun: 'yes'">Apps</span><span style="font-family: 'courier new'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">)</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">.</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'times new roman'; font-size: 10pt; mso-spacerun: 'yes'">顺序启动或者关闭几个application，在失败的情况下首先判断操作失败的原因，如果是已经启动或者已经停止，则跳过；如果是启动失败或者停止失败，则先依次停止或者启动之前已经操作成功的application，之后抛出异常结束进程。</span><span style="font-family: 'courier new'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
</div>
<p><!--EndFragment--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2009/12/rabbitmq_source_code_1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP中Exception性能简单测试及结论</title>
		<link>http://www.qingliangcn.com/2009/11/php%e4%b8%adexception%e6%80%a7%e8%83%bd%e7%ae%80%e5%8d%95%e6%b5%8b%e8%af%95%e5%8f%8a%e7%bb%93%e8%ae%ba/</link>
		<comments>http://www.qingliangcn.com/2009/11/php%e4%b8%adexception%e6%80%a7%e8%83%bd%e7%ae%80%e5%8d%95%e6%b5%8b%e8%af%95%e5%8f%8a%e7%bb%93%e8%ae%ba/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 13:08:14 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[PHP高级应用]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=192</guid>
		<description><![CDATA[
关于是否使用exception风格（个人的说法，也就是非正常的返回值都以抛异常的形式返回）来编码，我产生了一些疑问，经过和同事的一些讨论，我决定做些简单的性能测试。

&#60;?php
/**
&#160;*&#160;Exception&#160;简单的性能测试
&#160;*&#160;@author&#160;Qingliang.Cn&#160;&#160;qing.liang.cn@gmail.com
&#160;*&#160;@created&#160;2009-11-18&#160;
&#160;*&#160;@lastmodified&#160;2009-11-18
&#160;*/

define(&#8216;T&#8217;,&#160;1000000);

function&#160;no_except($a,&#160;$b)
{
&#160;&#160;&#160;&#160;if&#160;(mt_rand(1,&#160;10)&#160;&#62;&#160;0){
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;$a&#160;+&#160;$b;
&#160;&#160;&#160;&#160;}
}

function&#160;except($a,&#160;$b)
{
&#160;&#160;&#160;&#160;try&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if&#160;(mt_rand(1,&#160;10)&#160;&#62;&#160;5){&#160;//&#160;&#160;0.5的概率抛出异常
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;$a&#160;+&#160;$b;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}else{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;throw&#160;new&#160;Exception(1);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;}catch&#160;(Exception&#160;$e){
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;$e-&#62;getMessage();
&#160;&#160;&#160;&#160;}
}

echo&#160;&#34;1.&#160;with&#160;no&#160;exception,&#160;time&#160;is:&#34;;

$begin&#160;=&#160;microtime(true);

for&#160;($i=0;&#160;$i&#60;&#160;T;&#160;$i++)
{
&#160;&#160;&#160;&#160;no_except(1,&#160;1);
}

echo&#160;microtime(true)&#160;-&#160;$begin;
echo&#160;&#34;\r\n&#34;;

echo&#160;&#34;2.&#160;with&#160;exception,&#160;time&#160;is:&#34;;

$begin&#160;=&#160;microtime(true);

for&#160;($i=0;&#160;$i&#60;&#160;T;&#160;$i++)
{
&#160;&#160;&#160;&#160;except(1,&#160;1);
}

echo&#160;microtime(true)&#160;-&#160;$begin;
echo&#160;&#34;\r\n&#34;;


结果：
100000&#160;(10W)
1.&#160;with&#160;no&#160;exception,&#160;time&#160;is:3.2554759979248
2.&#160;with&#160;exception,&#160;time&#160;is:4.2815051078796

1000000(100W)
1.&#160;with&#160;no&#160;exception,&#160;time&#160;is:31.89279794693
2.&#160;with&#160;exception,&#160;time&#160;is:39.047714948654


上面的测试结果可以看出消耗的时间是相当稳定的，直接的结果是exception比直接return要慢。&#160;

继续分析
抛出异常的概率为0.5，也就是说：50w次的异常处理导致了11秒的性能损失。每次exception处理的消耗大概是&#160;20&#160;微秒，这个消耗是相当的小的。&#160;因为一般情况下，web请求的时间都是ms级别的。

同时这里还有两点需要注意：
1.&#160;没有使用异常的时候，代码中的逻辑判断分值必然会加多，也是一定的消耗。
2.&#160;多数的程序exception命中率不会如上面代码中那么高（50%）。

所以在PHP中应用exception是不需要考虑性能问题的。

如有不同的观点，欢迎拍砖和讨论。&#160;email:&#160;qing.liang.cn&#160;at&#160;gmail.com



]]></description>
			<content:encoded><![CDATA[<div class="Section0" style="layout-grid:  15.6pt none">
<p class="p0" style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">关于是否使用<font face="Courier New">exception</font><font face="宋体">风格（个人的说法，也就是非正常的返回值都以抛异常的形式返回）来编码，我产生了一些疑问，经过和同事的一些讨论，我决定做些简单的性能测试。</font></span><span style="font-family: '宋体'; color: rgb(255,0,0); font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&lt;?php</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(128,128,128); font-size: 10.5pt; mso-spacerun: 'yes'">/**</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(128,128,128); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;*&nbsp;Exception&nbsp;简单的性能测试</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(128,128,128); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;*&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(128,128,128); font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">@author</span><span style="font-family: 'Courier New'; color: rgb(128,128,128); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;Qingliang.Cn&nbsp;&nbsp;qing.liang.cn@gmail.com</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(128,128,128); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;*&nbsp;@created&nbsp;2009-11-18&nbsp;</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(128,128,128); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;*&nbsp;@lastmodified&nbsp;2009-11-18</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(128,128,128); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;*/</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">define(</span><span style="font-family: 'Courier New'; color: rgb(0,130,0); font-size: 10.5pt; mso-spacerun: 'yes'">&#8216;T&#8217;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">1000000</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">function&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">no_except(</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$a</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$b</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">)</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">if&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">(mt_rand(</span><span style="font-family: '宋体'; color: rgb(255,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">1</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">10</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">)&nbsp;&gt;&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">0</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">){</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">return&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$a&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">+&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$b</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">;</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">function&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">except(</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$a</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$b</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">)</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">try&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">if&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">(mt_rand(</span><span style="font-family: '宋体'; color: rgb(255,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">1</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">10</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">)&nbsp;&gt;&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">5</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">){</span><span style="font-family: '宋体'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;//&nbsp;&nbsp;0.5<font face="宋体">的概率抛出异常</font></span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">return&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$a&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">+&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$b</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">;</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">else</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">throw&nbsp;new&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">Exception(</span><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">1</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">catch&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">(Exception&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$e</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">){</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">return&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$e</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">-&gt;getMessage();</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">echo&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,130,0); font-size: 10.5pt; mso-spacerun: 'yes'">&quot;1.&nbsp;with&nbsp;no&nbsp;exception,&nbsp;time&nbsp;is:&quot;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">;</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$begin&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">=&nbsp;microtime(</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">true</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">for&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">(</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$i</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">=</span><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">0</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">;&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$i</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&lt;&nbsp;T;&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$i</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">++)</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;no_except(</span><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">1</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">1</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">echo&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">microtime(</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">true</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">)&nbsp;-&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$begin</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">;</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">echo&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,130,0); font-size: 10.5pt; mso-spacerun: 'yes'">&quot;\r\n&quot;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">;</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">echo&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,130,0); font-size: 10.5pt; mso-spacerun: 'yes'">&quot;2.&nbsp;with&nbsp;exception,&nbsp;time&nbsp;is:&quot;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">;</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$begin&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">=&nbsp;microtime(</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">true</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">for&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">(</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$i</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">=</span><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">0</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">;&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$i</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&lt;&nbsp;T;&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$i</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">++)</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;except(</span><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">1</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">1</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">echo&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">microtime(</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">true</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">)&nbsp;-&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$begin</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">;</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">echo&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,130,0); font-size: 10.5pt; mso-spacerun: 'yes'">&quot;\r\n&quot;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">;</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'">结果：</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'">100000&nbsp;(10W)</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '&Euml;&Icirc;&Igrave;&aring;'; color: rgb(0,0,0); font-size: 9pt; mso-spacerun: 'yes'">1.&nbsp;with&nbsp;no&nbsp;exception,&nbsp;time&nbsp;is:3.2554759979248</span><span style="font-family: '&Euml;&Icirc;&Igrave;&aring;'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '&Euml;&Icirc;&Igrave;&aring;'; color: rgb(0,0,0); font-size: 9pt; mso-spacerun: 'yes'">2.&nbsp;with&nbsp;exception,&nbsp;time&nbsp;is:4.2815051078796</span><span style="font-family: '&Euml;&Icirc;&Igrave;&aring;'; color: rgb(0,0,0); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '&Euml;&Icirc;&Igrave;&aring;'; color: rgb(0,0,0); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'">1000000(100W)</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '&Euml;&Icirc;&Igrave;&aring;'; color: rgb(0,0,0); font-size: 9pt; mso-spacerun: 'yes'">1.&nbsp;with&nbsp;no&nbsp;exception,&nbsp;time&nbsp;is:31.89279794693</span><span style="font-family: '&Euml;&Icirc;&Igrave;&aring;'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '&Euml;&Icirc;&Igrave;&aring;'; color: rgb(0,0,0); font-size: 9pt; mso-spacerun: 'yes'">2.&nbsp;with&nbsp;exception,&nbsp;time&nbsp;is:39.047714948654</span><span style="font-family: '&Euml;&Icirc;&Igrave;&aring;'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(128,128,128); font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(128,128,128); font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">上面的测试结果可以看出消耗的时间是相当稳定的，直接的结果是<font face="Courier New">exception</font><font face="宋体">比直接</font><font face="Courier New">return</font><font face="宋体">要慢。&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">继续分析</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">抛出异常的概率为<font face="Courier New">0.5</font><font face="宋体">，也就是说：</font></span><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10.5pt; mso-spacerun: 'yes'">50w<font face="宋体">次的异常处理导致了</font><font face="Courier New">11</font><font face="宋体">秒的性能损失。每次</font><font face="Courier New">exception</font><font face="宋体">处理的消耗大概是&nbsp;</font><font face="Courier New">20&nbsp;</font><font face="宋体">微秒，</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">这个消耗是相当的小的。&nbsp;因为一般情况下，<font face="Courier New">web</font><font face="宋体">请求的时间都是</font><font face="Courier New">ms</font><font face="宋体">级别的。</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">同时这里还有两点需要注意：</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">1.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">没有使用异常的时候，代码中的逻辑判断分值必然会加多，也是一定的消耗。</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">2.&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">多数的程序<font face="Courier New">exception</font><font face="宋体">命中率不会如上面代码中那么高（</font><font face="Courier New">50%</font><font face="宋体">）。</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="text-align: justify; margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="text-align: justify; margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">所以在<font face="Courier New">PHP</font><font face="宋体">中应用</font><font face="Courier New">exception</font><font face="宋体">是不需要考虑性能问题的。</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="text-align: justify; margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="text-align: justify; margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">如有不同的观点，欢迎拍砖和讨论。&nbsp;<font face="Courier New">email:&nbsp;qing.liang.cn&nbsp;at&nbsp;gmail.com</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="text-align: justify; margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
</div>
<p><!--EndFragment--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2009/11/php%e4%b8%adexception%e6%80%a7%e8%83%bd%e7%ae%80%e5%8d%95%e6%b5%8b%e8%af%95%e5%8f%8a%e7%bb%93%e8%ae%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows7试用</title>
		<link>http://www.qingliangcn.com/2009/10/windows7%e8%af%95%e7%94%a8/</link>
		<comments>http://www.qingliangcn.com/2009/10/windows7%e8%af%95%e7%94%a8/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 15:33:20 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[暂未分类]]></category>

		<guid isPermaLink="false">http://www.nd21.com/archives/191</guid>
		<description><![CDATA[      这几天折腾了一下Windows7，总体的感觉不错。从体验上来说，各方面的设置都和XP类似，即使是有变化也是过渡的非常平稳。唯一感觉不太好的是Windows7的画面感觉不太舒服，看起来非常的累，我的显卡是蓝宝4830的，应该不是卡的问题，舍友安装后也觉得电影的画面看起来有格子的感觉，可能是驱动的问题。
     可能是因为我刚换的4核CPU，感觉windows7的操作似乎比xp还要流畅。
]]></description>
			<content:encoded><![CDATA[<p>      这几天折腾了一下Windows7，总体的感觉不错。从体验上来说，各方面的设置都和XP类似，即使是有变化也是过渡的非常平稳。唯一感觉不太好的是Windows7的画面感觉不太舒服，看起来非常的累，我的显卡是蓝宝4830的，应该不是卡的问题，舍友安装后也觉得电影的画面看起来有格子的感觉，可能是驱动的问题。</p>
<p>     可能是因为我刚换的4核CPU，感觉windows7的操作似乎比xp还要流畅。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2009/10/windows7%e8%af%95%e7%94%a8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>本地Service browser中调试amfphp注意一则</title>
		<link>http://www.qingliangcn.com/2009/08/%e6%9c%ac%e5%9c%b0service-browser%e4%b8%ad%e8%b0%83%e8%af%95amfphp%e6%b3%a8%e6%84%8f%e4%b8%80%e5%88%99/</link>
		<comments>http://www.qingliangcn.com/2009/08/%e6%9c%ac%e5%9c%b0service-browser%e4%b8%ad%e8%b0%83%e8%af%95amfphp%e6%b3%a8%e6%84%8f%e4%b8%80%e5%88%99/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 03:04:06 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=188</guid>
		<description><![CDATA[注意关闭本地web服务器的keepalive功能，否则可能会出现刚刚修改的代码要隔断时间才能失效的问题。目前只在apache环境下发现这个问题。
]]></description>
			<content:encoded><![CDATA[<p>注意关闭本地web服务器的keepalive功能，否则可能会出现刚刚修改的代码要隔断时间才能失效的问题。目前只在apache环境下发现这个问题。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2009/08/%e6%9c%ac%e5%9c%b0service-browser%e4%b8%ad%e8%b0%83%e8%af%95amfphp%e6%b3%a8%e6%84%8f%e4%b8%80%e5%88%99/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP扩展之自定义全局变量</title>
		<link>http://www.qingliangcn.com/2009/08/php%e6%89%a9%e5%b1%95%e4%b9%8b%e8%87%aa%e5%ae%9a%e4%b9%89%e5%85%a8%e5%b1%80%e5%8f%98%e9%87%8f/</link>
		<comments>http://www.qingliangcn.com/2009/08/php%e6%89%a9%e5%b1%95%e4%b9%8b%e8%87%aa%e5%ae%9a%e4%b9%89%e5%85%a8%e5%b1%80%e5%8f%98%e9%87%8f/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 16:45:45 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[PHP内核与扩展]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=186</guid>
		<description><![CDATA[

跟踪了一下PHP中$_GET、$_POST的产生过程，发现通过zend提供的函数和宏可以很方便注册自己的全局数组。相关的函数和宏：
END_API&#160;int&#160;zend_register_auto_global(
char&#160;*name,&#160;//全局数组名
uint&#160;name_len,&#160;&#160;//数组名称长度-&#160;1
zend_auto_global_callback&#160;auto_global_callback&#160;TSRMLS_DC&#160;//数组初始化回调函数
);
#define&#160;ZEND_SET_SYMBOL(symtable,&#160;name,&#160;var) \
{ \
char&#160;*_name&#160;=&#160;(name); \
\
ZEND_SET_SYMBOL_WITH_LENGTH(symtable,&#160;_name,&#160;strlen(_name)+1,&#160;var,&#160;1,&#160;0); \
}

下面来注册我们的全局变量，假设我们的扩展名为test，我们在MINIT中进行注册操作。
zend_bool&#160;ming_global_callback(char&#160;*name,&#160;uint&#160;name_len&#160;TSRMLS_DC)
{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;zval&#160;*tmp;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;MAKE_STD_ZVAL(tmp);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array_init(tmp);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;add_next_index_long(tmp,2222);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ZEND_SET_SYMBOL(&#38;EG(symbol_table),&#160;name,&#160;tmp);
}
PHP_MINIT_FUNCTION(test)
{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/*&#160;If&#160;you&#160;have&#160;INI&#160;entries,&#160;uncomment&#160;these&#160;lines&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;REGISTER_INI_ENTRIES();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;*/
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;zend_register_auto_global(&#34;_MING&#34;,&#160;sizeof(&#34;_MING&#34;)&#160;-&#160;1,&#160;ming_global_callback&#160;&#160;TSRMLS_DC);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;SUCCESS;
}
运行PHP代码&#160;
&#60;?php
var_dump($_MING);
结果：
array(1)&#160;{
&#160;&#160;[0]=&#62;
&#160;&#160;int(2222)
}

]]></description>
			<content:encoded><![CDATA[<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">跟踪了一下<font face="Times New Roman">PHP</font><font face="宋体">中</font><font face="Times New Roman">$_GET</font><font face="宋体">、</font><font face="Times New Roman">$_POST</font><font face="宋体">的产生过程，发现通过</font><font face="Times New Roman">zend</font><font face="宋体">提供的函数和宏可以很方便注册自己的全局数组。相关的函数和宏：</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">END_API&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">int</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;zend_register_auto_global(</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">char</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;*name,&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,128,0); font-size: 9pt; mso-spacerun: 'yes'">//<font face="宋体">全局数组名</font></span><span style="font-family: 'Times New Roman'; color: rgb(0,128,0); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">uint&nbsp;name_len,&nbsp;&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,128,0); font-size: 9pt; mso-spacerun: 'yes'">//<font face="宋体">数组名称长度</font><font face="Times New Roman">-&nbsp;1</font></span><span style="font-family: 'Times New Roman'; color: rgb(0,128,0); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">zend_auto_global_callback&nbsp;auto_global_callback&nbsp;TSRMLS_DC&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,128,0); font-size: 9pt; mso-spacerun: 'yes'">//<font face="宋体">数组初始化回调函数</font></span><span style="font-family: 'Times New Roman'; color: rgb(0,128,0); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">#define</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;ZEND_SET_SYMBOL(symtable,&nbsp;name,&nbsp;var)</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"> </span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">\</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"> </span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">\</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">char</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;*_name&nbsp;=&nbsp;(name);</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"> </span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">\</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">\</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">ZEND_SET_SYMBOL_WITH_LENGTH(symtable,&nbsp;_name,&nbsp;strlen(_name)+1,&nbsp;var,&nbsp;1,&nbsp;0);</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"> </span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">\</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 9pt; mso-spacerun: 'yes'">下面来注册我们的全局变量，假设我们的扩展名为<font face="Times New Roman">test</font><font face="宋体">，我们在</font><font face="Times New Roman">MINIT</font><font face="宋体">中进行注册操作。</font></span><span style="font-family: '宋体'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">zend_bool&nbsp;ming_global_callback(</span><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">char</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;*name,&nbsp;uint&nbsp;name_len&nbsp;TSRMLS_DC)</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zval&nbsp;*tmp;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAKE_STD_ZVAL(tmp);</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array_init(tmp);</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add_next_index_long(tmp,2222);</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZEND_SET_SYMBOL(&amp;EG(symbol_table),&nbsp;name,&nbsp;tmp);</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">PHP_MINIT_FUNCTION(test)</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,128,0); font-size: 9pt; mso-spacerun: 'yes'">/*&nbsp;If&nbsp;you&nbsp;have&nbsp;INI&nbsp;entries,&nbsp;uncomment&nbsp;these&nbsp;lines&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,128,0); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,128,0); font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REGISTER_INI_ENTRIES();</span><span style="font-family: 'Times New Roman'; color: rgb(0,128,0); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,128,0); font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span style="font-family: 'Times New Roman'; color: rgb(0,128,0); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zend_register_auto_global(</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&quot;_MING&quot;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">,&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">sizeof</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">(</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&quot;_MING&quot;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">)&nbsp;-&nbsp;1,&nbsp;ming_global_callback&nbsp;&nbsp;TSRMLS_DC);</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">return</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;SUCCESS;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 9pt; mso-spacerun: 'yes'">运行<font face="Times New Roman">PHP</font><font face="宋体">代码&nbsp;</font></span><span style="font-family: '宋体'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">&lt;?php</span><span style="font-family: 'Courier New'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">var_dump(</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">$_MING</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'">结果：</span><span style="font-family: '宋体'; color: rgb(0,0,0); font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '&Euml;&Icirc;&Igrave;&aring;'; color: rgb(0,0,0); font-size: 9pt; mso-spacerun: 'yes'">array(1)&nbsp;{</span><span style="font-family: '&Euml;&Icirc;&Igrave;&aring;'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '&Euml;&Icirc;&Igrave;&aring;'; color: rgb(0,0,0); font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;[0]=&gt;</span><span style="font-family: '&Euml;&Icirc;&Igrave;&aring;'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '&Euml;&Icirc;&Igrave;&aring;'; color: rgb(0,0,0); font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;int(2222)</span><span style="font-family: '&Euml;&Icirc;&Igrave;&aring;'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '&Euml;&Icirc;&Igrave;&aring;'; color: rgb(0,0,0); font-size: 9pt; mso-spacerun: 'yes'">}</span></p>
<p><!--EndFragment--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2009/08/php%e6%89%a9%e5%b1%95%e4%b9%8b%e8%87%aa%e5%ae%9a%e4%b9%89%e5%85%a8%e5%b1%80%e5%8f%98%e9%87%8f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>xampp下 Pear安装出错Call to undefined method PEAR_Error::set()</title>
		<link>http://www.qingliangcn.com/2009/08/xampp%e4%b8%8b-pear%e5%ae%89%e8%a3%85%e5%87%ba%e9%94%99call-to-undefined-method-pear_errorset/</link>
		<comments>http://www.qingliangcn.com/2009/08/xampp%e4%b8%8b-pear%e5%ae%89%e8%a3%85%e5%87%ba%e9%94%99call-to-undefined-method-pear_errorset/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 03:49:15 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[PHP基础应用]]></category>

		<guid isPermaLink="false">http://www.nd21.com/archives/183</guid>
		<description><![CDATA[简单的解决办法：删除PHP文件夹下的php.ini
]]></description>
			<content:encoded><![CDATA[<p>简单的解决办法：删除PHP文件夹下的php.ini</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2009/08/xampp%e4%b8%8b-pear%e5%ae%89%e8%a3%85%e5%87%ba%e9%94%99call-to-undefined-method-pear_errorset/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

</head>