<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Two Paths to Concurrency &#8211; Comparing Erlang and LabVIEW</title>
	<atom:link href="http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/feed/" rel="self" type="application/rss+xml" />
	<link>http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/</link>
	<description>LabVIEW and visual programming blog</description>
	<lastBuildDate>Wed, 07 Jul 2010 22:34:08 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
	<item>
		<title>By: Active VI Toolkit public alpha - Erlang style message passing concurrency toolkit for LabVIEW - ExpressionFlow</title>
		<link>http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/comment-page-1/#comment-1634</link>
		<dc:creator>Active VI Toolkit public alpha - Erlang style message passing concurrency toolkit for LabVIEW - ExpressionFlow</dc:creator>
		<pubDate>Sat, 01 Mar 2008 21:59:53 +0000</pubDate>
		<guid isPermaLink="false">http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/#comment-1634</guid>
		<description>[...] few months ago I compared the LabVIEW and Erlang concurrency models in my article Two Paths to Concurrency - Comparing Erlang and LabVIEW. Whereas Erlang concurrency model provides means to write highly concurrent highly scalable [...]</description>
		<content:encoded><![CDATA[<p>[...] few months ago I compared the LabVIEW and Erlang concurrency models in my article Two Paths to Concurrency &#8211; Comparing Erlang and LabVIEW. Whereas Erlang concurrency model provides means to write highly concurrent highly scalable [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Albert</title>
		<link>http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/comment-page-1/#comment-694</link>
		<dc:creator>Albert</dc:creator>
		<pubDate>Mon, 19 Nov 2007 21:17:27 +0000</pubDate>
		<guid isPermaLink="false">http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/#comment-694</guid>
		<description>Hi Tomi

Nice to give us insight in completely other languages. Although I like to read about it I do not forget why we choose LabVIEW. It is a very good language for instrument control and has excellent (not all) libraries for a lot of hardware.
And I can program low-level and high level in the same environment. (this of course also applies to C but I feel good with the multiprocessor style in LabVIEW.
thanks for keeping us not too narrow sighted</description>
		<content:encoded><![CDATA[<p>Hi Tomi</p>
<p>Nice to give us insight in completely other languages. Although I like to read about it I do not forget why we choose LabVIEW. It is a very good language for instrument control and has excellent (not all) libraries for a lot of hardware.<br />
And I can program low-level and high level in the same environment. (this of course also applies to C but I feel good with the multiprocessor style in LabVIEW.<br />
thanks for keeping us not too narrow sighted</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tomi Maila</title>
		<link>http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/comment-page-1/#comment-674</link>
		<dc:creator>Tomi Maila</dc:creator>
		<pubDate>Sat, 17 Nov 2007 09:13:38 +0000</pubDate>
		<guid isPermaLink="false">http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/#comment-674</guid>
		<description>&gt; I am no expert, but from having used LabVIEW it appears to me that whenever you perform an operation on a stream of data, a new copy is made.

These memory allocation blocks in LabVIEW are called buffers. Usually an output of an operation is written into a new buffer. However in the newest version of LabVIEW 8.5 an in-place memory structure was introduced. This allows writing programs that operates buffers in-place. However, currently most of LabVIEW libraries are written without using these new in-place memory structures. As a result you can currently write memory efficient code with LabVIEW, however libraries you use may screw up your memory efficiency.</description>
		<content:encoded><![CDATA[<p>> I am no expert, but from having used LabVIEW it appears to me that whenever you perform an operation on a stream of data, a new copy is made.</p>
<p>These memory allocation blocks in LabVIEW are called buffers. Usually an output of an operation is written into a new buffer. However in the newest version of LabVIEW 8.5 an in-place memory structure was introduced. This allows writing programs that operates buffers in-place. However, currently most of LabVIEW libraries are written without using these new in-place memory structures. As a result you can currently write memory efficient code with LabVIEW, however libraries you use may screw up your memory efficiency.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tomi Maila</title>
		<link>http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/comment-page-1/#comment-673</link>
		<dc:creator>Tomi Maila</dc:creator>
		<pubDate>Sat, 17 Nov 2007 09:03:55 +0000</pubDate>
		<guid isPermaLink="false">http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/#comment-673</guid>
		<description>&gt; This is not “completely asynchronous”...

Thanks Frederico for these details. :)</description>
		<content:encoded><![CDATA[<p>> This is not “completely asynchronous”&#8230;</p>
<p>Thanks Frederico for these details. <img src='http://expressionflow.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Frederico</title>
		<link>http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/comment-page-1/#comment-670</link>
		<dc:creator>Frederico</dc:creator>
		<pubDate>Fri, 16 Nov 2007 15:11:10 +0000</pubDate>
		<guid isPermaLink="false">http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/#comment-670</guid>
		<description>&gt;In Erlang the concurrent model is completely asynchronous; the sender doesn’t need to wait for the message to be handled.

The sender still needs to wait for the message to arrive at the other end, otherwise message passing could not be guaranteed to be reliable. This is not &quot;completely asynchronous&quot; as network or Inter-Processor Interrupt contentions for example can lead to livelock.</description>
		<content:encoded><![CDATA[<p>&gt;In Erlang the concurrent model is completely asynchronous; the sender doesn’t need to wait for the message to be handled.</p>
<p>The sender still needs to wait for the message to arrive at the other end, otherwise message passing could not be guaranteed to be reliable. This is not &#8220;completely asynchronous&#8221; as network or Inter-Processor Interrupt contentions for example can lead to livelock.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jordan Wilberding</title>
		<link>http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/comment-page-1/#comment-665</link>
		<dc:creator>Jordan Wilberding</dc:creator>
		<pubDate>Thu, 15 Nov 2007 17:46:23 +0000</pubDate>
		<guid isPermaLink="false">http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/#comment-665</guid>
		<description>Tomi,

Yes you are correct. As far as spawning new processes to process the data it is about the same. I was thinking more about the spawned processes themselves.

I am no expert, but from having used LabVIEW it appears to me that whenever you perform an operation on a stream of data, a new copy is made. For instance, if you had an Array in LabVIEW and passed it through a sorting VI, it would create a brand new copy of the array. So now you have two full copies of the array, one that is sorted as output, and still the input that is not sorted.

With Erlang, you could program it in such a way that no new space is allocated from the sort, it just replaces the input memory location that was used.

So I think it would be hard to scale LabVIEW because VI just isn&#039;t as good at handling memory from the spawned VIs. It works great for building apps it was intended for, but when data gets big, or concurrency increases, the memory issues becomes important.</description>
		<content:encoded><![CDATA[<p>Tomi,</p>
<p>Yes you are correct. As far as spawning new processes to process the data it is about the same. I was thinking more about the spawned processes themselves.</p>
<p>I am no expert, but from having used LabVIEW it appears to me that whenever you perform an operation on a stream of data, a new copy is made. For instance, if you had an Array in LabVIEW and passed it through a sorting VI, it would create a brand new copy of the array. So now you have two full copies of the array, one that is sorted as output, and still the input that is not sorted.</p>
<p>With Erlang, you could program it in such a way that no new space is allocated from the sort, it just replaces the input memory location that was used.</p>
<p>So I think it would be hard to scale LabVIEW because VI just isn&#8217;t as good at handling memory from the spawned VIs. It works great for building apps it was intended for, but when data gets big, or concurrency increases, the memory issues becomes important.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tomi Maila</title>
		<link>http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/comment-page-1/#comment-664</link>
		<dc:creator>Tomi Maila</dc:creator>
		<pubDate>Thu, 15 Nov 2007 15:07:28 +0000</pubDate>
		<guid isPermaLink="false">http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/#comment-664</guid>
		<description>Jordan, I&#039;ve understood that when you send a message to a process in Erlang, Erlang creates a copy of the data sent. Am I incorrect here?</description>
		<content:encoded><![CDATA[<p>Jordan, I&#8217;ve understood that when you send a message to a process in Erlang, Erlang creates a copy of the data sent. Am I incorrect here?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jordan Wilberding</title>
		<link>http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/comment-page-1/#comment-663</link>
		<dc:creator>Jordan Wilberding</dc:creator>
		<pubDate>Thu, 15 Nov 2007 14:50:55 +0000</pubDate>
		<guid isPermaLink="false">http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/#comment-663</guid>
		<description>It would be interesting to see just how things will scale with LabVIEW. I have used LabVIEW quite alot, and one of the headaches is that with each split(copy) of data, you are double, tripling, etc. your memory requirements. Even in the world where most computers have at 1-2GB of RAM, memory can quickly run out for large applications. Erlang does things a little different, and memory isn&#039;t being allocated all the time.

I really wish an open source LabVIEW program would come out. Programming visually like LabVIEW does lends itself well to a lot of applications.</description>
		<content:encoded><![CDATA[<p>It would be interesting to see just how things will scale with LabVIEW. I have used LabVIEW quite alot, and one of the headaches is that with each split(copy) of data, you are double, tripling, etc. your memory requirements. Even in the world where most computers have at 1-2GB of RAM, memory can quickly run out for large applications. Erlang does things a little different, and memory isn&#8217;t being allocated all the time.</p>
<p>I really wish an open source LabVIEW program would come out. Programming visually like LabVIEW does lends itself well to a lot of applications.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shane</title>
		<link>http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/comment-page-1/#comment-645</link>
		<dc:creator>Shane</dc:creator>
		<pubDate>Tue, 13 Nov 2007 22:40:08 +0000</pubDate>
		<guid isPermaLink="false">http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/#comment-645</guid>
		<description>I realised I&#039;ve posted 2 critical responses without saying ....

Nice article Tomi.  Thanks.</description>
		<content:encoded><![CDATA[<p>I realised I&#8217;ve posted 2 critical responses without saying &#8230;.</p>
<p>Nice article Tomi.  Thanks.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shane</title>
		<link>http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/comment-page-1/#comment-644</link>
		<dc:creator>Shane</dc:creator>
		<pubDate>Tue, 13 Nov 2007 22:38:33 +0000</pubDate>
		<guid isPermaLink="false">http://expressionflow.com/2007/11/12/two-paths-to-concurrency-comparing-erlang-and-labview/#comment-644</guid>
		<description>Tomi wrote &quot;this is not in the core design of LabVIEW&quot;.  True.  But the core design allows it.  It&#039;s not neccessary to get LV to do something contrary to its normal mode of operation.

A dynamic dispatch VI is synchronous, but the actions taken by it may lead to asynchronous actions.  Surely the &quot;functions&quot; within Erlang which actually performs the communication is in itself also synchronous.  The next line of code is surely not executed before the previous one is executed.

Tomi also wrote &quot;Erlang processes are aware of the connections they have with other processes. When one process fails somewhere in this network of Erlang processes, the failing process broadcasts the failure to all the dependent processes. This way asynchronous error handling is independent of the messages sent between the two processes.&quot;.  This certainly sounds useful when building this kind of process, but it&#039;s nothing which couldn&#039;t also be achieved with LV.  A lot of work maybe until its up and running, granted.</description>
		<content:encoded><![CDATA[<p>Tomi wrote &#8220;this is not in the core design of LabVIEW&#8221;.  True.  But the core design allows it.  It&#8217;s not neccessary to get LV to do something contrary to its normal mode of operation.</p>
<p>A dynamic dispatch VI is synchronous, but the actions taken by it may lead to asynchronous actions.  Surely the &#8220;functions&#8221; within Erlang which actually performs the communication is in itself also synchronous.  The next line of code is surely not executed before the previous one is executed.</p>
<p>Tomi also wrote &#8220;Erlang processes are aware of the connections they have with other processes. When one process fails somewhere in this network of Erlang processes, the failing process broadcasts the failure to all the dependent processes. This way asynchronous error handling is independent of the messages sent between the two processes.&#8221;.  This certainly sounds useful when building this kind of process, but it&#8217;s nothing which couldn&#8217;t also be achieved with LV.  A lot of work maybe until its up and running, granted.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
