<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
Hi.
<div class=""><br class="">
</div>
<div class="">1. Virtual threads should *never* be pooled. There can be no benefit to replacing a platform thread with a virtual thread in a pool, because the difference between virtual threads and platform threads is that you can have lots and lots of virtual
threads. </div>
<div class=""><br class="">
</div>
<div class="">The benefit from virtual threads comes when abandoning thread pools altogether and spawning a new thread for each request in your system. I.e. you do not replace platform threads with virtual threads; you replace requests with virtual threads.
If you find yourself pooling virtual threads, you’ve made a wrong turn somewhere.</div>
<div class=""><br class="">
</div>
<div class="">2. I’m not 100% sure what the test does, but the name “YieldingWaitStrategy” hints that your threads don't block. Virtual threads exist to make blocking cheap. If they don’t block, then their scheduler — which is designed with blocking work in
mind — might exhaust all of its resources and not be get around to running that last thread you create.</div>
<div class=""><br class="">
</div>
<div class="">— Ron<br class="">
<div><br class="">
<blockquote type="cite" class="">
<div class="">On 4 Aug 2022, at 08:58, 地上的月影 <<a href="mailto:404450559@qq.com" class="">404450559@qq.com</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div class="">Hi All</div>
<div class=""> I'm one of openjdk user and these days I tried to use the preview feature Virtual Thread with Disruptor. when use ThreadFactory in Disruptor workerPool, somingthing seems wrong that when I used Thread.ofVirtual().start. the new created virtualThread
seems don't start? it don't print hello world, I'm not sure whether it's a bug or I use it wrong, here are my core test code</div>
<div class=""><br class="">
</div>
<div class="">
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""><span class="s1" style="font-variant-ligatures: no-common-ligatures;"> </span><span class="s2" style="font-variant-ligatures: no-common-ligatures;">public</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;">
</span><span class="s2" style="font-variant-ligatures: no-common-ligatures;">void</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;"> test2()
</span><span class="s2" style="font-variant-ligatures: no-common-ligatures;">throws</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;"> InterruptedException {</span></b></i></font></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space">
</span>System.out.println( </span><span class="s3" style="font-variant-ligatures: no-common-ligatures;">"Start Test!"</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;"> );</span></b></i></font></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space">
</span>RingBuffer<Order> ringBuffer = RingBuffer.create(ProducerType.MULTI, </span>
<span class="s4" style="font-variant-ligatures: no-common-ligatures;">new</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;"> EventFactory<Order>() {</span></b></i></font></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""><span class="s1" style="font-variant-ligatures: no-common-ligatures;">
</span><span class="s5" style="font-variant-ligatures: no-common-ligatures;">@Override</span></b></i></font></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""><span class="s1" style="font-variant-ligatures: no-common-ligatures;">
</span><span class="s2" style="font-variant-ligatures: no-common-ligatures;">public</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;"> Order newInstance() {</span></b></i></font></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""><span class="s1" style="font-variant-ligatures: no-common-ligatures;">
</span><span class="s4" style="font-variant-ligatures: no-common-ligatures;">return</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;">
</span><span class="s4" style="font-variant-ligatures: no-common-ligatures;">new</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;"> Order();</span></b></i></font></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<span class="s1" style="font-variant-ligatures: no-common-ligatures; background-color: rgb(255, 255, 255);"><font size="1" class=""><i class=""><b class=""><span class="Apple-converted-space">
</span>}<span class="Apple-converted-space"> </span></b></i></font></span></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space">
</span>}, </span><span class="s3" style="font-variant-ligatures: no-common-ligatures;">1024</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;"> *
</span><span class="s3" style="font-variant-ligatures: no-common-ligatures;">1024</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;">,
</span><span class="s4" style="font-variant-ligatures: no-common-ligatures;">new</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;"> YieldingWaitStrategy());</span></b></i></font></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<span class="s1" style="font-variant-ligatures: no-common-ligatures; background-color: rgb(255, 255, 255);"><font size="1" class=""><i class=""><b class=""><span class="Apple-converted-space">
</span>SequenceBarrier barrier = ringBuffer.newBarrier();</b></i></font></span></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space">
</span>Consumer[] consumers=<span class="Apple-converted-space"> </span></span><span class="s4" style="font-variant-ligatures: no-common-ligatures;">new</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;"> Consumer[</span><span class="s3" style="font-variant-ligatures: no-common-ligatures;">10</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;">];</span></b></i></font></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""><span class="s1" style="font-variant-ligatures: no-common-ligatures;">
</span><span class="s4" style="font-variant-ligatures: no-common-ligatures;">for</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;"> (</span><span class="s2" style="font-variant-ligatures: no-common-ligatures;">int</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;">
i = </span><span class="s3" style="font-variant-ligatures: no-common-ligatures;">0</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;">; i < consumers.length; i++) {</span></b></i></font></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space">
</span>consumers[i] = </span><span class="s4" style="font-variant-ligatures: no-common-ligatures;">new</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;"> Consumer(</span><span class="s3" style="font-variant-ligatures: no-common-ligatures;">"C"</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;">+i);</span></b></i></font></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<span class="s1" style="font-variant-ligatures: no-common-ligatures; background-color: rgb(255, 255, 255);"><font size="1" class=""><i class=""><b class=""><span class="Apple-converted-space">
</span>}<span class="Apple-converted-space"> </span></b></i></font></span></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco; min-height: 22px;" class="">
<font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""><span class="s1" style="font-variant-ligatures: no-common-ligatures;"></span><br class="">
</b></i></font></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space">
</span>WorkerPool<Order> workerPool = </span><span class="s4" style="font-variant-ligatures: no-common-ligatures;">new</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;"> WorkerPool<>(ringBuffer, barrier,
</span><span class="s4" style="font-variant-ligatures: no-common-ligatures;">new</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;"> EventExceptionHandle(), consumers);</span></b></i></font></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<span class="s1" style="font-variant-ligatures: no-common-ligatures; background-color: rgb(255, 255, 255);"><font size="1" class=""><i class=""><b class=""><span class="Apple-converted-space">
</span>ringBuffer.addGatingSequences(workerPool.getWorkerSequences());</b></i></font></span></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<span class="s1" style="font-variant-ligatures: no-common-ligatures; background-color: rgb(255, 255, 255);"><font size="1" class=""><i class=""><b class=""><span class="Apple-converted-space">
</span>ThreadFactory factory_v = Thread.ofVirtual().factory();</b></i></font></span></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space">
</span>ExecutorService pool = Executors.newFixedThreadPool(</span><span class="s3" style="font-variant-ligatures: no-common-ligatures;">10</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;">, factory_v);</span></b></i></font></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<span class="s1" style="font-variant-ligatures: no-common-ligatures; background-color: rgb(255, 255, 255);"><font size="1" class=""><i class=""><b class=""><span class="Apple-converted-space">
</span>workerPool.start(pool);</b></i></font></span></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco; min-height: 22px;" class="">
<font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""><span class="s1" style="font-variant-ligatures: no-common-ligatures;"></span><br class="">
</b></i></font></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<font size="1" style="" class=""><i style="" class=""><b style="" class=""><span class="s6" style="background-color: rgb(255, 255, 255); font-variant-ligatures: no-common-ligatures;">
</span><span class="s1" style="font-variant-ligatures: no-common-ligatures; background-color: rgb(255, 255, 0);">// don't print hello world?</span></b></i></font></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space">
</span>Thread thd = Thread.ofVirtual().start(() -> System.out.println(</span><span class="s3" style="font-variant-ligatures: no-common-ligatures;">"Hello world!"</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;">));</span></b></i></font></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space">
</span>Thread.sleep(</span><span class="s3" style="font-variant-ligatures: no-common-ligatures;">5000</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;">);</span></b></i></font></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""><span class="s1" style="font-variant-ligatures: no-common-ligatures;"><span class="Apple-converted-space">
</span>System.out.println(</span><span class="s3" style="font-variant-ligatures: no-common-ligatures;">"End Test!"</span><span class="s1" style="font-variant-ligatures: no-common-ligatures;"> );</span></b></i></font></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<span class="s1" style="font-variant-ligatures: no-common-ligatures;"><font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""><span class="Apple-converted-space" style="">
</span>}</b></i></font><span class="Apple-converted-space" style=""><font size="1" style="background-color: rgb(255, 255, 255);" class=""><i class=""><b class=""> </b></i></font></span></span></div>
<div style="margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; line-height: normal; font-family: Monaco;" class="">
<br class="">
</div>
</div>
<div class="">looking forward to your answers.</div>
<div class="">best wishes!</div>
<div class=""><i class="">-Anjian Wen</i></div>
<div class=""><br class="">
</div>
<div class=""></div>
</div>
</blockquote>
</div>
<br class="">
<div class=""><br class="">
</div>
</div>
</body>
</html>