2010-12-05 17 views
6

¿Cuál es la diferencia entre NSThread y pthread? ¿NSThread usa pthread como su implementación interna y realmente necesitamos la sobrecarga adicional de NSThread cuando pthreads son suficientes especialmente en el iPhone?NSThread VS pthreads

Respuesta

9

No sé con certeza si NSThread usa pthreads library internamente. Probablemente sí, pero como no tenemos el código fuente NSThread, realmente no lo sabemos.

La diferencia es que pthread es una biblioteca C y NSThread es una biblioteca Objective-C. Pero ambos logran la misma funcionalidad.

La necesidad de una biblioteca deObjective-C es si hay que usarla en combinación con otras porciones de Objective-C API. I.E., no podrá tienda un pthread en un NSArray.

+0

NSThread utiliza pthreads internamente AFAIK. Sin embargo, Pthreads podría proporcionar mecanismos más flexibles y potentes para la gestión y sincronización de subprocesos, como esperar hasta que termine otro subproceso, etc. – Andy

+1

Estoy mirando algunas pilas de llamadas de un bloqueo y está lleno de pthreads. Eso no significaría NSThread utiliza pthread, pero esto está diciendo: ' Fundación \t __NSThread__start__ + 1024', ' 7 \t libsystem_pthread.dylib \t _pthread_body + 240', '8 \t libsystem_pthread.dylib \t _pthread_body + 282', '9 libsystem_pthread.dylib \t thread_start + 4' –

1

Hasta donde yo sé, NSThread no usa p-hilos, a menos que Apple haya cambiado radicalmente las cosas. Las raíces de OOPC eran demasiado tempranas para el estándar POSIX (pthreads surgieron en 1c, que fue 1995, creo). Esta es una de las muchas críticas formuladas en los tiempos de ejecución actuales de Objective-C. Consulte http://www.jot.fm/issues/issue_2009_01/article4.pdf Sin embargo, puede acceder a los subprocesos en Objective-C a través de las bibliotecas C estándar. En realidad, habíamos hecho esta suposición en un proyecto y habíamos tenido problemas al interactuar con una biblioteca que creamos usando pthreads (esto era alrededor de ejecutar bucles con NSNotificationQueue).

+1

no lo sé, pero es totalmente plausible que NSThread utilizado originalmente algo distinto de pthreads (e .gramo. uso directo de la API de hilo Mach). Pero creo que es probable que hoy en día utilice pthreads. Evidencia: /System/Library/Frameworks/Foundation.framework/Foundation contiene la cadena "NSThread * _NSThreadGet0 (pthread_t)". ¿Parece una API no documentada para convertir un pthread a un NSThread? lo que implica que NSThread probablemente sea solo un contenedor pthread (que a su vez es solo un contenedor para hilos de Mach) –

+0

Creo que usa pthread. Ver las pilas de llamadas que publiqué en la respuesta de @ Pablo. –