Γλωσσάρι: data races, deadlocks και debugging — DedSec Project
Γλωσσάρι: data races, deadlocks και debugging Data race Τι σημαίνει στην πράξη Data race υπάρχει όταν διαφορετικές εκτελέσεις προσπελαύνουν κοινή μεταβλητή χωρίς σωστό συγχρονισμό και…
Data race
Τι σημαίνει στην πράξη
Data race υπάρχει όταν διαφορετικές εκτελέσεις προσπελαύνουν κοινή μεταβλητή χωρίς σωστό συγχρονισμό και τουλάχιστον μία γράφει. Σε ορισμένες γλώσσες οδηγεί σε undefined behavior, ενώ και στην Python οι multi-step updates δεν εγγυώνται atomicity.
Συγκεκριμένο παράδειγμα
from threading import Lock
value = 0
lock = Lock()
def safe_increment():
global value
with lock: value += 1
Άσκηση και συχνή παγίδα
Τρέξε πολλές ασφαλείς αυξήσεις στον ίδιο counter και επιβεβαίωσε το σύνολο. Εξήγησε γιατί ένα sleep δεν παρέχει συγχρονισμό. Σύγκρινε shared mutex state με ανταλλαγή immutable messages.
Αναφορά: https://docs.python.org/3/library/threading.html#lock-objects
Deadlock
Τι σημαίνει στην πράξη
Deadlock υπάρχει όταν tasks περιμένουν πόρους σε κύκλο και καμία δεν μπορεί να συνεχίσει. Δύο threads με αντίστροφη σειρά locks είναι κλασικό παράδειγμα. Ένα αργό task δεν αποδεικνύει deadlock· χρειάζεται wait-for cycle.
Συγκεκριμένο παράδειγμα
from threading import Lock
first, second = Lock(), Lock()
def do_work():
with first:
with second:
return 'ok'
assert do_work() == 'ok'
Άσκηση και συχνή παγίδα
Κατέγραψε ενιαία σειρά απόκτησης locks για όλες τις διαδρομές. Σχεδίασε το επικίνδυνο αντίστροφο lock order χωρίς να εκτελέσεις πρόγραμμα που κολλά επ' αόριστον. Μελέτησε timeouts και graceful failure.
Αναφορά: https://docs.python.org/3/library/threading.html#lock-objects
Debugging
Τι σημαίνει στην πράξη
Το debugging εντοπίζει ποιος μηχανισμός προκαλεί απόκλιση από τις προδιαγραφές. Δεν είναι τυχαίες αλλαγές μέχρι να χαθεί το σύμπτωμα. Ένα minimal reproducer, η σύγκριση expected/actual και το regression test δίνουν ελέγξιμη εξήγηση.
Συγκεκριμένο παράδειγμα
def average(values):
if not values: return None
return sum(values) / len(values)
assert average([]) is None
assert average([2, 4]) == 3
Άσκηση και συχνή παγίδα
Δημιούργησε ελαττωματική έκδοση που διαιρεί με μηδέν σε κενή λίστα. Δήλωσε το invariant και πρόσθεσε regression test πριν από τη διόρθωση. Σε UI bug κράτησε και βήματα αναπαραγωγής/browser version.
Αναφορά: https://docs.python.org/3/library/pdb.html
Dependency
Τι σημαίνει στην πράξη
Dependency είναι στοιχείο απαραίτητο για build, runtime ή tests. Άμεσες εξαρτήσεις δηλώνονται ρητά, ενώ transitive έρχονται μέσω άλλων. Version ranges, lockfiles και platform compatibility επηρεάζουν την αναπαραγωγιμότητα.
Συγκεκριμένο παράδειγμα
python -m pip --version
python -m pip list --format=freeze
# inspect the local environment; these commands install nothing
Άσκηση και συχνή παγίδα
Σύγκρινε pinned με unpinned requirements σε προσωρινό virtual environment. Κράτησε ξεχωριστά τις άμεσες εξαρτήσεις από το πλήρες resolved graph. Μην εγκαθιστάς package μόνο επειδή το όνομα μοιάζει με error· έλεγξε publisher.
Αναφορά: https://packaging.python.org/en/latest/discussions/install-requires-vs-requirements/