<div dir="ltr"><br><div class="gmail_quote"><div dir="ltr">On Thu, Jul 20, 2017 at 10:56 AM Jim J. Jewett <<a href="mailto:jimjjewett@gmail.com">jimjjewett@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I agree that startup time is a problem, but I wonder if some of the pain could be mitigated by using a persistent process.  <br></div></blockquote><div><br></div><div>This is one strategy that works under some situations, but not all.</div><div><br></div><div>There are downsides to daemons:</div><div> * They only work on one machine.  New instances being launched in a cloud (think kubernetes jobs, app engine workers, etc) cannot benefit.</div><div> * A daemon that forks off new workers can lose the benefit of hash randomization as tons of processes at once share the same seed. Mitigation for this is possible by regularly relaunching new replacement daemons but that complicates the already complicated.</div><div> * Correctly launching and managing a daemon process is hard. Even once you have done so, you now have a interprocess concurrency and synchronization issues.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">For example, in <a href="https://mail.python.org/pipermail/python-dev/2017-July/148664.html" target="_blank">https://mail.python.org/pipermail/python-dev/2017-July/148664.html</a> Ben Hoyt mentions that the Google Cloud SDK (CLI) team has found it "especially problematic for shell tab completion helpers, because every time you press tab the shell has to load your Python program"</div></blockquote><div><br></div><div>I can imagine a daemon working well in this specific example.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Is it too hard to create a daemon server?</div></div></blockquote><div><br></div><div>That is my take on it. </div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Is the communication and context switch slower than a new startup?  </div><div>Is the pattern just not well-enough advertised?</div></div></blockquote><div><br></div><div>I have experienced good daemon processes. Bazel (a Java based build system) uses that approach.</div><div><br></div><div>I can imagine Mercurial being able to do so as well but have no idea if they've looked into it or not.</div><div><br></div><div>Daemons are by their nature an application specific thing.</div><div><br></div><div>-gps</div></div></div>