All operations are internally serialized by both ExpressID AFIS and IDKit SDK. In other words, IDKit SDK is thread-safe and ExpressID AFIS is a multi-user system. For example the template extraction process in IDKit SDK can be executed concurrently to increase performance (and lot of another operations).   

Parallel identification requests do not improve performance, because ExpressID AFIS executes one query at a time anyway. Identification queries are automatically parallelized internally by making each node/core work on different part of the database.   

It is however not safe to use one database from multiple instances of ExpressID AFIS or IDKit PRO SDK. IDKit SDK instances that wish to share database must access the database through one ("shared") ExpressID AFIS server. Every ExpressID AFIS must have its own database.   

Manipulation of User object is a local in-memory operation. Database is queried/altered only through methods in IDKit class (Register, Update, Remove, Get). Every such access is atomic from application's point of view. When registration function returns, the data is persistent in database and it is available for identification. Database updates are serialized with identification requests. For this reason, it is better to postpone registrations during peak identification loads unless the cluster has extra capacity to handle the registrations even during peak load.