E/S asynchrones et RPC asynchrones

Les E/S asynchrones sont un moyen efficace pour un thread unique de gérer plusieurs demandes d’E/S simultanément. Le RPC asynchrone sur le serveur accomplit un objectif similaire pour les demandes RPC. Dans les versions de Windows antérieures à Windows Vista, la publication de demandes d’E/S asynchrones à partir de procédures serveur à l’aide du RPC asynchrone est déconseillée. Toutefois, dans Windows Vista et les versions ultérieures de Windows, les demandes d’E/S asynchrones associées à un port d’achèvement d’E/S sont prises en charge par RPC asynchrone.

Avant Windows Vista, un appel de procédure distante asynchrone peut se terminer avant la fin de la demande d’E/S asynchrone. Une fois l’appel asynchrone terminé, son thread peut se terminer si le runtime RPC décide qu’il dispose de suffisamment de threads pour traiter la charge de travail attendue. Le système lie toutes les demandes d’E/S au thread qui les lance. Si le thread s’arrête, toutes les demandes d’E/S en attente sur ce thread sont abandonnées. Les demandes d’E/S en attente ne peuvent pas être déplacées vers un autre thread.

Par conséquent, les concepteurs d’applications ciblant des versions de Windows antérieures à Windows Vista peuvent soit utiliser des E/S synchrones dans les procédures serveur, soit transférer toutes les demandes impliquant des E/S asynchrones aux procédures s’exécutant sur un pool de threads que l’application gère. L’API Windows fournit des fonctions pour la gestion du pool de threads. Consultez Fonctions de processus et de thread.