Publishing Engine Programmer's Guide > The Arbortext Publishing Engine Sub-Process > Implementing Arbortext PE Applications > Concurrency
  
Concurrency
An Arbortext PE Application does not need to be thread-safe. An Arbortext PE sub-process only handles one request at a time; therefore, it can only run one Arbortext PE Application at a time. However, an Arbortext PE Application does need to be safe for multi-processing, because the Arbortext PE Request Manager could ask two or more Arbortext PE sub-processes to run the same Arbortext PE Application at the same time.
For example, if an Arbortext PE Application attempts to write temporary data using an absolute path and file name (e:\tempdata\tempdatafile.txt), two instances of the Arbortext PE Application might run at the same time and overwrite each other’s file. If an Arbortext PE Application stores data to the Windows clipboard, two instances of the operation might run simultaneously and interfere with each other.
Every Arbortext PE Application needs to be serially reusable. An Arbortext PE Application should not attempt to maintain any state from one call to the next. The Arbortext PE Request Manager could ask a particular Arbortext PE sub-process to execute any Arbortext PE Application repeatedly, so the Arbortext PE Application must not assume any prior state each time it is invoked. If a particular client submits several Arbortext PE Application requests to an Arbortext PE server, the Arbortext PE Request Manager might allocate a different Arbortext PE sub-process to serve each request. If the second request expects to find information left behind by the first request (for example, a value stored in a global variable), the application would only work if the Arbortext PE Request Manager happened to allocate the same Arbortext PE sub-process to serve both requests.