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).
- ¿Cuál es la diferencia entre xyz.domain.com y domain.com/xyz?
- ¿Cómo mueve y levanta servidores y equipos de TI en un centro de datos? ¿Los levantas manualmente o usas un dispositivo?
- ¿En qué se diferencia una IP pública de una IP del sistema?
- ¿Cómo son las solicitudes de ping más rápidas que la velocidad de la luz?
- Cómo medir el ancho de banda máximo en una línea de 10 Gbps con iPerf3
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.