<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: a pitfall in passing socket via processes</title>
	<atom:link href="http://erlang-china.org/study/pitfall_socket_pass.html/feed" rel="self" type="application/rss+xml" />
	<link>http://erlang-china.org/study/pitfall_socket_pass.html</link>
	<description>erlang 中文社区</description>
	<pubDate>Mon, 01 Dec 2008 21:54:44 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
		<item>
		<title>By: Jerry</title>
		<link>http://erlang-china.org/study/pitfall_socket_pass.html#comment-3278</link>
		<dc:creator>Jerry</dc:creator>
		<pubDate>Mon, 10 Dec 2007 13:30:42 +0000</pubDate>
		<guid isPermaLink="false">http://erlang-china.org/study/pitfall_socket_pass.html#comment-3278</guid>
		<description>我觉得jackyz的这个经验很值得我们注意的。

在实际应用中，搞清楚process和其所拥有的socket之间的天生绑定关系，在写代码时就能小心避免错误。
Erlang中有不少这样的情况，比如process和其创建的ets表，也是一种从属关系，control process
销毁后，其ets表也不存在了。

另外，我认为socket还是不应该通过函数的参数来传递，即使其control process在传递完socket后依
旧存在，但是这样做还是不安全的，无法断定control process何时被kill。正确的方法应该是使用
gen_tcp中的controlling_process(Socket,Pid) -&#62; ok&#124;{error,eperm}函数，使得socket更换
其control process,这样就达到使其他process来代替原先的process控制特定socket的目的。从这个
函数也可以看出一点“socket属于它的control process”的端倪来。</description>
		<content:encoded><![CDATA[<p>我觉得jackyz的这个经验很值得我们注意的。</p>
<p>在实际应用中，搞清楚process和其所拥有的socket之间的天生绑定关系，在写代码时就能小心避免错误。<br />
Erlang中有不少这样的情况，比如process和其创建的ets表，也是一种从属关系，control process<br />
销毁后，其ets表也不存在了。</p>
<p>另外，我认为socket还是不应该通过函数的参数来传递，即使其control process在传递完socket后依<br />
旧存在，但是这样做还是不安全的，无法断定control process何时被kill。正确的方法应该是使用<br />
gen_tcp中的controlling_process(Socket,Pid) -&gt; ok|{error,eperm}函数，使得socket更换<br />
其control process,这样就达到使其他process来代替原先的process控制特定socket的目的。从这个<br />
函数也可以看出一点“socket属于它的control process”的端倪来。</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jackyz</title>
		<link>http://erlang-china.org/study/pitfall_socket_pass.html#comment-3228</link>
		<dc:creator>jackyz</dc:creator>
		<pubDate>Wed, 28 Nov 2007 13:33:52 +0000</pubDate>
		<guid isPermaLink="false">http://erlang-china.org/study/pitfall_socket_pass.html#comment-3228</guid>
		<description>对于这种“一退都退”的特性在Erlang中很常见。这属于被社区所提倡的“The Erlang Way”，即，所谓的“单一外部世界入口”处理模式。

和外界打交道的地方，也就是可能引入‘side effect’的地方，与其在系统外由外部的机制来保证处理的完整性，还不如仅仅通过一个单一的进程——“control process”来控制，其余进程通过与这个“control process”通讯，来获得对于资源的访问。

这貌似多此一举，实则不然。因为，一方面这“屏蔽”了外界系统对于并发支持的差异，将“并发/并行”的复杂性限制在 Erlang 的框架之内，通过“进程间通讯”的方式解决，从而得以最大限度的“无锁化”。令一方面，也简化了失效处理的策略，一旦失效，直接 kill 掉再重启就行，无须担心多个进程之间共享同一个资源，而导致的复杂锁定情况。

因此，这也可以说是“Erlang无锁化思想在其他问题上的延伸”。

比较 pitfall 的是，竟然没有文档提到 socket 与 creator process 的关系是： socket “属于”它的 control process 。毕竟，这与大家所熟悉的观念还是很不相同的。</description>
		<content:encoded><![CDATA[<p>对于这种“一退都退”的特性在Erlang中很常见。这属于被社区所提倡的“The Erlang Way”，即，所谓的“单一外部世界入口”处理模式。</p>
<p>和外界打交道的地方，也就是可能引入‘side effect’的地方，与其在系统外由外部的机制来保证处理的完整性，还不如仅仅通过一个单一的进程——“control process”来控制，其余进程通过与这个“control process”通讯，来获得对于资源的访问。</p>
<p>这貌似多此一举，实则不然。因为，一方面这“屏蔽”了外界系统对于并发支持的差异，将“并发/并行”的复杂性限制在 Erlang 的框架之内，通过“进程间通讯”的方式解决，从而得以最大限度的“无锁化”。令一方面，也简化了失效处理的策略，一旦失效，直接 kill 掉再重启就行，无须担心多个进程之间共享同一个资源，而导致的复杂锁定情况。</p>
<p>因此，这也可以说是“Erlang无锁化思想在其他问题上的延伸”。</p>
<p>比较 pitfall 的是，竟然没有文档提到 socket 与 creator process 的关系是： socket “属于”它的 control process 。毕竟，这与大家所熟悉的观念还是很不相同的。</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: pi1ot</title>
		<link>http://erlang-china.org/study/pitfall_socket_pass.html#comment-3226</link>
		<dc:creator>pi1ot</dc:creator>
		<pubDate>Wed, 28 Nov 2007 08:40:39 +0000</pubDate>
		<guid isPermaLink="false">http://erlang-china.org/study/pitfall_socket_pass.html#comment-3226</guid>
		<description>干活基本靠fork，IO基本靠port。
脑子里突然冒出这么两句话，没啥其他意思，纯粹搞笑而已。</description>
		<content:encoded><![CDATA[<p>干活基本靠fork，IO基本靠port。<br />
脑子里突然冒出这么两句话，没啥其他意思，纯粹搞笑而已。</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mryufeng</title>
		<link>http://erlang-china.org/study/pitfall_socket_pass.html#comment-3225</link>
		<dc:creator>mryufeng</dc:creator>
		<pubDate>Wed, 28 Nov 2007 07:24:36 +0000</pubDate>
		<guid isPermaLink="false">http://erlang-china.org/study/pitfall_socket_pass.html#comment-3225</guid>
		<description>从erlang实现上看 这个特性全然不是无奈之举 个人认为是深思熟虑的结果 因为整个方法和实现是非常统一的。</description>
		<content:encoded><![CDATA[<p>从erlang实现上看 这个特性全然不是无奈之举 个人认为是深思熟虑的结果 因为整个方法和实现是非常统一的。</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: pi1ot</title>
		<link>http://erlang-china.org/study/pitfall_socket_pass.html#comment-3224</link>
		<dc:creator>pi1ot</dc:creator>
		<pubDate>Wed, 28 Nov 2007 05:27:00 +0000</pubDate>
		<guid isPermaLink="false">http://erlang-china.org/study/pitfall_socket_pass.html#comment-3224</guid>
		<description>怎么看都是无奈之举，erlang基本上全靠port来和os打交道。</description>
		<content:encoded><![CDATA[<p>怎么看都是无奈之举，erlang基本上全靠port来和os打交道。</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mryufeng</title>
		<link>http://erlang-china.org/study/pitfall_socket_pass.html#comment-3222</link>
		<dc:creator>mryufeng</dc:creator>
		<pubDate>Wed, 28 Nov 2007 04:09:13 +0000</pubDate>
		<guid isPermaLink="false">http://erlang-china.org/study/pitfall_socket_pass.html#comment-3222</guid>
		<description>erlang的这个特性不错的 省却了好多资源管理的麻烦，特别是在driver这方面。</description>
		<content:encoded><![CDATA[<p>erlang的这个特性不错的 省却了好多资源管理的麻烦，特别是在driver这方面。</p>
]]></content:encoded>
	</item>
</channel>
</rss>
