2009-05-23 16 views
24

Al realizar muchas operaciones de disco, ¿ayuda multihilo, obstaculiza o no hace ninguna diferencia?¿Tiene sentido el subprocesamiento múltiple para operaciones vinculadas a IO?

Por ejemplo, al copiar muchos archivos de una carpeta a otra.

aclaración: entiendo que cuando se realizan otras operaciones, la simultaneidad obviamente marcará la diferencia. Si la tarea era abrir un archivo de imagen, convertir a otro formato y luego guardar, las operaciones del disco se pueden realizar al mismo tiempo que la manipulación de la imagen. Mi pregunta es cuando las únicas operaciones que se realizan son las operaciones de disco, ya sea que las colas concurrentes y la respuesta a las operaciones del disco sean mejores.

Respuesta

33

La mayoría de las respuestas hasta ahora han tenido que ver con el programador del sistema operativo. Sin embargo, hay un factor más importante que creo que llevaría a su respuesta. ¿Estás escribiendo en un único disco físico o en varios discos físicos?

Incluso si paraleliza con múltiples hilos ... IO a un solo disco físico es intrínsecamente una operación serializada.Cada hilo debería bloquearse, esperando su oportunidad de acceder al disco. En este caso, es probable que los hilos múltiples sean inútiles ... e incluso pueden generar problemas de contención.

Sin embargo, si está escribiendo varias secuencias en varios discos físicos, procesarlos al mismo tiempo debería aumentar su rendimiento. Esto es particularmente cierto con discos administrados, como matrices RAID, dispositivos SAN, etc.

No creo que el problema tenga mucho que ver con el programador del sistema operativo, ya que tiene más que ver con los aspectos físicos del disco (s) su escritura a.

0

No, no tiene sentido. En algún momento, las operaciones tienen que ser serializadas (por el sistema operativo). Por otro lado, dado que los SO modernos tienen que lidiar con múltiples procesos de todos modos, dudo que haya una sobrecarga adicional.

2

yo creo que depende de varios factores, como el tipo de aplicación que se está ejecutando, el número de usuarios simultáneos, etc.

Actualmente estoy trabajando en un proyecto que tiene un alto grado de lineales (lectura de archivos de principio a fin) operaciones. Usamos un NAS para el almacenamiento, y estábamos preocupados por lo que sucedería si ejecutaramos varios hilos. Nuestro pensamiento inicial fue que nos retrasaría porque aumentaría la búsqueda de la cabeza. Así que hicimos algunas pruebas y descubrimos que la cantidad ideal de subprocesos es la misma que la cantidad de núcleos en la computadora.

Pero su millaje puede variar.

2

Puede hacerlo, simplemente porque cada vez que hay más trabajo para un subproceso (identificando el siguiente archivo para copiar) el SO lo despierta, por lo que los subprocesos son una forma simple de engancharse al planificador del sistema operativo y aún así escribir codifique de forma secuencial tradicional, en lugar de tener que descomponerlo en una máquina de estado con devoluciones de llamada.

Esto es principalmente una ayuda con programación clara en lugar de rendimiento.

6

Eso depende de su definición de "E/S de la envolvente" multi-hilo, pero en general tiene dos efectos:

  • Use varias CPUs simultáneamente (lo cual no necesariamente ayuda si el cuello de botella es el disco en lugar de la CPU [s])

  • uso de una CPU (con un otro hilo) incluso cuando un hilo se bloquea (por ejemplo, esperar a la finalización de E/S)

no estoy seguro que la respuesta de Konrad siempre es correcta, sin embargo: como un contraejemplo, si "E/S encuadernado" solo significa "un hilo pasa la mayor parte del tiempo esperando la finalización de E/S en lugar de usar la CPU", pero no significa que "hemos alcanzado el límite de ancho de banda de E/S del sistema", y luego que IMO tenga varios subprocesos (o E/S asíncronas) podría mejorar el rendimiento (habilitando más de una operación de E/S simultánea).

0

Creo que dificultaría las operaciones ... Solo tiene un controlador y una unidad.

Puede usar un segundo hilo para hacer la operación y un hilo principal que muestra una interfaz de usuario actualizada.

0

Creo que podría empeorar el rendimiento, porque los hilos múltiples competirán por los mismos recursos.

Puede probar el impacto de realizar operaciones simultáneas de E/S en el mismo dispositivo copiando un conjunto de archivos de un lugar a otro y midiendo el tiempo, luego divida el conjunto en dos partes y haga las copias en paralelo ... la segunda opción será sensiblemente más lenta.

Cuestiones relacionadas