pthread против NSThread: что быстрее - PullRequest
2 голосов
/ 14 января 2010

В Какао NSThread быстрее, чем pthread? это какой-то прирост производительности? это можно пренебречь?

Ответы [ 4 ]

10 голосов
/ 14 января 2010

У меня нет данных, подтверждающих это, но я собираюсь выйти на конечность и сказать «они эквивалентны». NSThread почти наверняка является оболочкой для pthread (есть ли другой способ создания системного потока?), Поэтому любые издержки использования NSThread против pthread будут связаны с созданием нового объекта и последующим его уничтожением. После запуска самого потока он должен быть практически идентичен с точки зрения производительности.

Я думаю, что реальный вопрос здесь: «Зачем вам нужно знать?» Сталкивались ли вы с ситуацией, когда порождение NSThread s кажется вредным для вашей работы? (Я мог бы видеть, что это проблема, если вы создаете сотни потоков, но в этом случае, скорее всего, проблема в сотнях потоков, а не в объектах NSThread)

Если у вас нет доказательств того, что создание NSThread объекта является узким местом в вашем приложении, я бы определенно согласился с опцией "пренебрежимо мало игнорировать".

1 голос
/ 14 января 2010

pthreads на самом деле немного меньше накладных расходов, но я не могу себе представить, что это будет иметь какое-то значение на практике. NSThread использует pthreads внизу. Фактическая скорость выполнения кода в вашем потоке будет одинаковой для обоих.

0 голосов
/ 06 февраля 2013

Я бы также предположил, что любые «накладные расходы» или «разница между экземплярами», которые вы платите в качестве дополнительного за NSThread, будут выровнены по дополнительным циклам и вызовам, которые вам в конечном итоге нужно будет выполнить для правильной настройки pthread с использованием API-интерфейсов pthread. .

Я считаю, что NSThread - это не более чем удобная оболочка, которая сохраняет некоторое кодирование в приложениях Cocoa / Cocoa-touch, которые хотят быть многопоточными.

0 голосов
/ 15 января 2010

В iPhone SDK NSThread использует pthread в качестве фактического потока. Честно говоря, они эквивалентны.

Однако мы можем получить доступ к «глубоким» настройкам через API-интерфейсы pthread, если мы используем API-интерфейс pthread. Например, способ планирования, размер стека, отдельный или нет, и т. Д. Эти API скрыты капсулой NSThread.

Следовательно, при некоторых условиях выигрыши pthreads.

...