A virus scanner is provided in which a pool of pre-processor threads and a
queue are interposed between the event filter and the pool of scanner
threads. The pre-processor threads perform operations that can be
completed quickly to determine whether an object of a scan request needs
to be scanned. The pre-processor threads gather characteristics about the
scan requests and place them in the queue in a priority order based on
those characteristics. The scanner threads select a scan request from the
queue based on the priority order. Alternatively, the scan request is
selected based on the scan request's characteristics as compared to the
characteristics of the scan requests whose objects are currently being
scanned by other scanner threads in the pool.