Μετάβαση στο περιεχόμενο

Εκτέλεση πρακτόρων παράλληλα

Αυτός ο οδηγός δείχνει πώς να εκτελείτε αρκετούς πράκτορες ταυτόχρονα, χωρίς να αντικαθιστά ο ένας την εργασία του άλλου.

Η μονάδα απομόνωσης είναι ο χώρος, όχι ο πράκτορας

Ενότητα με τίτλο «Η μονάδα απομόνωσης είναι ο χώρος, όχι ο πράκτορας»

Όταν ξεκινά εργασία σε έναν χώρο, το Control Center προετοιμάζει ένα checkout copy-on-write ανά καταχωρισμένο αποθετήριο κάτω από τη δική του ρίζα του χώρου, σε ένα branch που παράγεται από το πρότυπο branch του χώρου εργασίας. Κάθε πράκτορας στον χώρο παίρνει έπειτα τον δικό του κατάλογο εργασίας overlay — όμως τα overlay μοιράζονται τον κατάλογο repos/ αυτού του χώρου.

Έτσι:

  • Δύο πράκτορες σε διαφορετικούς χώρους εργάζονται σε διαφορετικά checkout, σε διαφορετικά branch. Αυτή είναι πραγματική απομόνωση.
  • Δύο πράκτορες στον ίδιο χώρο εργάζονται στο ίδιο checkout, στο ίδιο branch. Οι διαδρομές overlay τους διαφέρουν, οπότε το κλείδωμα διαδρομής αποστολής (το οποίο σειριοποιεί τις εκτελέσεις μόνο όταν ζητούν τον ίδιο ακριβώς κατάλογο εργασίας) δεν τους σειριοποιεί ούτε αυτό. Μπορούν να γράψουν τα ίδια αρχεία την ίδια στιγμή.

Ο κανόνας που προκύπτει: ένας χώρος ανά παράλληλη εργασία.

Εκτέλεση εργασιών παράλληλα — ξεχωριστοί χώροι

Ενότητα με τίτλο «Εκτέλεση εργασιών παράλληλα — ξεχωριστοί χώροι»
  1. Ανοίξτε έναν χώρο με τον πράκτορα A και στείλτε του μια εργασία.
  2. Ανοίξτε έναν δεύτερο χώρο με τον πράκτορα B και στείλτε του μια διαφορετική εργασία.
  3. Και οι δύο αποστέλλονται αμέσως, ο καθένας στο checkout του χώρου του, στο δικό του branch.

Αυτή είναι η συνταγή που χρησιμοποιείτε όποτε οι πράκτορες πρόκειται να επεξεργαστούν αρχεία.

Συνεργασία σε έναν χώρο — πολλαπλές @-αναφορές

Ενότητα με τίτλο «Συνεργασία σε έναν χώρο — πολλαπλές @-αναφορές»

Σε έναν μόνο χώρο, κάντε @-αναφορά σε περισσότερους από έναν πράκτορες:

@alice refactor the auth module. @bob review what alice lands.

Και οι δύο πράκτορες αποστέλλονται παράλληλα και μεταδίδουν ροή στον ίδιο χώρο, με ετικέτα του αποστολέα. Επειδή μοιράζονται το checkout του χώρου, χρησιμοποιήστε το για συνεργασία — ο ένας γράφει, ο άλλος διαβάζει, ή δύο πράκτορες συλλογίζονται το ίδιο δέντρο — όχι για δύο ανεξάρτητες επεξεργασίες.

Το ενσωματωμένο πρότυπο pr_review είναι το έτοιμο παράδειγμα διασποράς: αρκετοί κόμβοι ελεγκτών εκτελούνται ταυτόχρονα από έναν ενεργοποιητή και ένας κόμβος Consolidate (join) διπλώνει τα ευρήματά τους σε μία αναφορά. Εκτελέστε το από την οθόνη των pipeline και κάθε ελεγκτής αποστέλλεται παράλληλα.

