<?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>中文 &#187; pengsixiang</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/author/pengsixiang/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Sat, 26 May 2012 06:34:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Perl 程序在做多线程时 async 使用一定要谨慎</title>
		<link>http://software.intel.com/zh-cn/blogs/2011/02/16/perl-async/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2011/02/16/perl-async/#comments</comments>
		<pubDate>Wed, 16 Feb 2011 06:15:03 +0000</pubDate>
		<dc:creator>pengsixiang</dc:creator>
				<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[并行计算]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2011/02/16/perl-async/</guid>
		<description><![CDATA[使用Perl开发Linux和Unix维护管理脚本是常用的手段，其中也会因为作业要求大量使用多线程技术。通常下我们使用threads::create()创建一个新的线程，这时候往往我们会创建一个$thr来保存线程ID，并在程序结束后由threads回收线程资源。但是threads还提供了一个叫做async的函数，这个函数提供程序块（BLOCK）的方式创建匿名线程。这个函数帮助我们解决多线程中的同步问题。例如我们在多线程中使用print方法时会发现，我们的print结果没有及时的回显到屏幕上，那么这个函数将帮我解决这个问题。 但是在使用async函数时一定要小心，那就是函数并不会在BLOCK块执行完成后释放匿名线程资源，这将会直接导致内存溢出的严重后果。 当async函数导致内存溢出后，无法再创建新的匿名线程时，会出现这样的错误警告： Thread creation failed: pthread_create returned 12 at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/threads.pm line 117. 并且我们使用ps 命令可以看到（红色字体描述的是内存使用量）： root 9332 1.0 87.0 3129776 222236 ? Ssl 18:18 0:11 这样的信息。 我们应该在代码中使用$thr变量来保存这个匿名线程对象，并在使用完成后手动结束和释放掉该线程资源。或在BLOCK代码块的}后使用-&#62;exit()来让该线程自己结束掉，这时perl才会去释放async匿名线程的资源。]]></description>
			<content:encoded><![CDATA[<p>使用Perl开发Linux和Unix维护管理脚本是常用的手段，其中也会因为作业要求大量使用多线程技术。通常下我们使用threads::create()创建一个新的线程，这时候往往我们会创建一个$thr来保存线程ID，并在程序结束后由threads回收线程资源。但是threads还提供了一个叫做async的函数，这个函数提供程序块（BLOCK）的方式创建匿名线程。这个函数帮助我们解决多线程中的同步问题。例如我们在多线程中使用print方法时会发现，我们的print结果没有及时的回显到屏幕上，那么这个函数将帮我解决这个问题。</p>
<p>但是在使用async函数时一定要小心，那就是函数并不会在BLOCK块执行完成后释放匿名线程资源，这将会直接导致内存溢出的严重后果。</p>
<p>当async函数导致内存溢出后，无法再创建新的匿名线程时，会出现这样的错误警告：</p>
<p>Thread creation failed: pthread_create returned 12 at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/threads.pm line 117.</p>
<p>并且我们使用ps 命令可以看到（红色字体描述的是内存使用量）：</p>
<p>root 9332 1.0 87.0 3129776 222236 ? Ssl 18:18 0:11</p>
<p>这样的信息。</p>
<p>我们应该在代码中使用$thr变量来保存这个匿名线程对象，并在使用完成后手动结束和释放掉该线程资源。或在BLOCK代码块的}后使用-&gt;exit()来让该线程自己结束掉，这时perl才会去释放async匿名线程的资源。</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2011/02/16/perl-async/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

