Τι είναι ο Παραλληλισμός στο JavaScript;

Τι είναι ο Παραλληλισμός στο JavaScript;
Αναγνώστες σαν εσάς βοηθούν στην υποστήριξη του MUO. Όταν κάνετε μια αγορά χρησιμοποιώντας συνδέσμους στον ιστότοπό μας, ενδέχεται να κερδίσουμε μια προμήθεια θυγατρικών. Διαβάστε περισσότερα.

Η JavaScript μπορεί να αντιμετωπίσει εργασίες με ένταση απόδοσης επειδή είναι μια γλώσσα με ένα νήμα. Χρησιμοποιώντας τον παραλληλισμό, μπορείτε να επιτύχετε εκτέλεση πολλαπλών νημάτων σε JavaScript και να βελτιώσετε την απόδοση και την ανταπόκριση των σύγχρονων εφαρμογών ιστού σας.





Παραλληλισμός στον προγραμματισμό JavaScript

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





ΚΑΤΑΣΚΕΥΗ ΒΙΝΤΕΟ ΤΗΣ ΗΜΕΡΑΣ ΚΥΛΙΣΤΕ ΓΙΑ ΝΑ ΣΥΝΕΧΙΣΕΤΕ ΜΕ ΠΕΡΙΕΧΟΜΕΝΟ

Μια κοινή τεχνική που χρησιμοποιείται για την επίτευξη παραλληλισμού στον προγραμματισμό είναι το multi-threading. Το νήμα JavaScript, ωστόσο, είναι ένα σύστημα μονού νήματος και μπορεί να χειριστεί μόνο μία εργασία τη φορά. Αυτό σημαίνει ότι δεν είναι εξοικειωμένο με τις παράλληλες εκτελέσεις προγραμμάτων.





Παράλληλος προγραμματισμός Fakes JavaScript

Μια κοινή παρανόηση σχετικά με τον παραλληλισμό είναι ότι μπορείτε να τον πετύχετε χρησιμοποιώντας τεχνικές ασύγχρονου προγραμματισμού όπως ασυγχρονισμός/αναμονή, επιστροφές κλήσεων και υποσχέσεις:

 // Async/await function that simulates a network request 
async function fetchData() {
  const response = await fetch();
  const data = await response.json();
  return data;
}

// Callback function that logs the fetched data to the console
function logData(data) {
  console.log(data);
}

// Promise.all() method that executes multiple promises in parallel
Promise.all([
  fetchData(),
  fetchData(),
]).then((results) => {
  console.log(results);
});

// Call the fetchData function and pass the logData function as a callback
fetchData().then(logData);

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



Ο βρόχος συμβάντος είναι ένα θεμελιώδες μέρος του περιβάλλοντος χρόνου εκτέλεσης JavaScript. Σας επιτρέπει να εκτελείτε ασύγχρονες λειτουργίες, όπως αιτήματα δικτύου, στο παρασκήνιο χωρίς να μπλοκάρετε το κύριο μεμονωμένο νήμα.

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





Συγχρονισμός εναντίον Παραλληλισμού

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

Το Concurrency στο JavaScript αναφέρεται στη δυνατότητα εκτέλεσης πολλαπλών εργασιών επικαλύπτοντας την εκτέλεση των εργασιών. Όπου μια εργασία μπορεί να ξεκινήσει πριν ολοκληρωθεί μια άλλη, αλλά οι εργασίες δεν μπορούν ούτε να ξεκινήσουν ούτε να τελειώσουν ταυτόχρονα. Αυτό επιτρέπει στην JavaScript να χειρίζεται αποτελεσματικά τις λειτουργίες, όπως η ανάκτηση δεδομένων από ένα REST API ή ανάγνωση αρχείων, χωρίς αποκλεισμό του κύριου νήματος εκτέλεσης.





