<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-CA link="#0563C1" vlink="#954F72" style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal><span lang=EN-US>After tinkering with loom and learning a lot of revised synchronous style practices, I was recently watching another presentation on Reactive Programming, and it got me thinking about how some of the asynchronous practices, such as Backpressure, could be expressed in the synchronous world of Virtual Threads, Structured Concurrency, etc.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>After working on Akka Scala for years, using Reactive Practices, I had a sense that it might be possible to build applications/services that would not thrash. They would go up to 100% utilization, without thrashing, and then just refuse more work. <i>Sorry mate, I won’t do that now, maybe talk to the Load Balancer about spawning some more siblings…</i> I don’t know how true this sense is, only that it’s a hopeful sense.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>While I have dabbled with </span>java.util.concurrent.Flow using Virtual Threads successfully, I still find the cognitive load for using Rx APIs higher than I would like, but it is well disciplined and has many other benefits, such as backpressure.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>In the future, can we build simpler synchronous APIs with the benefits of asynchronous APIs such as Rx, leveraging the scalability/throughput of Virtual Threads and the discipline of Structure Concurrency? I guess I am just lazy, and I don’t want to think harder than I have to.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Cheers, Eric<span lang=EN-US><o:p></o:p></span></p></div></body></html>