CORBA 2.3.7 Programmer's Guide for Java

Note
On NonStop systems, threads are not run in separate processors. To take advantage of parallel
processing, use separate processes rather than threads.
Multithreading on NonStop systems is non-preemptive.
Multithreading in Client Applications
One typical use of multithreading in NonStop CORBA client programs is to issue concurrent requests to
one or more objects. When multithreading is not used, operations are synchronous. That is, when a client
performs an operation on an object, it must wait for the response to arrive before doing any further
processing. If a client application creates multiple threads, each thread can perform operations and thus
have concurrent outstanding requests.
The feed program that is part of the Bank sample application contains a multithreaded NonStop
CORBA client program.
Note
You can use the Dynamic Invocation Interface (DII) instead of multithreading to issue asynchronous
requests. In some situations, this may be a desirable alternative to multithreading. However, using the
dynamic invocation interface generally requires more programming effort than does explicit
multithreading.
Multithreading in Server Implementations
The behavior of the ORB with regard to multithreading depends on the setting of the threading policy in
the POA. If the threading policy is set to SINGLE_THREAD_MODEL, client requests are processed
sequentially. Although multiple ORB threads might still be used, only one thread is active on the POA at
any given time.
If you use the default POA threading policy (ORB_CTRL_MODEL), requests can be processed
concurrently, in multiple threads. The NonStop CORBA ORB implements ORB_CTRL_MODEL with
the thread-per-request model; that is, the POA will spawn additional threads as necessary to handle
additional requests, up to the maximum number of available servant threads.
The maximum number of servant threads available in a process defaults to 4097. This value can be
changed with the NSDOM_CFG_MAX_THREADS environment variable or the max_threads key in the
server's profile@ORB entity. (Any value set in the environment variable overrides the setting in
profile@ORB.) The effective maximum number of threads in a server depends also on the size of each
thread's stack (set by the stack_size key in profile@ORB) and the number of NonStop Kernel
threads available in a processor.
With ORB_CTRL_MODEL, the POA initially creates a single thread to handle requests for objects in a
server. When a new request arrives, the POA either reuses an existing thread from the thread pool or