#826

Φτιάξε μια ουρά εργασιών που κλιμακώνεται καθαρά

Υπάρχει μια ουρά εργασιών στη βάση δεδομένων — πίνακας jobs με status pending για τις μη εκτελεσμένες γραμμές. Πέντε workers την κοιτούν ταυτόχρονα: ο καθένας θέλει να αρπάξει την παλαιότερη εργασία και να τη σημειώσει ως «σε εξέλιξη». Ένα συνηθισμένο lock επιπέδου γραμμής με ένα limit κάνει και τους πέντε workers να συσσωρεύονται στην ίδια γραμμή και να σειριοποιούνται. Η θεραπεία είναι να παρακάμπτεις τις γραμμές που είναι ήδη κλειδωμένες και να παίρνεις την επόμενη ελεύθερη: κάθε worker παίρνει τη δική του εργασία και ο παραλληλισμός λειτουργεί χωρίς συγκρούσεις. Ο jobs(id SERIAL, status, payload) περιέχει τέσσερις pending γραμμές (a, b, c, d). Άρπαξε μία pending εργασία από το jobs με το μικρότερο id, γύρνα την σε running — οι άλλες τρεις παραμένουν pending.

Το αποτέλεσμα του ερωτήματός σας θα εμφανιστεί εδώ