What triggers Fiber.unpark?

Chris Plummer chris.plummer at oracle.com
Thu Oct 17 20:10:35 UTC 2019


Hi Arek,

Look at the 7m mark of the video for an example of what happens when 
java.util.concurrent.locks.ReentrantLock.unlock() is called, triggering 
the unpark of a Fiber waiting on that lock. It's the holder of the lock 
that triggers the unpark (and this case it was another fiber holding the 
lock). So yes, totally different than how the I/O case is handled.

Chris

On 10/17/19 12:45 PM, Arkadiusz Gasiński wrote:
> Awesome, thanks!
>
> I think that this YT video link is enough of a record (no pun intended 
> on the records JEP ;))
>
> Also, I assume that this is only for I/O, right? If a Fiber is waiting 
> for a lock, it's a different entity that triggers unparking?
>
> Thanks,
> Arek
>
> On Thu, Oct 17, 2019, 21:33 Chris Plummer <chris.plummer at oracle.com 
> <mailto:chris.plummer at oracle.com>> wrote:
>
>     On 10/17/19 12:53 AM, Alan Bateman wrote:
>     > On 16/10/2019 21:58, Arkadiusz Gasiński wrote:
>     >> Just noticed that the previous question in the mailing list was
>     >> pretty much
>     >> the same (what a coincidence) and actually checked your talk
>     from JVMLS,
>     >> @Alan. I’m still wondering what’s calling this InnocuousThread
>     that
>     >> in turn
>     >> unpark Fiber? Also, is this thread used for all Fiber unparking or
>     >> only in
>     >> case of I/O?
>     >>
>     > sun.nio.ch.Poller is probably what you want. The `polled` method is
>     > invoked when a file descriptor is ready and it unparks the fiber
>     that
>     > is parked waiting on that file descriptor.
>     >
>     > -Alan
>     This part of the video shows the stack when the poll completes and
>     the
>     fiber is unparked:
>
>     https://youtu.be/NV46KFV1m-4?t=509
>
>     Maybe Alan can copy-n-paste the stack trace from the presentation
>     here
>     for the record.
>
>     Note this is on macos, which uses KQueuePoller. On linux is uses
>     EPollPoller. Poller.startPollerThread() is where the
>     InnocuousThread is
>     created:
>
>                  Thread t = JLA.executeOnCarrierThread(() ->
>                          InnocuousThread.newSystemThread(name, poller));
>
>     And the above code is triggered from the Poller static initializer.
>
>     Chris
>




More information about the loom-dev mailing list