

<?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>Rodrigo Kumpera Weblog &#187; shared-memory</title>
	<atom:link href="http://www.kumpera.net/blog/index.php/category/shared-memory/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kumpera.net/blog</link>
	<description>Meus achados sobre tecnologia</description>
	<lastBuildDate>Thu, 14 Jul 2011 15:45:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>As fantásticas threads do Ruby 1.9</title>
		<link>http://www.kumpera.net/blog/index.php/2007/05/25/as-fantasticas-threads-do-ruby-19/</link>
		<comments>http://www.kumpera.net/blog/index.php/2007/05/25/as-fantasticas-threads-do-ruby-19/#comments</comments>
		<pubDate>Sat, 26 May 2007 02:57:24 +0000</pubDate>
		<dc:creator>kumpera</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[shared-memory]]></category>

		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2007/05/25/as-fantasticas-threads-do-ruby-19/</guid>
		<description><![CDATA[
Fico realmente desapontado quando vejo noticias como essa. Quando pessoas supostamente esclarecidas tomam decisões incrivelmente estúpidas. Usar threads nativas porém sincronizando o acesso ao interpretador é aviltante. Por favor, se é para ter threads, que seja para valer, não repetir a mesma tentativa fracassada do python. Não quer suportá-las ótimo, também acho uma péssima abstração, [...]]]></description>
			<content:encoded><![CDATA[<p>
Fico realmente desapontado quando vejo <a href="http://www.infoq.com/news/2007/05/ruby-threading-futures">noticias como essa</a>. Quando pessoas supostamente esclarecidas tomam decisões incrivelmente estúpidas. Usar threads nativas porém sincronizando o acesso ao interpretador é aviltante. Por favor, se é para ter threads, que seja para valer, não repetir a mesma tentativa fracassada do python. Não quer suportá-las ótimo, também acho uma péssima abstração, mas então tenha suporte de primeira classe a processos.
</p>
<p>
Agora o problema todo não se a resume a green-threads são naturalmente ruim, eu até já <a href="http://www.kumpera.net/blog/index.php/2007/04/12/green-threads-ideia-ruim-ou-implementacoes-pessimas/">falei anteriormente sobre isso</a>, mas a questão é garantir que todas threads executem apenas código gerenciado ou código nativo. Essa garantia é suficiente para permitir um sistema escalável é livre dos problemas habituais. Tudo bem que a interface nativa fica muito mais complicada, não é mais um wrapper para o código externo e sim um protocolo de IPC.
</p>
<p>
Espero pelo menos que esse tipo de discussão sirva para alertar do fato que threading é um mecanismo complicado demais para ser efetivamente utilizado, enquanto troca de mensagens entre processos leves é um paradigma igualmente poderoso com garantias de segurança muito maiores. Quando não existe memória compartilhada e necessidade de locking, concorrência é um problema resolvido localmente por cada processo/ator envolvido. Protocolos são criados e definidos que representam de maneira muito mais clara e lógica o que seria de outra maneira representada por uma estrutura de dados compartilhada e seus monitores.
</p>
<p>
Enfim, enquanto se discutir o assunto, ainda existe esperança, mesmo que decisões muito erradas sejam tomadas. Não é uma questão simplesmente de nos preparar para um futuro com sistemas com muitos núcleos, mas sim facilitar a construção de software muito mais seguro e confiável. As provas e evidencias estão por toda parte, ao alcance de todos dispostos a abrir os olhos para o futuro.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kumpera.net/blog/index.php/2007/05/25/as-fantasticas-threads-do-ruby-19/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Futuro da programação concorrente</title>
		<link>http://www.kumpera.net/blog/index.php/2006/09/07/futuro-da-programacao-concorrente/</link>
		<comments>http://www.kumpera.net/blog/index.php/2006/09/07/futuro-da-programacao-concorrente/#comments</comments>
		<pubDate>Fri, 08 Sep 2006 02:45:18 +0000</pubDate>
		<dc:creator>kumpera</dc:creator>
				<category><![CDATA[concurrency]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[shared-memory]]></category>

		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2006/09/07/futuro-da-programacao-concorrente/</guid>
		<description><![CDATA[Programação concorrente é dificil, mais dificil que acordar cedo em pleno inverno. Arrumar gente que entenda e saiba escrever corretamente aplicações multi-threaded é muito dificil. O pior que é bem razoavel esperar isso, afinal acompanhar mentalmente o fluxo de várias threads em paralelo no mínimo faz o cérebro doer. Ou resolvemos isso logo, ou estaremos [...]]]></description>
			<content:encoded><![CDATA[<p>Programação concorrente é dificil, mais dificil que acordar cedo em pleno inverno. Arrumar gente que entenda e saiba escrever corretamente aplicações multi-threaded é muito dificil. O pior que é bem razoavel esperar isso, afinal acompanhar mentalmente o fluxo de várias threads em paralelo no mínimo faz o cérebro doer. Ou resolvemos isso logo, ou estaremos nos condenando a passar os próximos anos apenas tentando arrumar esse embrólio.</p>
<p>O grande problema é o modelo que as linguagens que usamos, tais como Java, C ou Ruby, tem essa coisa horrivel que é memória compartilhada entre as várias linhas de execução, nossas queridas threads. O Joe Armstrong, um guru nesta área argumenta sobre isso <a href="http://armstrongonsoftware.blogspot.com/2006/09/why-i-dont-like-shared-memory.html">neste artigo</a> e defende o porque de ser um problema muito bem.</p>
<p>O Joe também fala que apenas usando múltiplos procesos e passagem de mensagens entre eles é possivel conseguir o mesmo resultado, só que de forma muito mais facil e confiavel, ele ainda sugere usar Erlang. A um tempo <a href="http://www.kumpera.net/blog/index.php/2006/07/28/construindo-sistemas-multi-threaded-de-forma-facil/">escrevi um artigo</a> falando um pouco sobre como Erlang funciona e ainda continuo firme que o seu modelo de execução é muito superior ao que temos nas linguagens mainstream &#8211; mas peca por ser uma linguagem dificil de usar.</p>
<p>Mas quais são as característica que tornam Erlang tão interessantes? Primeiro, seu suporte a processos super leves, manter um milhão deles executando em paralelo é perfeitamente possivel, já que para criar um basta pouco mais de 1kb de memória e o tempo de alocá-la &#8211; compare isso com o tempo e o uso de memória para subir uma JVM. Depois temos uma sintaxe especial para troca de mensagens assíncronas entre processos &#8211; que é uniforme em relação a localização de cada um. Cada processo possui sua área propria de memória, se um processo fizer muita meleca e morrer, nada interfere no funcionamento dos demais. Essa resiliência torna Erlang uma linguagem muito mais segura e confiavel que as demais.</p>
<p>Por isso que eu acredito que o próximo Java vai ser a linguagem que suportar um ambiente de execução semelhante ao do Erlang. Esse me parece ser o avanço técnológico que justificaria uma adoção em massa, e para entender isso bastar olharmos para tras. Gerenciamento manual de memória é facil de explicar e fazer um estagiário entender, ele vai saber que quando terminar de usar um pedaço de memória, ele deve ser liberado &#8211; apesar disso excelentes desenvolvedores gastam muito tempo caçando memory-leaks em código C/C++. Programação concorrente com memória compartilhada é dificil achar plenos/seniors que são capazes de entender direito. Java introduziu gerenciamento automático de memória para as massas, agora precisamos uma linguagem que faça o mesmo com processos leves e passagem de mensagens.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kumpera.net/blog/index.php/2006/09/07/futuro-da-programacao-concorrente/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

