<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="329428" data-post-id="329428">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="CharlesIrvine" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  CharlesIrvine
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Yeah, good point. Actually, 1000 processes completed very quickly. 5000 wasn’t bad but performance degraded rapidly from there. I’ll be looking at refactoring some. I wonder how I can determine whether performance is degraded due to a bottleneck?</p>
<p>Thanks</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="329428" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/need-some-advice-for-mozart-performance-testing/63796/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-329428" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="329428"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="329787" data-post-id="329787">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="CharlesIrvine" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  CharlesIrvine
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Now that I read this closer, I realize that I don’t know what you are suggesting. Can you elaborate? Thanks</p>
<blockquote>
<ul>
<li>consider extracting type-specific code <a href="https://github.com/CharlesIrvineKC/mozart/blob/e345b047076065de8d6b04e5b6a3b6cb75220f8b/lib/mozart/process_engine.ex#L270-L283" rel="noopener nofollow ugc">like this </a> to a per-step (or per-type) “callback module”</li>
</ul>
</blockquote> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="329787" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/need-some-advice-for-mozart-performance-testing/63796/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-329787" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="329787"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="329789" data-post-id="329789">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="cmo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/cmo/120/19618_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  cmo
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I think he means create <code>ServiceTask</code>, <code>JoinTask</code> etc. modules that have functions like <code>create_new</code> and <code>complete_task</code>.</p>
<p>Consider using <code>case</code> instead of a series of <code>if</code> statements or a <code>cond</code>  (see <code>execute_process</code>) that checks the same key a dozen times.</p>
<p>You’re discarding the <code>state</code> on line 282 there aren’t you?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="329789" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/need-some-advice-for-mozart-performance-testing/63796/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-329789" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="329789"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="330639" data-post-id="330639">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="al2o3cr" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/al2o3cr/120/3457_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  al2o3cr
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Instead of checking <code>type</code> everywhere, you’d define a single map:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">@callback_modules %{
  decision: DecisionCallbacks,
  service: ServiceCallbacks,
  send: SendCallbacks,
  ...
}
</code></pre>
<p>A method like <code>complete_able</code> simplifies to:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defp complete_able(t) do
  @callback_modules[t.type].complete_able(t)
end
</code></pre>
<p><code>DecisionCallbacks</code> then defines:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule DecisionCallbacks do
  def complete_able(_task), do: true

  ...more functions used elsewhere in ProcessEngine...
end
</code></pre>
<p>This would also be a valuable place to utilize a <a href="https://hexdocs.pm/elixir/typespecs.html#behaviours" rel="nofollow">behaviour</a> to ensure that the callback modules implement a consistent interface.</p>
<hr>
<p>A further, even more dynamic approach, would have a field <em>on</em> <code>Task</code> that contains the callback module name. That would allow tasks with the same <code>type</code> to have different callbacks. Whether that’s a bug or a feature will depend on your specific needs <img src="https://forum.elixirforum.com/images/emoji/apple/stuck_out_tongue.png?v=15" title=":stuck_out_tongue:" class="emoji" alt=":stuck_out_tongue:" loading="lazy" width="20" height="20"></p>
<hr>
<p>One general note about both variants: they make the code easier to read, but also obscure it from parts of Elixir’s static analysis.</p>
<p>For instance, you would get a compiler error if you wrote <code>DecisionCallbacks.complete_able()</code> (calling with the wrong arity) explicitly, but writing <code>@callback_modules[t.type].complete_able()</code> will only crash at RUNTIME.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="330639" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/need-some-advice-for-mozart-performance-testing/63796/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-330639" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="330639"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-last-post cat-last-post" title="Last post!"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <span class="all-loaded">— All posts loaded —</span>
</div></template></turbo-stream>