![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Zastanawiam sie czy 2 skrypty php mogą zacząć wykonywać się równolegle? Przy jednym procesorze to chyba niemożliwe prawda? A co jeśli serwer jest wieloprocesorowy? Czy wtedy mogą wykonywać się obok siebie?
Czy jeśli nie wykonują się równolegle to po co korzystać z LOCK TABLES? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
PHP reaguje w ten sposób, że wysyła to zapytanie do bazy i jak baza każe mu czekać, to czeka, jako że w kodzie objętym blokadą zapisu może być tylko jeden wątek naraz (ten, który blokadę nałożył). W przypadku transakcji stosowanie blokowania nie jest konieczne. Bazy danych zezwalają nawet na równoległe wykonywanie się dwóch transakcji operujących na tych samych danych - nie pamiętam teraz dokładnie, która transakcja wygrywa, ale któraś wygrywa i jest "akceptowana", zaś pozostałe są anulowane. Jeśli natomiast dane ze sobą nie kolidują, obie transakcje przechodzą.
Ogólnie transakcje to najpewniejszy sposób zapobiegania powstawaniu nieścisłości w bazie danych z powodu tego, że jakaś grupa zapytań nie wykonała się poprawnie do końca. Zostały one tak zaprojektowane, by takim sytuacjom zapobiegać. Niestety, w przypadku MySQL-a do ich stosowania jest niezbędne użycie InnoDB zamiast MyISAM. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 13.10.2025 - 08:54 |