2010-08-03 8 views
6

A medida que mi aplicación madura, me encuentro encontrando más y más usos para hilos. Ahora debo tener unos 25 hilos, todos haciendo cosas importantes y trabajando juntos en sinfonía.¿Los subprocesos agregan muchos gastos indirectos a una aplicación?

Observo sin embargo que mi aplicación está asentada alrededor de 15.5MB residentes. Comparado con el navegador (+/- 35MB) me siento bastante seguro, pero noto que el tamaño residente de mi aplicación va en aumento.

La pregunta es, ¿cuánto sobrecarga implica el agregar un hilo?

También me pregunto si la palabra clave synchronized encuentra más y más latencia con cada nuevo hilo que está presente?

Gracias!

+2

25 hilos es una gran cantidad de hilos para una aplicación móvil. ¿Qué hace? –

+2

Si hace esta pregunta, es probable que sea hora de comenzar a repensar su arquitectura. –

+0

Cabe señalar que los hilos duermen durante el 99% de su vida y solo se despiertan para realizar el trabajo cuando sea necesario. @silico es una aplicación bluetooth que realiza comunicaciones avanzadas con las computadoras integradas de un vehículo. Múltiples conexiones de Bluetooth, visualización en pantalla, junto con tareas de fondo que tienen que suceder en un horario. –

Respuesta

2

Los hilos son muy útiles pero a la vez pueden ser una amenaza. Estoy trabajando en un proyecto para controlar las amenazas presentadas por una aplicación. Si ejecuta la parte superior mediante el shell adb, específicamente le indica cuántos subprocesos puede ejecutar una aplicación.

Verá que el uso del procesador es directamente proporcional al número de subprocesos. Eso significa que más la cantidad de subprocesos más alta es la sobrecarga. Aunque parecen evitar que tu actividad se atasque a tiempo, puede ser un verdadero dolor sincronizar sus acciones y entonces puedes tener un punto muerto, no muy bonito. Además, múltiples no hilos provocan sospechas sobre el comportamiento de una aplicación. Por lo tanto, deben ser utilizados en el espíritu que deben ser.

+0

Pensamiento interesante: "más hilos ~ = actividad sin escrúpulos" ... Todos mis hilos están en alza y hacia arriba, pero yo ' Lo tomaré en consideración :) ¡Gracias por el consejo de adb, no me di cuenta de que la utilidad superior mostraba hilos! –

+4

Er no hay nada sospechoso desde una perspectiva de seguridad sobre una aplicación que tiene muchos hilos. – hackbod

+0

@hackbod quizás tengas razón, pero he encontrado que los hilos son una molestia. Algunas aplicaciones cuyas actividades no me importan una vez que dejo de alguna manera mantienen el proceso vivo mediante el uso de subprocesos. Ahora que llamaría actividad sospechosa1 – Shouvik

0

El número incontrolable de subprocesos puede ser una carga para la aplicación. Su aplicación ya parece tener una mayor cantidad de subprocesos para aplicaciones móviles.

sincronizado implica el mantenimiento de bloqueos en los objetos.

Pagar si se puede usar ThreadPoolExecutor. Esto ayudará a limitar los hilos en el sistema, también reducirá la sobrecarga de crear y destruir hilos.

2

Si está creando y destruyendo hilos una y otra vez, entonces sí será agotador y causará gastos generales. Puede eliminar eso utilizando ThreadPool, que mantiene un caché de subprocesos disponibles para su ejecución. De lo contrario, los hilos son la forma de repasar los procesos.

Es posible que desee pensar en ajustes prácticos para la arquitectura. Por ejemplo, si mantiene múltiples hilos vivos para tener una IU receptiva (es decir, esperando la entrada) incluso si un hilo en particular solo se usaría después de cinco saltos de menú, entonces tal vez no sea necesario mantener los hilos vivos. el tiempo. Raramente utilicé 15 subprocesos distintos en una sola aplicación, incluso cuando esa aplicación ejecutaba una herramienta de máquina masiva .... (Sin embargo, repetí hilos de trabajo). No olvide que los hilos aún tienen que ser programados, así que no los guarde innecesariamente.

Por último, asegúrese de no tener los mismos viejos problemas con el programa paralelo; evitar interbloqueos, etc.

+0

Casi todos los hilos se crean solo una vez durante la vida de la aplicación. Gracias por la nota sobre la máquina herramienta, que ayuda a ponerlo en perspectiva. Sí, he usado tantos para mantener la aplicación muy receptiva para el usuario. También descubrí que las muchas capas de aplicaciones funcionan bien juntas en el entorno asíncrono de subprocesos múltiples. Me gusta la idea de threadPool, gracias. –

3

Para una cierta perspectiva aquí, una aplicación de navegador recién iniciada tiene aproximadamente 20 subprocesos en ejecución. Tener 25 hilos no es completamente irrazonable. Realmente depende de lo que estés haciendo con ellos.

app_1  17309 67 182452 27944 ffffffff 00000000 S com.android.browser 
app_1  17310 17309 182452 27944 ffffffff 00000000 S HeapWorker 
app_1  17311 17309 182452 27944 ffffffff 00000000 S Signal Catcher 
app_1  17312 17309 182452 27944 ffffffff 00000000 S JDWP 
app_1  17313 17309 182452 27944 ffffffff 00000000 S Compiler 
app_1  17314 17309 182452 27944 ffffffff 00000000 S Binder Thread # 
app_1  17315 17309 182452 27944 ffffffff 00000000 S Binder Thread # 
app_1  17317 17309 182452 27944 ffffffff 00000000 S CookieSyncManag 
app_1  17319 17309 182452 27944 ffffffff 00000000 S WebViewCoreThre 
app_1  17321 17309 182452 27944 ffffffff 00000000 S AsyncTask #1 
app_1  17322 17309 182452 27944 ffffffff 00000000 S AsyncTask #2 
app_1  17323 17309 182452 27944 ffffffff 00000000 S WebViewCoreThre 
app_1  17324 17309 182452 27944 ffffffff 00000000 S http0 
app_1  17325 17309 182452 27944 ffffffff 00000000 S http1 
app_1  17326 17309 182452 27944 ffffffff 00000000 S http2 
app_1  17327 17309 182452 27944 ffffffff 00000000 S http3 
app_1  17328 17309 182452 27944 ffffffff 00000000 S WebViewWorkerTh 
app_1  17329 17309 182452 27944 ffffffff 00000000 S AsyncTask #3 
app_1  17330 17309 182452 27944 ffffffff 00000000 S AsyncTask #4 
app_1  17332 17309 182452 27944 ffffffff 00000000 S AsyncTask #5 
Cuestiones relacionadas