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
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.
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.
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) –
Bence pthread kullanır. Pablo'nun cevabına gönderdiğim çağrı yığınlarını görün. –
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
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 ' –