В какао, NSThread быстрее, чем pthread? является ли какое-либо повышение производительности? пренебречь?pthread vs NSThread: что быстрее
ответ
У меня нет данных, чтобы поддержать это, но я собираюсь выйти на конечность и сказать «они эквивалентны». NSThread
- почти наверняка обертка вокруг pthread (есть ли вообще какой-либо другой способ создать системный поток?), Поэтому любые накладные расходы на использование NSThread
против pthread будут связаны с созданием нового объекта и последующим его уничтожением. Как только сам поток запускается, он должен быть почти идентичным с точки зрения производительности.
Я думаю, что настоящий вопрос здесь: «Зачем вам нужно знать?» Вы столкнулись с какой-то ситуацией, когда нереста NSThread
s кажется вредным для вашей работы? (Я мог видеть, что это проблема, если вы создаете сотни потоков, но в этом случае сотни потоков, скорее всего, будут ваши проблемы, а не объекты NSThread
)
Если у вас нет доказательств того, что создание объект NSThread
является узким местом в вашем приложении, я бы определенно перейдите с опцией «пренебречь».
в моем приложении, создавая отдельный NSThread, уменьшает выход моей функции. Я задал этот вопрос, потому что я думал, что приоритет NSThread может вступить в игру, когда система не выделяет достаточное количество ресурсов для моего ниспадающего потока. – ReachConnection
. Более похоже, что они оба обертки вокруг одного и того же основного механизма ОС для создания потоков. Смысл, NSThread, являющийся частью ОС, предоставляемой SDK, не имеет никаких оснований для перехода через API pthreads, как это бы требовало «нормальная» программа. Но, я тоже, только догадываюсь. Я согласен, что они эквивалентны, и если бы они не были NSThread, люди работали бы так. –
@Terry это возможно. GNUStep, по крайней мере, использует pthread: http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Source/NSThread.m –
pthreads на самом деле имеют немного меньше накладных расходов, но я не могу себе представить, что это будет иметь какое-либо значение на практике. NSThread использует pthreads внизу. Фактическая скорость выполнения кода в вашем потоке будет одинаковой для обоих.
В iPhone SDK, NSThread использует pthread как фактический поток. Честно говоря, они эквивалентны.
Однако мы можем получить доступ к «глубоким» настройкам с помощью API-интерфейсов pthread, если мы используем API-интерфейс pthread. Например, способ планирования, размер стека, отдельный или нет и т. Д. Эти API скрыты капсулой NSThread.
Следовательно, при некоторых условиях побеждает pthreads.
Ну, абстракция должна скрывать детали реализации. Честно говоря, размер стека, приоритет потока и т. Д. Можно считать «деталями».Обычно при потоковом мы просто собираемся на параллелизм. При этом «NSThread» имеет '-setThreadPriority:' и 'setStackSize:'. –
Я бы также предположил, что любые «накладные расходы» или «отличительные черты», которые вы платите в качестве дополнительного для NSThread, будут уравновешены дополнительными циклами и вызовами, которые вам в конечном итоге необходимо выполнить, чтобы правильно настроить pthread, используя pthread API-интерфейсы.
Я считаю, что NSThread - это не что иное, как удобная оболочка, которая сохраняет некоторую кодировку в приложениях Cocoa/Cocoa-touch, которые хотят быть многопоточными.
Это ничтожно, пока вы не профиль и не найдете, что это проблема. :) – GManNickG