2012-05-06 14 views
7

En linux.¿Qué es mejor: seleccionar vs hilos?

Quiero construir un autoclicker que tendrá una función de habilitar/deshabilitar cuando se presiona una tecla. Obviamente debe haber 2 cosas ejecutándose en paralelo (el propio clicker y la función habilitar/deshabilitar)

¿Cuáles son los contras y pros de cada implementación: Usando un hilo que manejará la función de autoclicking y otro hilo principal (para habilitar/deshabilitar, etc. ...) ¿O usando la llamada syscall y espera la entrada/teclado?

+2

Usted _puede hacerlo de cualquier manera. ¿Qué medidas definen "mejor" aquí? –

+1

Solo quiero saber cuáles son las ventajas de cada opción – Jah

+1

@Jah: Entonces deberías haber preguntado eso, en lugar de preguntar cuál era "mejor". –

Respuesta

7

El uso de select es mejor para el rendimiento, especialmente cuando podría tener potencialmente cientos de operaciones simultáneas. Sin embargo, puede ser difícil escribir el código correctamente y el estilo de codificación es muy diferente de la programación tradicional de una sola hebra. Por ejemplo, debe evitar llamar a cualquier método de bloqueo ya que podría bloquear toda su aplicación.

La mayoría de las personas consideran que el uso de subprocesos es más simple porque la mayoría del código se asemeja al código ordinario de un solo subproceso. La única parte difícil es en los pocos lugares donde se necesita comunicación entre hilos, a través de mutex u otros mecanismos de sincronización.

En su caso específico, parece que solo necesitará una pequeña cantidad de subprocesos, así que iría por el modelo de programación más simple usando subprocesos.

+5

Cita necesaria para la primera oración. Sospecho que en los sistemas modernos es mucho más complicado que eso. Ciertamente con * muchos * descriptores de archivos en acción, los hilos permiten que el kernel simplemente despierte el hilo que está bloqueado en lugar de 'seleccionar' teniendo que escanear repetidamente' N' bits en un conjunto y agregarlo/eliminarse de una cola de espera para cada . Los hilos también parecen poder optimizar para la menor cantidad de transiciones de núcleo de usuario. Puede haber otras razones ortogonales hilos son más lentos, pero no creo que es un tema tan simple. –

1

Dada la cantidad de trabajo que está haciendo, probablemente no importe.

Para aplicaciones de alto rendimiento, existe una diferencia. En estos casos, debe manejar varios miles de conexiones simultáneamente; en tales casos, entrega nuevas conexiones a nuevos hilos.

La creación de varios miles de hilos es costosa, por lo que la selección se usa para mayor eficiencia. En realidad, se utilizan técnicas diferentes, como kqueue o epoll, para una conmutación óptima.

Digo que no importa, porque es probable que solo cree el hilo una vez y tenga exactamente dos hilos ejecutándose durante toda la vida de la aplicación.