![]() |
![]() |
![]()
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%) ![]() ![]() |
Bez Twojej wiedzy to się tak znowu nie dzieje - skrypt dostaje wtedy stosowną informację i może zareagować (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) . Ogólnie, jeśli tylko jest to możliwe, baza stara się jednak wykonać równolegle dwie transakcje, przy czym one nie widzą nawzajem swoich poczynań, dopóki się nie wykonają do samego końca. W przypadku transakcji masz też możliwość blokowania na poziomie pojedynczych wierszy, a nie całych tabel. Przykładowo, jeśli pobierasz dane zapytaniem SELECT i później na ich podstawie robisz INSERT, to takie dwie transakcje mogą się spokojnie wykonać równolegle, ale mogą dać złe wyniki (np. doda się dwukrotnie to samo). Wtedy możesz do SELECT dodać słowa FOR UPDATE i wtedy dwie transakcje będą mogły wykonać się tylko wtedy, jeśli nie będą operować na tych samych wierszach - w przeciwnym wypadku jedna zaczeka na drugą.
Oczywiście w przypadku sekcji krytycznych można zablokować całą tabelę przed wejściem w transakcję, nie ma przeciwko temu żadnych przeciwwskazań - oznacza to, że blokowanie oraz transakcje mogą się uzupełniać, jeśli zachodzi potrzeba. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 01:35 |