<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=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@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-ligatures:standardcontextual;
        mso-fareast-language:EN-US;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-ligatures:standardcontextual;
        mso-fareast-language:EN-US;}
span.EmailStyle22
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        mso-ligatures:none;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1959026358;
        mso-list-type:hybrid;
        mso-list-template-ids:194828710 829180674 536870915 536870917 536870913 536870915 536870917 536870913 536870915 536870917;}
@list l0:level1
        {mso-level-start-at:15;
        mso-level-number-format:bullet;
        mso-level-text:-;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-font-family:Calibri;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></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-NL" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span lang="en-NL">Hi Alan,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-NL"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="en-NL">Thanks for taking the time to help us with this issue.
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-NL"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="en-NL">We see three problems with using the default scheduler with maxPoolSize:<o:p></o:p></span></p>
<ul style="margin-top:0cm" type="disc">
<li class="MsoListParagraph" style="margin-left:0cm;mso-list:l0 level1 lfo1"><span lang="en-NL">Other virtual threads which are not directly related to the simulation would slow down the simulation<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-left:0cm;mso-list:l0 level1 lfo1"><span lang="en-NL">Running multiple simulations in parallel would not be possible<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-left:0cm;mso-list:l0 level1 lfo1"><span lang="en-NL">We need full control over which thread runs, and how to treat yield. If the thread is yielding because of a simulation-related blocking operation, we want to run
 the next thread. If it’s yielding due to IO, we don’t want to switch to another thread. If IO wait would result in a yield, that would be unpredictable, and would affect the result of our simulation.<o:p></o:p></span></li></ul>
<p class="MsoNormal"><span lang="en-NL"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="en-NL">It would be very helpful for us if custom schedulers would be exposed. Could you tell us more about the explorations you mentioned? And is it an option to take our use case into account there?<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-NL"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:#2000"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="NL" style="mso-fareast-language:#2000">Best regards,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="NL" style="mso-fareast-language:#2000"> <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:#2000">Rick Hendricksen<o:p></o:p></span></p>
</div>
<p class="MsoNormal"><span lang="en-NL"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="mso-ligatures:none;mso-fareast-language:#2000">From:</span></b><span lang="EN-US" style="mso-ligatures:none;mso-fareast-language:#2000"> Alan Bateman <alan.bateman@oracle.com>
<br>
<b>Sent:</b> Tuesday, 20 August 2024 17:45<br>
<b>To:</b> Rick Hendricksen <Rick.Hendricksen@vanderlande.com>; loom-dev@openjdk.org<br>
<b>Cc:</b> Dennis van den Berg <Dennis.van.den.Berg@vanderlande.com><br>
<b>Subject:</b> Re: java.lang.ThreadBuilders and java.lang.ThreadBuilders.newVirtualThread() are not public<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><span lang="en-NL"><o:p> </o:p></span></p>
<table class="MsoNormalTable" border="0" cellpadding="0" width="100%" style="width:100.0%;background:white">
<tbody>
<tr>
<td style="border:solid #EF7B10 1.0pt;padding:2.25pt 2.25pt 2.25pt 2.25pt">
<p class="MsoNormal" align="center" style="text-align:center"><strong><span style="font-family:"Calibri",sans-serif;color:#EF7B10">Be aware</span></strong><span style="color:#EF7B10">: This email was created outside of Vanderlande. Be cautious of its contents
 and <strong><span style="font-family:"Calibri",sans-serif">do not click</span></strong> any links or attachments unless you recognise the sender and know the content is safe.</span><span style="color:#EF7B10;mso-ligatures:none;mso-fareast-language:#2000"><o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><span lang="en-NL"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span lang="en-NL">On 20/08/2024 16:32, Rick Hendricksen wrote:<br>
<br>
<o:p></o:p></span></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p><span lang="en-NL">Hi,<o:p></o:p></span></p>
<p><span lang="en-NL">We have implemented a Discrete Event Simulator, and we want to use virtual threads to write our business logic (that uses the DES) in a more readable way. This business logic has a lot of blocking operations, so it seems to be a good fit
 for virtual threads. However, we must ensure that all those virtual threads run on the same carrier thread, because the simulation has to be deterministic. We also often run multiple separate simulations in parallel, so it’s important that virtual threads
 end up on the right scheduler. This means we need to use our own scheduler.<o:p></o:p></span></p>
</blockquote>
<p class="MsoNormal"><span lang="en-NL" style="mso-ligatures:none;mso-fareast-language:#2000">Can the simulation be run with a single carrier thread (-Djdk.virtualThreadScheduler.maxPoolSize=1) ?<br>
<br>
There are a number of explorations into using custom schedulers but impossible to say at this point if anything will be exposed.<br>
<br>
-Alan<o:p></o:p></span></p>
</div>
</div>
<hr color="EF7B10" size="3">
<p style="font-size: 9.0pt; font-family: 'Calibri';">** Disclaimer **</p>
<p style="font-size: 9.0pt; font-family: 'Calibri';">This e-mail, including any attachments, may include proprietary and confidential information of Vanderlande and may only be read by the person or those persons to whom it is addressed.
<br>
This document is forwarded to you in such a form (e-mail) that Vanderlande cannot guarantee the completeness and/or correctness of its contents and information.
<br>
If you have received this e-mail message in error, please notify us immediately. <br>
Please also delete this document from your computer. <br>
This document may not be reproduced, copied, distributed, published, modified, or furnished to third parties, without the prior written consent of Vanderlande.</p>
</body>
</html>