2009-07-27 16 views
5

Powiedziano mi, że iPhone nie obsługuje wielozadaniowości i wielowątkowości. Nie miało to dla mnie sensu, przetestowałem więc na symulatorze: pthreads działa, fork() nie. Ten wynik ma ma sens dla mnie, ale teraz nie jestem pewien: czy biblioteka pthread działa również na prawdziwym urządzeniu?iPhone: wielozadaniowość, wielowątkowość?

Dzięki.

+2

UWAGA, że to pytanie pochodzi z WAY; iOS 4.2 obsługuje niektórych króla wielozadaniowości, chociaż rozwidlenia nadal nie będą działać. – noamtm

Odpowiedz

10

Wielowątkowość będzie działać. To nie wielozadaniowość. IPhone nie zezwoli na uruchomienie więcej niż jednej aplikacji trzeciej na raz. Rozumowanie to sprawia, że ​​fork znajduje się poza piaskownicą aplikacji.

Możesz tworzyć wątki do sondowania gniazd, czytać pliki, obsługiwać dowolny odtwarzacz AI lub do momentu, gdy wzrost wydajności zacznie ustępować.

1

Najprawdopodobniej.

Wielozadaniowość jest domyślnie wyłączona, aby aplikacje nie uruchamiały wielu procesów i nie spowalniają działania iPhone'a ani nie robią złośliwych rzeczy.

Procesor iPhonów naprawdę nie działa tak szybko, ale uruchamiając tylko jeden program na raz, wydaje się szybki. Wielozadaniowość wprowadziłaby wiele napowietrznych i innych problemów, które spowolniłyby iPhone'a.

Nie jestem pewien co do wielowątkowości, ale ponieważ wątki są zawarte w twoim własnym procesie, wydaje się prawdopodobne, że będą działać.

I tak jak powiedziałeś, pthreads działa, a fork() nie, więc jego logiczne działanie również działa na prawdziwym.

0

Wielowątkowość jest bardzo możliwa - iPhone rzeczywiście korzysta z tych samych interfejsów API do gwintowania Cocoa, które są dostępne na komputerze Mac. Piszę wspólną aplikację do rysowania, która wykorzystuje 6 wątków do obsługi rysowania, komunikacji sieciowej itp. Myślę, że tworzenie zbyt wielu wątków byłoby złym pomysłem, ponieważ iPhone ma tylko jeden procesor. Działają jednak bardzo dobrze na moim doświadczeniu!

3

Tak, biblioteka pthread będzie działać na telefonie iPhone. Alternatywnie możesz użyć wątków natywnych dla kakao z NSThread. Wielozadaniowość nie zadziała, ponieważ Apple wyraźnie to ogranicza.