I think Saulo indeed managed to reverse engineer the correct answer, and, to save future questioners from the same detective work, I've added a description in Section 8.6 of the manual. (Its compiled PDF version will go up on the web with the next Ur/Web release.)

Thanks, Benjamin, for pointing out this documentation hole.

On 08/21/2016 07:13 PM, Saulo Araujo wrote:
Hi Benjamin,

I believe that, besides sleep, only the functions rpc and recv also trigger context switches. If you look into the source code of the Ur/Web JavaScript runtime (urweb.js), you will see that there is a boolean variable called maySuspend, which says when context switches are allowed and the only functions that check the value of maySuspend are sl (sleep), rc (rpc) and rc (recv).

Sincerely,
Saulo Araujo

On Sat, Aug 20, 2016 at 5:25 PM, Benjamin Barenblat <[email protected] <mailto:[email protected]>> wrote:

    The threads demo* explains that ‘Ur/Web [client code] uses cooperative
    multi-threading, not the more common preemptive multi-threading. Only
    one thread runs at a time, and only particular function calls can
    trigger context switches. In this example, sleep is the only such
    function that appears.’ What other functions can trigger context
    switches?

    * http://impredicative.com/ur/demo/threads.desc.html
    <http://impredicative.com/ur/demo/threads.desc.html>

_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur

Reply via email to