2010-12-05 17 views
6

NSThread ve pthread arasındaki fark nedir? NSThread, pthread'i kendi iç uygulaması olarak kullanıyor ve pthreads özellikle iPhone'da yeterli olduğunda NSThread'in ekstra yüküne gerçekten ihtiyacımız var mı?NSThread VS pthreads

cevap

9

NSThread içeriden pthreads kitaplığını kullanıp kullanmadığımı bilmiyorum. Muhtemelen yapar, ama biz NSThread için kaynak kodumuz olmadığı için gerçekten bilmiyoruz.

fark pthread bir Cı kütüphanesi ve NSThread bir amaç-C kütüphanesi olmasıdır. Ama ikisi de aynı işlevselliği sağlıyor. Eğer Amaç-C API diğer kısımları ile kombinasyon halinde kullanmak için gerekirse

bir amaç-Cı kütüphane için ihtiyaç vardır. I.E. NSArray ürününde mağazasını ürününe kaydedemezsiniz.

+0

NSThread, pthreads internal AFAIK kullanır. Pthreads, iplik idaresi ve senkronizasyon için daha esnek ve güçlü mekanizmalar sağlayabilir, örneğin başka bir iş parçacığı bitene kadar beklemek gibi. – Andy

+1

Bazı çağrı yığınlarını bir çarpışmadan arıyorum ve pthreads dolu. Yani NSThread pthread kullanır demek olmaz, ama bu anlatıyor: \t __NSThread__start__ + 1024', '7 \t libsystem_pthread.dylib \t _pthread_body + 240', ' 8 \t libsystem_pthread.dylib '6 \t Vakfı \t _pthread_body + 282', \t thread_start + 4 ' –

1

NSThread'in bildiği kadarıyla Apple bir şeyleri radikal olarak değiştirmediği sürece p-thread'leri kullanmıyor. OOPC'nin kökleri POSIX standardı için çok erken idi (pthreads 1c'de geldi, 1995). Bu, mevcut Hedef-C çalışma zamanlarında düzeltilen birçok eleştiriden biridir. Bkz. http://www.jot.fm/issues/issue_2009_01/article4.pdf Ancak, standart C kütüphaneleri aracılığıyla Objective-C'de pthreads'e erişebilirsiniz. Biz aslında bu varsayımı bir projede yapmıştık ve pthreads kullanarak oluşturduğumuz bir kütüphaneyle etkileşimde bulunduğumuzda (bu, NSNotificationQueue ile çalışma döngülerindeydi) sorunlara yol açmıştık.

+1

bilmiyorum '9 libsystem_pthread.dylib ama NSThread aslen pthreads dışında bir şey kullanılmış olması oldukça mantıklıdır (e .g. Mach iş parçacığı API'sinin doğrudan kullanımı. Ama bence bugün aslında pthreads kullanıyor. Kanıt: /System/Library/Frameworks/Foundation.framework/Foundation "NSThread * _NSThreadGet0 (pthread_t)" dizesini içerir. Pthread'i NSThread'e dönüştürmek için belgesiz bir API'ye benziyor mu? NSThread, muhtemelen sadece bir pthread sarıcı olduğunu ima eder (ki bu da Mach konuları için sadece bir sarıcıdır) –

+0

Bence pthread kullanır. Pablo'nun cevabına gönderdiğim çağrı yığınlarını görün. –