2009-07-27 3 views
5

Мне сказали, что iPhone не поддерживает многозадачность и многопоточность. Для меня это не имело смысла, поэтому я тестировал на симуляторе: pthreads works, fork() этого не делает. Этот результат делает смысл для меня, но теперь я не уверен: будет ли библиотека pthread работать и на реальном устройстве?iPhone: многозадачность, многопоточность?

Спасибо.

+2

УКАЗАНИЕ, что этот вопрос от WAY назад; iOS 4.2 поддерживает некоторый король многозадачности, хотя forking все равно не будет работать. – noamtm

ответ

10

Многопоточность будет работать. Это многозадачность, которая не будет. Iphone не позволит запускать сразу несколько сторонних приложений. Это рассуждение заставляет вилку жить вне песочницы приложения.

Вы можете создавать темы для опроса сокетов, читать файлы, обрабатывать AI-плеер все, что хотите, или пока производительность не начнет уходить.

1

Скорее всего.

Многозадачность отключена по умолчанию, чтобы запретить приложениям порождать множество процессов и замедлять работу iPhone или делать вредоносные вещи.

Процессор iPhones действительно не так быстр, но только запустив 1 программу за раз, это кажется быстрым. Многозадачность представила бы много накладных расходов и других проблем, которые замедляли бы iPhone.

Я не уверен в многопоточности, но поскольку потоки содержатся в вашем собственном процессе, кажется, что они будут работать.

И как вы сказали, pthreads работают, а fork() не делает этого, поэтому логично это будет работать и на реальном.

0

Многопоточность очень возможна - на самом деле iPhone использует те же API-интерфейсы API Cocoa, которые доступны на Mac. Я пишу совместное приложение рисования, которое использует 6 потоков для обработки чертежа, сетевой коммуникации и т. Д. Я думаю, что создание слишком большого количества потоков было бы плохой идеей, так как iPhone имеет только один процессор. Тем не менее, они очень хорошо работают в моем опыте!

3

Да, библиотека pthread будет работать на iPhone. В качестве альтернативы вы можете использовать собственные потоки Cocoa с NSThread. Многозадачность не будет работать, поскольку Apple явно ограничивает это.

Смежные вопросы