Moja aplikacja pobiera kilka zasobów z serwera, danych i deskryptorów danych. Te pobrania, uruchamiane przez akcje użytkownika, mogą być wykonywane jednocześnie, powiedzmy, do 50 pobrań na raz. Wszystkie te asynchroniczne zadania kończą się tworzeniem obiektów w pamięci (np. Dołączanie liści do struktur danych, takich jak dodawanie kluczy do edytowalnych słowników lub obiektów do tablic). Moje pytanie brzmi: czy to może powodować problemy ze stabilnością? Na przykład, jeśli kilka jednoczesnych zadań próbuje dodać klucze do tego samego słownika, czy mam poradzić sobie z sytuacją, umieszczając jakieś blokady? Jeśli zaimplementowałem cykl for, który szuka elementów graficznych w tablicy, czy możliwe jest, że inne uruchomione zadania mogą zmienić zawartość tablicy "podczas" cyklu? Jakieś referencje lub główne, ogólne wskazówki dotyczące tego wielozadaniowości, wielowątkowość inne niż oficjalna dokumentacja?iOS - Równoczesny dostęp do zasobów pamięci
Odpowiedz
Zależy od tego, jak masz do czynienia z pobraniami - jeśli korzystasz z NSURLConnection, to obsługuje on oddzielne wątki/współbieżność dla Ciebie i Twój kod jest powtórny, dzięki czemu nie musisz się martwić o jednoczesne działanie. Jeśli tworzysz własne wątki, potencjalnie masz problemy.
EDYCJA: Twój kod działa w głównym wątku (pętla głównego uruchomienia), powiedzmy, że masz NSURLConnection, który również działa, a następnie uruchomi się w osobnym wątku. Jednak Twój kod delegata, który zajmuje się zdarzeniami, które mają miejsce podczas połączenia, jest uruchamiany w pętli uruchamiania, a nie w innym wątku. Oznacza to, że twój kod może wykonywać tylko jedną rzecz naraz. Metoda połączenia zakończona pomyślnie nie zostanie wywołana jako w tym samym czasie jak każdy inny kod. Jeśli uruchomiłeś pętlę for, zablokowałoby to główny wątek, dopóki nie zakończyło się zapętlaniem, w międzyczasie, jeśli połączenie zostało zakończone, podczas gdy pętla for nadal działa, twój kod delegata nie zostanie wykonany, dopóki pętla nie zostanie zakończona.
Możesz zajrzeć do Grand Central Dispatch (GCD) i blokad barierowych. Bloki bariery pozwolą ci robić to, co chcesz w tle i "blokować" zasoby.
Zapoznaj się z dokumentacją Apple i postem Mike'a Ashusa na blogu here na GCD.
Podstawowym celem jest użycie kolejki współbieżnej, którą tworzysz, aby wykonać odczyty i blokadę blokującą dostęp do tego zasobu w celu zapisu. dobry towar.
Powodzenia
Tim
- 1. Równoczesny dostęp w SQLite
- 2. równoczesny dostęp zmienny w c
- 3. Dostęp do zasobów z projektu biblioteki Android?
- 4. Dostęp do zasobów poprzez kodzie w WPF
- 5. Dostęp do zasobów konfiguracyjnych w Scali IDE
- 6. Dostęp do adresu pamięci obiektów w rubin ..?
- 7. Dostęp do adresu pamięci w C#
- 8. Szybki dostęp do pamięci w C++?
- 9. Dostęp do pamięci zewnętrznej z systemem Android
- 10. Dostęp do prywatnej pamięci nitki w OpenMP
- 11. Równoczesny dostęp do odczytu w tablicy int []: Czy jest bezpieczny? Czy to szybko?
- 12. Jak uzyskać dostęp do zasobów do rysowania (kolorów) w java
- 13. Równoczesny słownik w języku C#
- 14. Dostęp do dekodera wideo w systemie iOS?
- 15. Zresetuj dostęp do kontaktów w symulatorze iOS?
- 16. Jak uzyskać dostęp do zasobów zewnętrznych z witryny Aspx
- 17. Dostęp do plików zasobów resx z innego projektu
- 18. Dostęp do zasobów szefa kuchni w rubinowym bloku
- 19. Jak skonfigurować wbudowany pomost, aby uzyskać dostęp do zasobów Jersey?
- 20. Jak zapewnić dostęp do zasobów za pomocą Google Dagger 2
- 21. Uzyskaj dostęp do "publicznych" zasobów interfejsu Graph API z aplikacji?
- 22. Jak uzyskać dostęp do zasobów za pomocą interfejsu webowego?
- 23. Dostęp do zasobów na stronie JSP aplikacji Spring MVC
- 24. Jak zabezpieczyć dostęp do zasobów statycznych na wiosnę
- 25. Jak uzyskać dostęp do zasobów w pliku JAR?
- 26. Android - Uzyskaj dostęp do pliku z zasobów \ Wyświetlanie PDF
- 27. Czas pamięci podręcznej zasobów na serwerach Shopify
- 28. mało pamięci systemowej w puli zasobów „wewnętrzną”
- 29. Dostęp do localStorage po naciśnięciu przycisku home w Phonegap/iOS
- 30. jak uzyskać dostęp do pamięci przydzielonej do różnych procesów?
Tak, Używam NSURLConnection. Wyobraźmy sobie, że mamy cykl na tablicy zmiennych, co się stanie, jeśli inne zadanie (połączenie powiodło się) spróbuje dodać obiekt na końcu tablicy, podczas gdy cykl for jest wykonywany? Czy mógłbyś w tym przypadku podać krótki przykład kodu zwrotnego? – user236739
Dodano jeszcze kilka zdań – Gruntcakes
Fajnie, te nowe linie, gdzie naprawdę wyjaśniasz, dzięki. – user236739