-
Notifications
You must be signed in to change notification settings - Fork 656
Description
Hello QuickFIX/J maintainers,
I would like to propose a feature request to enhance QuickFIX/J support for JDK 21 and the use of virtual threads for high-concurrency scenarios.
Currently, QuickFIX/J primarily uses blocking IO (BIO) with a traditional thread-per-session model:
Acceptor / Initiator IO layer: Uses blocking sockets (ServerSocket / Socket) and creates one OS thread per session for reading/writing.
Business logic layer: Runs in the same thread or a delegated thread pool, typically synchronous.
This model works well for small to medium numbers of sessions but can face challenges when handling tens of thousands of B2B connections, due to the overhead of OS threads and context switching.
With JDK 21 virtual threads, it would be possible to:
Keep the IO layer blocking (BIO), but assign virtual threads per session instead of OS threads.
Maintain the synchronous, blocking-style business logic code without forcing users to adopt complex asynchronous programming.
Dramatically reduce memory and context-switching overhead, enabling high-concurrency B2B deployments.
Feature request summary:
Ensure QuickFIX/J is fully compatible with JDK 21.
Provide an option to use virtual threads for session-level read/write threads while keeping the underlying IO model blocking.
Maintain backward compatibility with the current thread-per-session model.
This change would allow QuickFIX/J to scale to large numbers of sessions without requiring a full rewrite to asynchronous IO.
Thank you for considering this enhancement. I would be happy to help with testing or prototyping if needed.
Best regards,
leegoo