<div dir="ltr"><div dir="ltr">Hey Eric,<br><br><div>A great analogy, I wonder if I can use it in my talk at the PhillyJUG (of course, using your reference) today.<br><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div><font face="trebuchet ms, sans-serif"><b>Thank you,</b></font></div><div dir="ltr"><font face="trebuchet ms, sans-serif"><b>-</b></font></div><div dir="ltr"><font face="trebuchet ms, sans-serif"><b>A N M Bazlur Rahman</b></font></div><div dir="ltr"><br></div><div><br></div></div></div></div></div></div></div></div></div></div></div></div><br></div></div><br><img width="0" height="0" class="mailtrack-img" alt="" style="display:flex" src="https://mailtrack.io/trace/mail/2dbbc76aa7e31276a04904dced68fe2ad6410e93.png?u=2428395"><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jul 19, 2022 at 2:34 PM <<a href="mailto:eric@kolotyluk.net">eric@kolotyluk.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="EN-CA" style="overflow-wrap: break-word;"><div class="gmail-m_-6200042019735139576WordSection1"><p class="MsoNormal"><span lang="EN-US">I am hoping this is an apt analogy, so please correct me if it is wrong…<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">Before Loom, concurrency was like going to a bank with a fixed number of tellers, where each teller had a line of customers.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><ol style="margin-top:0cm" start="1" type="1"><li class="gmail-m_-6200042019735139576MsoListParagraph" style="margin-left:0cm"><span lang="EN-US">In Java terms, a teller is like Platform Thread<u></u><u></u></span></li><li class="gmail-m_-6200042019735139576MsoListParagraph" style="margin-left:0cm"><span lang="EN-US">Generally, it would take time to process each customer, say an average of 5 minutes<u></u><u></u></span></li><li class="gmail-m_-6200042019735139576MsoListParagraph" style="margin-left:0cm"><span lang="EN-US">Sometimes, a customer would block the process, such as the teller needed to make a phone call to get some information<u></u><u></u></span></li><li class="gmail-m_-6200042019735139576MsoListParagraph" style="margin-left:0cm"><span lang="EN-US">No work is performed, while the teller is blocked waiting, and consequently the entire line is blocked<u></u><u></u></span></li></ol><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">After Loom, concurrency is like going to a bank with more modern policies and procedures<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><ol style="margin-top:0cm" start="1" type="1"><li class="gmail-m_-6200042019735139576MsoListParagraph" style="margin-left:0cm"><span lang="EN-US">In Java terms, a teller is still like a Platform Thread, but has the ability to park a customer<u></u><u></u></span></li><li class="gmail-m_-6200042019735139576MsoListParagraph" style="margin-left:0cm"><span lang="EN-US">Generally, it still takes time to process each customer, say an average of 5 minutes<u></u><u></u></span></li><li class="gmail-m_-6200042019735139576MsoListParagraph" style="margin-left:0cm"><span lang="EN-US">Sometimes, a customer would block the process, such as the teller needed some information before proceeding…<u></u><u></u></span></li><ol style="margin-top:0cm" start="1" type="a"><li class="gmail-m_-6200042019735139576MsoListParagraph" style="margin-left:0cm"><span lang="EN-US">The teller sends a text message or emails to get the necessary information<u></u><u></u></span></li><li class="gmail-m_-6200042019735139576MsoListParagraph" style="margin-left:0cm"><span lang="EN-US">The teller asks the customer to be seated, and as soon the information is available, they will be the next customer processed by the first available teller<u></u><u></u></span></li><li class="gmail-m_-6200042019735139576MsoListParagraph" style="margin-left:0cm"><span lang="EN-US">The teller starts processing the next customer in line<u></u><u></u></span></li><li class="gmail-m_-6200042019735139576MsoListParagraph" style="margin-left:0cm"><span lang="EN-US">This is analogous to a parked Virtual Thread, where the teller is like a Platform Thread, and the customer is like a Virtual Thread<u></u><u></u></span></li></ol><li class="gmail-m_-6200042019735139576MsoListParagraph" style="margin-left:0cm"><span lang="EN-US">Concurrency is increased, by better policies and procedures in dealing with blocking operations<u></u><u></u></span></li></ol><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">Yes, this is very simplistic, but intentionally so to try to expose what is so great about Virtual Threads.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">Cheers, Eric<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p></div></div></blockquote></div></div>