¿Cuántos hilos deberían acceder al sistema de archivos al mismo tiempo?

7

Tenemos un módulo en una aplicación que almacena datos en múltiples archivos y directorios multinivel y accedemos a ellos desde múltiples subprocesos (tanto de lectura como de escritura). La estructura del directorio se basa en un valor hash dividido, como:

b1/94/6a/92/a.txt
b1/94/6a/ee/a.txt
a1/0e/db/bb/b.txt
...

Si una persona que llama elimina un archivo, el módulo elimina los directorios vacíos inmediatamente.

¿Cuánto debería ser el nivel de concurrencia del módulo? ¿Vale la pena crear y eliminar carpetas de varios subprocesos al mismo tiempo? ¿Pueden los sistemas de archivos manejar estos de manera efectiva?

¿Vale la pena usar un módulo de subprocesos múltiples? (Sería mucho más fácil escribir uno de un solo hilo).

(La aplicación está escrita en Java y se ejecuta principalmente en Windows, NTFS, no SSD, pero también me interesan otros sistemas operativos y de archivos si existen diferencias).

    
pregunta usr95 03.07.2013 - 22:54

3 respuestas

2

Por supuesto, cualquier sistema operativo manejará múltiples solicitudes, pero aun así, cuando solicita un sistema de archivos basado en medios físicos con tiempos de búsqueda para hacer más de una cosa, su rendimiento empeorará progresivamente. En mi experiencia, es mejor en cuanto a rendimiento tener un solo hilo que ponga en cola sus solicitudes y luego las entregue al sistema operativo de forma secuencial.

Una opción sería que este hilo separe las operaciones de desvinculación y las retenga hasta que detecte un tiempo de inactividad cuando se realicen pocas operaciones de datos, luego elimine esos directorios para mantener sus solicitudes de datos lo más rápido posible y su mantenimiento fuera de la red. manera.

Obviamente es una solución simple, pero creo que simple es bueno hasta que algún otro requisito obligue a una optimización o reorganización.

    
respondido por el Patrick Hughes 03.07.2013 - 23:40
1

Debes perfilar tu aplicación para estar seguro. Depende de cómo uses tus archivos, puede ser malo o muy bueno. Si solo lees & escriba a un puñado de archivos, esos archivos se almacenarán en caché y sus bloques se almacenarán en búfer. Puede que no toque el disco durante algún tiempo.

Si creas muchos archivos & directorios y eliminarlos tan rápido como los creas, entonces seguramente destruirás el caché y los buffers. No importa cuántos subprocesos lo estén haciendo.

Si tiene más procesos (no subprocesos), obtendrá una mayor parte del tiempo del sistema de archivos.

Tener un subproceso para recopilar solicitudes de lectura / escritura de archivos de otros subprocesos solo duplica el trabajo del sistema operativo y, por lo general, el sistema operativo puede programar y reordenar esas solicitudes mejor que con lo que quiere invertir tiempo.

    
respondido por el imel96 04.07.2013 - 00:53
0

Umm, no estoy seguro de lo que está intentando hacer aquí, pero está seguro de que no se atendería mejor a sus necesidades utilizando una base de datos en lugar de acceder directamente al sistema de archivos. Una base de datos manejaría múltiples solicitudes simultáneas para usted y ayudaría a protegerse contra las condiciones de la carrera.

    
respondido por el Zhehao Mao 04.07.2013 - 00:57

Lea otras preguntas en las etiquetas