C ++ (lenguaje de programación): estoy obteniendo latencia en términos de milisegundos incluso con el calentamiento de 1000 operaciones. ¿Cómo puedo optimizar: symlink () y: rename () llamadas al sistema en C ++ en la red de área de almacenamiento?

Este es un problema con su sistema de archivos y / o su sistema operativo / entorno y / o su hardware, no C ++ específicamente.

Si está manipulando un archivo o descriptor que se encuentra en un montaje de red, normalmente no puede esperar que se complete ninguna operación de bloqueo en menos de la latencia de red de ida y vuelta al servidor. Solo en raras ocasiones será menos de un milisegundo, incluso en una LAN.

Incluso si está trabajando completamente localmente en su máquina, si una llamada al sistema como symlink () o rename () en realidad vacía sus cambios en el disco, tomará una cantidad significativa de tiempo en ejecutarse. Incluso en un SSD, generalmente está buscando cientos de microsegundos para una escritura, si no un milisegundo o más. (Y suponiendo que nada más esté en cola en el controlador de disco).

Básicamente hay tres enfoques para lidiar con esto:

1) si es posible, evite realizar este tipo de operaciones.

2) si es compatible, haga llamadas asincrónicas (sin bloqueo) en su lugar.

3) realice las llamadas de bloqueo lento en los subprocesos, de modo que su programa pueda continuar haciendo un trabajo útil en otros subprocesos mientras los accesos al sistema de archivos continúan.