2011-09-19 8 views
15

¿Cuál es la ventaja de usar Binder para IPC más (Semaphores, Message Queue, PIPES) en la pila de Android?Ventajas del uso de Binder para IPC en Android

+1

Ayudaría si elige una respuesta correcta. – JohnnyLambada

+0

Los desarrolladores de Android y los desarrolladores de Kernel tuvieron una discusión sobre el enlace versus alternativas en el LKML en junio de 2009 (y también en otros puntos) que hace una lectura informativa en ambas perspectivas y abordaron los detalles con una precisión más específica que lo que ha sido publicado aquí hasta ahora. –

Respuesta

0

Las carpetas se utilizan para permitir llamadas a procedimientos remotos. Podrías implementar RPC usando las herramientas de sincronización que mencionas, pero también necesitarías escribir una gran cantidad de código para hacerlo coincidir ... con un Binder (normalmente solo se usa dentro de un Servicio de Android) tienes mucho menos código para escribir; apenas más que tus funciones remotas reales.

+3

¿Sería apropiado Binder para transmitir alto ancho de banda, datos de baja latencia entre procesos (como audio o transmisiones de video?) – user48956

1

Las carpetas se utilizan para comunicarse a través de los límites del proceso, ya que los diferentes procesos no comparten un contexto VM común>> no hay más acceso directo a los demás Objetos (memoria). Ambas partes dentro del mismo proceso (por lo general, cosas que están dentro de la misma aplicación) significa (imho) que no debe usar carpetas ya que ralentizan/complejizan cosas innecesarias.

Las carpetas generalmente no se usan directamente sino a través de las clases "Servicio" o "Mensajero". Mientras que la comunicación con un Servicio se realiza a través de una API completa de funciones, la comunicación con un Messenger tiene que usar "Mensaje" s. Los mensajeros son mucho más simples de implementar.

Aparte de usar aglutinantes se puede usar cualquier cosa que esté disponible desde cualquier instancia de VM como "s" LocalSocket, archivos, ContentProviders, Propósitos, ...

aglutinantes no son ideales para la transferencia de grandes flujos de datos (como el audio/video) ya que cada objeto tiene que convertirse a (y volver) de un paquete. Toda la conversión lleva tiempo. Mucho mejor en ese caso sería un LocalSocket por ejemplo.

+0

"Ambas partes dentro del mismo proceso (generalmente cosas que están dentro de la misma aplicación) significa (imho) que debería no use carpetas ya que ralentizan/complejizan cosas innecesarias ". Los intentos son en realidad una abstracción Binder, por lo que es poco probable que sean más rápidos. –

+0

@littleScala Tienes razón. Además 'ContentProvider' cuando se usa a través de los límites del proceso también usa' Binder'. Mi respuesta es algo mala :) – zapl

+0

Tenga en cuenta que android.os.Binder el * objeto * es una cosa distinta del Binder el * mecanismo IPC * (es decir,/dev/Binder y sus envolturas del modo de usuario, etc.) –

6

De docs/system/libc/SYSV-IPC.html archivo del NDK:

Android no soporta System V IPC, es decir, las facilidades proporcionadas por los siguientes encabezados estándar POSIX:

<sys/sem.h> /* SysV semaphores */ 
<sys/shm.h> /* SysV shared memory segments */ 
<sys/msg.h> /* SysV message queues */ 
<sys/ipc.h> /* General IPC definitions */ 

La razón de esto es debido al hecho de que , por diseño, conducen a la fuga de recursos de kernel global.

Por ejemplo, no hay manera de liberar automáticamente un semáforo SysV asignado en el núcleo cuando:

  • un buggy o proceso malicioso salidas
  • un no-buggy y no malintencionados proceso falla o es explícitamente asesinado.

La eliminación automática de los procesos para hacer espacio para los nuevos es una parte importante de la implementación del ciclo de vida de las aplicaciones de Android. Esto significa que, incluso asumiendo solo código no malicioso y no malicioso, es muy probable que con el tiempo, las tablas globales del kernel utilizadas para implementar SysV IPCs llenen .

En ese momento, es probable que se produzcan extraños errores e impidan que los programas que los utilizan se ejecuten correctamente hasta el próximo reinicio del sistema.

20

pregunta antiguo (y probablemente no controlado por el cartel), pero vale la pena contestar:

A) Todos los mecanismos de CIP basadas en sistemas de ficheros y archivos de sistema-representable (en particular tuberías), no se pueden utilizar debido a la falta de un directorio de escritura mundial, donde todos los procesos pueden mkfifo/crear el sistema de archivos/representación de socket de su puerto IPC (a pesar de que se utiliza/dev/socket, que se usa para procesos del sistema, por ejemplo, rile, zygote y su tipo).

B) Ninguno de los mecanismos sugeridos tiene la capacidad de "ubicación del servicio" que se requiere para Android. En UNIX, hay un mapeador de puertos RPC, y Android necesita una funcionalidad similar. Ingrese: El ServiceManager, que puede usar el archivador para registrarse como administrador de contexto, para registrar/buscar los identificadores de servicio sobre la marcha

C) Existe una gran necesidad de serialización, ya sean intenciones u otros mensajes. Binder proporciona la abstracción de paquetes, que se puede utilizar para la recopilación de datos por parte de Parcel.java.

D) SysV tiene otros problemas que la respuesta del Sr. Lambada que son más importantes, en particular las condiciones de carrera y la falta de autorización.

E) Las colas de mensajes y las tuberías no pueden pasar los descriptores. Los sockets de dominio UNIX pueden, pero no se pueden usar debido a (A) (nuevamente, a menos que sea root/system, como zygote, rild, installd ...)

F) Binder es realmente liviano y ha construido -en mecanismos de autorización. También tiene características ingeniosas como activar el proceso del destinatario, así como compartir la memoria, que los otros mecanismos simplemente no tienen. (y recuerde, no mmap (2), debido al problema del archivo en (A) para mapeos con nombre).

y - no olvidemos

G) Carpeta se inició en el Palm (ah, la nostalgia) (OpenBinder c.s.). Los ex-palmers llegaron a Android y trajeron su código con ellos.

Cuestiones relacionadas