2010-12-05 6 views
6

Was ist der Unterschied zwischen NSThread und Pthread? Verwendet NSThread pthread als interne Implementierung und benötigen wir wirklich den zusätzlichen Overhead von NSThread, wenn Pthreads insbesondere auf dem iPhone ausreichen.NSThread VS Pthreads

Antwort

9

Ich weiß nicht sicher, ob NSThread intern pthreads Bibliothek verwenden. Wahrscheinlich, aber da wir keinen Quellcode für NSThread haben, wissen wir es wirklich nicht.

Der Unterschied besteht darin, dass pthread ist eine C-Bibliothek und NSThread ist eine Objective-C-Bibliothek. Aber beide erreichen die gleiche Funktionalität.

Die Notwendigkeit einer Objective-C Bibliothek ist, wenn Sie es in Kombination mit anderen Teilen von Objective-C API verwenden müssen. I.E., können Sie nicht speichern ein Pthread in einem NSArray.

+0

NSThread verwendet intern Pthreads AFAIK. Pthreads könnten jedoch flexiblere und leistungsfähigere Mechanismen für das Thread-Management und die Synchronisation bieten, wie zum Beispiel warten, bis ein anderer Thread fertig ist, usw. – Andy

+1

Ich sehe mir einige Callstacks von einem Absturz an und es ist voller Pthreads. Das würde bedeuten, nicht NSThread verwendet Pthread, aber das sagt: '6 \t Stiftung \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

Soweit ich weiß, verwendet NSThread keine P-Threads, außer Apple hat die Dinge radikal geändert. Die Wurzeln von OOPC waren zu früh für den POSIX-Standard (Pthreads entstanden in 1c, was 1995 war, glaube ich). Dies ist eine von vielen Kritikpunkten, die bei den aktuellen Objective-C-Laufzeiten geäußert wurden. Siehe http://www.jot.fm/issues/issue_2009_01/article4.pdf Sie können jedoch in Objective-C über die Standard-C-Bibliotheken auf Pthreads zugreifen. Wir haben diese Annahme tatsächlich in einem Projekt gemacht und sind auf Probleme gestoßen, als wir mit einer Bibliothek wechselten, die wir mit Pthreads erstellten (das war um run loops mit NSNotificationQueue).

+1

ich weiß nicht, aber es ist durchaus plausibel, dass NSThread ursprünglich etwas anderes als pthreads verwendet (e .G. direkte Verwendung der Mach-Thread-API). Aber ich denke, dass es wahrscheinlich heute PThreads verwendet. Der Hinweis: /System/Library/Frameworks/Foundation.framework/Foundation enthält die Zeichenfolge "NSThread * _NSThreadGet0 (pthread_t)". Sieht wie eine undokumentierte API aus, um einen Pthread in einen NSThread umzuwandeln? was impliziert, dass NSThread wahrscheinlich nur ein pthread-Wrapper ist (der wiederum nur ein Wrapper für Mach-Threads ist) –

+0

Ich denke, dass es pthread verwendet. Sehen Sie sich die Anruflisten an, die ich bei @ Pablos Antwort veröffentlicht habe. –