Ο παραλληλισμός, από την άλλη πλευρά, αναφέρεται στην ικανότητα εκτέλεσης πολλαπλών εργασιών ταυτόχρονα σε πολλαπλά νήματα. Αυτά τα νήματα φόντου μπορούν να εκτελέσουν εργασίες ανεξάρτητα και ταυτόχρονα. Αυτό ανοίγει ευκαιρίες για την επίτευξη αληθινού παραλληλισμού στις εφαρμογές JavaScript.

Οι εφαρμογές της JavaScript μπορούν να επιτύχουν αληθινό παραλληλισμό μέσω τη χρήση των Web Workers .

Οι Εργάτες Ιστού εισάγουν τον Παραλληλισμό στην JavaScript

Τα Web Workers είναι ένα χαρακτηριστικό των σύγχρονων προγραμμάτων περιήγησης ιστού που επιτρέπουν στον κώδικα JavaScript να εκτελείται σε νήματα φόντου, ξεχωριστά από το κύριο νήμα εκτέλεσης. Σε αντίθεση με το κύριο νήμα, το οποίο χειρίζεται τις αλληλεπιδράσεις των χρηστών και τις ενημερώσεις διεπαφής χρήστη. Το Web Worker θα είναι αφοσιωμένο στην εκτέλεση εργασιών με υπολογιστική ένταση.

Παρακάτω είναι μια αναπαράσταση διαγράμματος της λειτουργίας ενός Web Worker σε JavaScript.

  Ένα διάγραμμα βέλους μιας ροής λειτουργίας Web Worker

Το κύριο νήμα και το Web Worker μπορούν να επικοινωνούν χρησιμοποιώντας τη μετάδοση μηνυμάτων. Χρησιμοποιώντας την postΜήνυμα μέθοδο αποστολής μηνυμάτων και το ένα μήνυμα πρόγραμμα χειρισμού συμβάντων για να λαμβάνετε μηνύματα, μπορείτε να μεταβιβάζετε οδηγίες ή δεδομένα εμπρός και πίσω.

Δημιουργία Web Worker

Για να δημιουργήσετε ένα Web Worker, πρέπει να δημιουργήσετε ένα ξεχωριστό αρχείο JavaScript.

Εδώ είναι ένα παράδειγμα:

 // main.js 

// Create a new Web Worker
const worker = new Worker('worker.js');

// Send a message to the Web Worker
worker.postMessage('Hello from the main thread!');

// Listen for messages from the Web Worker
worker.onmessage = function(event) {
  console.log('Received message from Web Worker:', event.data);
};

Το παραπάνω παράδειγμα δημιουργεί ένα νέο Web Worker περνώντας τη διαδρομή προς το σενάριο εργασίας ( εργάτης.js ) ως επιχείρημα στο Εργάτης κατασκευαστής. Μπορείτε να στείλετε ένα μήνυμα στον Web Worker χρησιμοποιώντας το postΜήνυμα μέθοδο και ακούστε μηνύματα από το Web Worker χρησιμοποιώντας το ένα μήνυμα χειριστής συμβάντων.

Στη συνέχεια, θα πρέπει να δημιουργήσετε το σενάριο εργασίας ( εργάτης.js ) αρχείο:

 // worker.js 

// Listen for messages from the main thread
self.onmessage = function(event) {
  console.log('Received message from main thread:', event.data);

  // Send a message back to the main thread
  self.postMessage("Hello from worker.js!");
};

Το σενάριο Web Worker ακούει μηνύματα από το κύριο νήμα χρησιμοποιώντας το ένα μήνυμα χειριστής συμβάντων. Μόλις λάβετε ένα μήνυμα, αποσυνδέεστε το μήνυμα μέσα γεγονός.δεδομένα και στείλτε ένα νέο μήνυμα στο κύριο νήμα με το postΜήνυμα μέθοδος.

Αξιοποίηση του Παραλληλισμού με τους Εργάτες Ιστού

Η κύρια περίπτωση χρήσης για τους Εργάτες Ιστού είναι η παράλληλη εκτέλεση εργασιών JavaScript με υπολογιστική ένταση. Με τη μεταφόρτωση αυτών των εργασιών σε Web Workers, μπορείτε να επιτύχετε σημαντικές βελτιώσεις απόδοσης.

