On Mon, Oct 21, 2024 at 5:43 PM Mark Thomas <ma...@apache.org> wrote:
>
> Spinning off this specific topic.
>
> On 08/10/2024 13:25, Rémy Maucherat wrote:
> > On Tue, Oct 8, 2024 at 7:51 AM Christopher Schultz
> > <ch...@christopherschultz.net> wrote:
>
> >> In the pub track at the end of the day, I proposed bringing back the BIO
> >> connector with Virtual Threads as the magic which makes everything work.
> >> markt is convinced the idea has merit and on initial hand-waving
> >> conversation, he thinks that maybe just maybe Tomcat 12 could dump both
> >> NIO and NIO2 connectors, the Poller and other complexities. Servlet
> >> async and Websocket both seem to have solutions based upon BIO and VT.
> >> The question is whether or not VT will reach the level of maturity
> >> required for Tomcat and downstream users to rely on it for production
> >> workloads. Our initial sense is that yes, the promises of VT will be
> >> realized in the timeframe during which Tomcat 12 will become stable.
> >
> > This still looks difficult to me, as native code support cannot be
> > fixed. Of course polling is complex but it works. I don't expect this
> > to change, so VT would remain a niche use. Is there anything new that
> > changes this ?
>
> The only thing that has changed is more thinking.
>
> Back when I was trying to implement WebSocket on top of the Servlet API,
> the reason I kept hitting deadlocks was that I was only using container
> threads allocated in response to poller events. Even when we relaxed the
> rule to one thread per request/response to one read thread and one write
> thread per request/response deadlocks were still possible.
>
> I haven't fully thought this through but I got as far as thinking it
> could be worth experimenting with was something along the following lines:
>
> - for blocking IO use virtual threads the same way we currently use
>    platform threads
>
> - for a non-blocking read/write start a virtual thread to do the
>    read/write that executes the completion handler (or Future) code when
>    the read/write completes or fails
>
> - we'd need a simple state machine for Servlet non-blocking IO to ensure
>    isReady() returned the correct value and that there were no more than
>    one non-blocking read and one non-blocking write in progress at the
>    same time
>
> I haven't thought very much about WebSocket or h2 but I think there is
> the potential to make both of the simpler to implement.
>
> The plan didn't get much further than start a branch for the
> refactoring, see how it goes and if it looks like it might work as for
> more feedback at that point.
>
> What was the concern around native code? That it pins the platform
> thread? That should be OK if we are only using OpenSSL for operations we
> don't expect to block like encryption.

Yes, native code needs a native thread to be run. Although it does not
block, I would expect the sheer amount of calls to have an impact.

Rémy

> Mark
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: dev-h...@tomcat.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to