<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Otp on DanielWS</title><link>https://daniel.ws/pt-br/tags/otp/</link><description>Recent content in Otp on DanielWS</description><generator>Hugo</generator><language>pt-br</language><lastBuildDate>Sat, 16 May 2026 14:10:51 -0300</lastBuildDate><atom:link href="https://daniel.ws/pt-br/tags/otp/index.xml" rel="self" type="application/rss+xml"/><item><title>GenServer the "rabbit hole" — Parte 2: A cascata silenciosa</title><link>https://daniel.ws/pt-br/posts/genserver-the-rabbit-hole-part-2-silent-cascade/</link><pubDate>Sat, 16 May 2026 14:10:51 -0300</pubDate><guid>https://daniel.ws/pt-br/posts/genserver-the-rabbit-hole-part-2-silent-cascade/</guid><description>&lt;blockquote>
&lt;p>Continuação de &lt;a href="https://daniel.ws/pt-br/posts/genserver-the-rabbit-hole/">GenServer the &amp;ldquo;rabbit hole&amp;rdquo;&lt;/a>. Se você ainda não leu, recomendo passar por lá antes — vamos partir do mesmo projeto &lt;code>genserver_study&lt;/code> e dos mesmos conceitos de mailbox, supervisor e &lt;code>max_restarts&lt;/code>.&lt;/p>&lt;/blockquote>
&lt;p>No artigo anterior nós exploramos como um GenServer &amp;ldquo;mal comportado&amp;rdquo; pode encerrar toda a árvore de supervisão quando estoura o &lt;code>max_restarts&lt;/code> do supervisor. Mostramos como mensagens são perdidas no mailbox e como o &amp;ldquo;Let it crash&amp;rdquo; não é exatamente um cheque em branco para deixar processos quebrarem aleatoriamente.&lt;/p></description></item><item><title>GenServer — the "rabbit hole"</title><link>https://daniel.ws/pt-br/posts/genserver-the-rabbit-hole/</link><pubDate>Sat, 19 Jul 2025 13:36:37 -0300</pubDate><guid>https://daniel.ws/pt-br/posts/genserver-the-rabbit-hole/</guid><description>&lt;p>Quando exploramos os pontos fortes do Elixir como linguagem de programação, dois se destacam em frente a outras linguagens do mercado:&lt;/p>
&lt;blockquote>
&lt;h3 id="-3-concurrency-and-scalability">🚀 3. &lt;strong>Concurrency and Scalability&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>Uses &lt;strong>actors (processes)&lt;/strong> for concurrency (each with its own memory and message queue).&lt;/li>
&lt;li>Millions of processes can run concurrently with &lt;strong>low overhead&lt;/strong>.&lt;/li>
&lt;li>Built-in tools for &lt;strong>distribution across multiple nodes&lt;/strong>.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="-4-fault-tolerance-and-supervision-trees">🛠 4. &lt;strong>Fault-Tolerance and Supervision Trees&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>&amp;ldquo;Let it crash&amp;rdquo; philosophy&lt;/strong>: Failures are expected and isolated.&lt;/li>
&lt;li>&lt;strong>Supervision trees&lt;/strong>: Automatically restart failing processes, making systems &lt;strong>self-healing&lt;/strong> and resilient.&lt;/li>
&lt;/ul>&lt;/blockquote>
&lt;p>GenServer é uma abstração sobre o modelo de processos da VM do Erlang que é entregue pelo core da linguagem e se conecta diretamente aos pontos de &lt;strong>Concorrência e Árvore de Supervisão&lt;/strong> do Elixir. Por ser um pilar comum na arquitetura de sistemas construídos em Elixir, e por ser abordado &amp;ldquo;prematuramente&amp;rdquo; nas documentações oficiais (&lt;a href="https://hexdocs.pm/elixir/1.18.4/genservers.html">Client server communication&lt;/a>, &lt;a href="https://elixirschool.com/en/lessons/advanced/otp_concurrency">OTP Concurrency&lt;/a>), é comum que programadores recém-chegados comecem a modelar suas primeiras soluções em Elixir com o uso da abstração fornecida pelo módulo GenServer. Demora um pouco até a doc oficial fazer o primeiro disclaimer para os novos desavisados: &lt;a href="https://hexdocs.pm/elixir/1.18.4/GenServer.html#module-when-not-to-use-a-genserver">When (not) to use a GenServer&lt;/a>.&lt;/p></description></item></channel></rss>