If I understand correctly from this statements combined with open poster question about using thread pool, it implies that using thread pool does not mean Reactive pattern. So if we use explicit thread pool, we are not leveraging OS/kernel level threads, right? Or should I look at this Reactor foundational framework as a layer between JVM and my application logic, which would mean that we actually are not using explicit thread control in our application logic? But does that mean that using thread pool in Reactor framework, we are actually doing asynchronous calls to OS supported threads? I don't know a lot about JVM threads, but how is this even supported on JVM? As you can see I am quite confused now after reading all this sources.
Also in the paper for the Proactor pattern, when evaluating Reactor pattern, the following disadvantage is specified:
Lack of OS support for multithreading: Most operating systems implement the reactive dispatching model through the select system call [7]. However, select does not allow more than one thread to wait in the event loop on the same descriptor set. This makes the reactive model unsuitable for high-performance applications since it does not utilize hardware parallelism effectively.
Given the age of the paper is this statement still relevant. However if I look at for example node.js, it also uses only single thread for event loop. Why would that be inefficient, if we can then utilize threads in event handlers?