Would forkOS instead of forkIO help in this case?<div><br><div class="gmail_quote">On Sun, Dec 21, 2008 at 11:16 PM, Mads LindstrÝm <span dir="ltr">&lt;<a href="mailto:mads_lindstroem@yahoo.dk">mads_lindstroem@yahoo.dk</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Hi GŁnter<br>
<div class="Ih2E3d"><br>
GŁnther Schmidt wrote:<br>
&gt; Hi,<br>
&gt;<br>
&gt; in an application of mine I start a long-running operation in a thread via<br>
&gt; forkIO so that the UI process doesn&#39;t get blocked.<br>
&gt; It just so happens, that the long-running process also takes the CPU to<br>
&gt; nearly 100% while it runs.<br>
&gt;<br>
&gt; During that time the run-time system does *not* switch back and forth<br>
&gt; between the UI-process and the long-running task, it seems that the UI<br>
&gt; process only gets woken up *after* the high CPU thread finishes completely.<br>
&gt;<br>
&gt; To the effect of course that it makes no difference at all to the UIs<br>
&gt; responsiveness whether I use forkIO or not.<br>
&gt;<br>
&gt; The long running process is pretty atomic, it&#39;s a single query to the<br>
&gt; database which takes up to a minute to complete so I don&#39;t see a chance to<br>
&gt; squeeze a &quot;mainIteration&quot; in there.<br>
<br>
</div>It could be the database library, as it may use unsafe foreign calls.<br>
Unsafe foreign calls blocks all other threads, even if you compile with<br>
the -threaded option. See<br>
<a href="http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Concurrent.html#4" target="_blank">http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Concurrent.html#4</a> .<br>
<br>
I cannot claim to know how all Haskell database libraries are<br>
implemented, but at least some of them use unsafe foreign calls. So<br>
which database library is you using?<br>
<br>
&gt;<br>
&gt; What can I do?<br>
<br>
If the problem has to do with unsafe foreign calls, then you can<br>
implement the database calls in a separate process. Not the easiest<br>
options, but I can think of no other.<br>
<br>
&gt;<br>
&gt; GŁnther<br>
&gt;<br>
<font color="#888888"><br>
/Mads LindstrÝm<br>
</font><div><div></div><div class="Wj3C7c"><br>
<br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br></div>