Ακολουθεί ένα παράδειγμα χρήσης ενός web worker για να εκτελέσετε έναν βαρύ υπολογισμό:

 // main.js 

const worker = new Worker('worker.js');

// Send data to the Web Worker for calculation
worker.postMessage([1, 2, 3, 4, 5]);

// Listen for the result from the Web Worker
worker.onmessage = function(event) {
  const result = event.data;
  console.log('Calculation result:', result);
};

Worker.js:

 // Listen for data from the main thread 
self.onmessage = function (event) {
  const numbers = event.data;

  const result = performHeavyCalculation(numbers);

  // Send the result back to the main thread
  self.postMessage(result);
};

function performHeavyCalculation(data) {
  // Perform a complex calculation on the array of numbers
  return data
    .map((number) => Math.pow(number, 3)) // Cube each number
    .filter((number) => number % 2 === 0) // Filter even numbers
    .reduce((sum, number) => sum + number, 0); // Sum all numbers
}

Σε αυτό το παράδειγμα, μεταβιβάζετε έναν πίνακα αριθμών από το κύριο νήμα στο Web Worker. Το Web Worker εκτελεί τον υπολογισμό χρησιμοποιώντας τον παρεχόμενο πίνακα δεδομένων και στέλνει το αποτέλεσμα πίσω στο κύριο νήμα. ο performHeavyCalculation() Η συνάρτηση αντιστοιχίζει κάθε αριθμό στον κύβο του, φιλτράρει τους ζυγούς αριθμούς και τέλος τους αθροίζει.

πώς να δημιουργήσετε υφές στο photoshop

Περιορισμοί και Θεωρήσεις

Ενώ οι Εργάτες Ιστού παρέχουν έναν μηχανισμό για την επίτευξη παραλληλισμού στο JavaScript, είναι σημαντικό να λάβετε υπόψη ορισμένους περιορισμούς και εκτιμήσεις:

  • Χωρίς κοινόχρηστη μνήμη : Οι Εργάτες Ιστού λειτουργούν σε ξεχωριστά νήματα και δεν μοιράζονται τη μνήμη με το κύριο νήμα. Έτσι, δεν μπορούν να έχουν άμεση πρόσβαση σε μεταβλητές ή αντικείμενα από το κύριο νήμα χωρίς να περάσει μήνυμα.
  • Serialization και Deserialization : Κατά τη διαβίβαση δεδομένων μεταξύ του κύριου νήματος και των Εργαζομένων Ιστού, πρέπει να σειριοποιήσετε και να αποσειροποιήσετε τα δεδομένα, καθώς η μετάδοση μηνυμάτων είναι μια επικοινωνία που βασίζεται σε κείμενο. Αυτή η διαδικασία συνεπάγεται κόστος απόδοσης και μπορεί να επηρεάσει τη συνολική απόδοση της εφαρμογής.
  • Υποστήριξη προγράμματος περιήγησης : Αν και τα Web Workers υποστηρίζονται καλά στα περισσότερα σύγχρονα προγράμματα περιήγησης ιστού, ορισμένα παλαιότερα προγράμματα περιήγησης ή περιορισμένα περιβάλλοντα ενδέχεται να έχουν μερική ή καθόλου υποστήριξη για Web Workers.

Επίτευξη πραγματικού παραλληλισμού σε JavaScript

Ο παραλληλισμός στο JavaScript είναι μια συναρπαστική έννοια που επιτρέπει την αληθινή ταυτόχρονη εκτέλεση εργασιών, ακόμη και σε μια κυρίως γλώσσα μονού νήματος. Με την εισαγωγή των Web Workers, μπορείτε να αξιοποιήσετε τη δύναμη του παραλληλισμού και να επιτύχετε σημαντικές βελτιώσεις απόδοσης στις εφαρμογές σας JavaScript.