Następujące rzeczy są co wiem & zrozumieć:trzeba pewne wyjaśnienia dotyczące wysyłki kolejce, nici i NSRunLoop
Globalna kolejka jest współbieżne kolejka, która może wywoływać zadania do wielu wątków. Kolejność wykonywania zadania nie jest gwarantowana. np .:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), {
for (int i; i<10; i++) {
doTask()
}
})
Jeśli chcę wysyłką do szeregowego kolejce, można użyć
dispatch_async(dispatch_queue_create("my.serial.queue", nil) {
...
}
każdorazowo tylko jedno zadanie jest wysyłane do wątku & zostanie wykonany. Zamówienie jest FIFO.
===== Co Jestem zdezorientowany & nie w pełni zrozumieć =======
Główny wątek ma NSRunLoop, zapętlenie zadań w głównym wątku. Zastanawiam się, jaka jest relacja między kolejką wysyłkową a pętlą uruchamiania? Czy mogę to zrozumieć, jeśli, wysyłając zadanie do głównego wątku, NSRunLoop głównego wątku otrzyma wysłane zadanie i je wykona?
Co z globalną kolejką, która wysyła zadania do wielu wątków? Czy system iOS/OSX automatycznie tworzy nie tylko wątki, ale także tworzy NSRunLoop dla każdego wątku? a następnie uruchomić pętli w każdym wątku uzyskać wywołanie zadania z globalnej kolejki & go wykonać?
Kto zna wątek? Czy funkcja
dispatch_async()
idispatch_sync()
wie, do którego wątku należy wywołać zadanie, czy czy wie, do którego wątku należy wysłać zadanie?Czy istnieje sposób programistycznego pobrania obiektu NSRunLoop z wątku (do którego jest wywoływane zadanie) z kolejki wywołania? (To pytanie jest związane z pytaniem 3)
Dlaczego chcesz/potrzebujesz runloopa na wątku tła? Jeśli opisujesz, co próbujesz zrobić, możemy zaproponować lepsze wzorce. – Rob
@Rob, Nie mówię, że potrzebuję runloopa na tle wątku, jestem po prostu zakłopotany, dlatego zadaję te pytania. Nie jestem pewien, czy każdy wątek ma NSRunLoop w systemie iOS/OSX. –
OK. Podsumowując, nie potrzebujesz (ani koniecznie chcesz) uruchamiać pętli w każdym wątku. Celem pętli uruchamiania jest utrzymanie wątku przy życiu, odpytywanie o zdarzenia. Jest to niemal sprzeczne z wzorami GCD. – Rob