Ο επεξεργαστής pipeline κρύβει τον τερματικό φρουρό και τον επανασυνδέει ώστε να περιμένει κάθε ενεργή καταβόθρα όταν προσθέτετε ή συνδέετε ένα βήμα, οπότε τα branch που σχεδιάζετε οι ίδιοι εκτελούνται όντως.

Η Παρατηρησιμότητα → Ζωντανά (υποσέλιδο της πλαϊνής στήλης → Παρατηρησιμότητα, και μετά η καρτέλα Ζωντανά) δείχνει τη λίστα πρακτόρων αυτού του χώρου εργασίας, ανανεώνοντάς την κάθε δευτερόλεπτο: κατάσταση (Σε εκτέλεση / Αδρανής / Σταθμευμένος / Ματαιώθηκε), τι κάνει ο καθένας, token και κόστος για την τελευταία εκτέλεσή του και ένα χειριστήριο τερματισμού για μια διεργασία που εκτελείται. Η επιλογή μιας γραμμής προσαρτά ένα συρτάρι ζωντανής μεταγραφής.

Οι Ρυθμίσεις → Χώρος εργασίας → Πράκτορες δείχνουν την ίδια λίστα με ένα διαφορετικό λεξιλόγιο καταστάσεων, με προτεραιότητα στην προσοχή, που παράγεται από το ιστορικό εκτελέσεων κάθε πράκτορα — Σε εκτέλεση, Αποκλεισμένος, Αποτυχία, Αδρανής, δεν έχει εκτελεστεί ποτέ — ταξινομημένη ώστε ό,τι χρειάζεται προσοχή να ανεβαίνει στην κορυφή. Η καρτέλα Αρχεία καταγραφής κάθε πράκτορα κρατά το δικό του ιστορικό εκτελέσεων.

Και οι δύο επιφάνειες έχουν εμβέλεια τον ενεργό χώρο εργασίας.

Μεταξύ χώρων, κάθε χώρος βρίσκεται στο δικό του branch, οπότε μια σύγκρουση εμφανίζεται ως μια συνηθισμένη σύγκρουση συγχώνευσης του Git όταν συγχωνεύετε το δεύτερο pull request. Επιλύστε την όπως θα επιλύατε οποιαδήποτε σύγκρουση συγχώνευσης.

Μέσα σε έναν χώρο δεν υπάρχει όριο branch ούτε κλείδωμα: οι πράκτορες γράφουν τα ίδια αρχεία ζωντανά και όποιος χάνει απλώς αντικαθίσταται. Αν σας έρθει η επιθυμία να επεξεργάζονται δύο πράκτορες σε έναν χώρο, χωρίστε την εργασία σε δύο χώρους.

Για να μειώσετε τις συγκρούσεις και στις δύο περιπτώσεις:

  • Δώστε σε κάθε πράκτορα ξεχωριστό πεδίο ευθύνης — διαφορετικά αρχεία, διαφορετικά modules.
  • Χρησιμοποιήστε το γράφημα κώδικα για να ελέγξετε τι αγγίζει μια αλλαγή πριν την αποστείλετε. Δείτε Αναζήτηση κώδικα με το γράφημα κώδικα.
  • Ελέγξτε και συγχωνεύστε έγκαιρα το pull request κάθε πράκτορα.

Κάθε πράκτορας που εκτελείται κοστίζει:

  • Ένα checkout του χώρου — αμελητέο στον δίσκο όσο διατίθεται το copy-on-write· στα Windows, ένα git worktree. Ένα σύστημα αρχείων που δεν μπορεί να κάνει reflink αποτυγχάνει στην προετοιμασία αντί να αντιγράψει.
  • Μια διεργασία στον κεντρικό υπολογιστή του διακομιστή
  • Token του μοντέλου, που συσσωρεύονται ανά πράκτορα

Το κόστος καταλήγει στα Παρατηρησιμότητα → Στοιχεία. Σημειώστε ότι ένας κανονικός διαδραστικός γύρος δεν έχει όριο δαπάνης· δείτε Διαχείριση κόστους για τις δύο εντολές που έχουν.