24 |
P a g e
ΣΧΕΔΙΑΣΜΟΣ ΚΑΙ ΥΛΟΠΟΙΗΣΗ WEBSITE ΠΛΑΤΦΟΡΜΑΣ ΓΙΑ ΤΗΝ ΔΙΑΧΕΙΡΙΣΗ ΡΟΜΠΟΤΙΚΩΝ
ΣΥΣΤΗΜΑΤΩΝ
Επίσης, χρησιμοποιείται κυρίως για τη δημιουργία προγραμμάτων δικτύου, όπως διακομιστές
Web. Η μεγαλύτερη διαφορά μεταξύ Node.JS και PHP, είναι ότι οι περισσότερες διαδικασίες
σταματούν, έως ότου ολοκληρωθούν κάποιες ενέργειες, σε αντίθεση με τη Node.JS όπου οι
διαδικασίες δε διακόπτονται, αλλά εκτελούνται παράλληλα, χρησιμοποιώντας callbacks για να
σηματοδοτήσουν την ολοκλήρωση ή αποτυχία μιας διαδικασίας.
Όσο αναφορά τη λειτουργία της Node.JS είναι single-thread event loop, με κλήσεις
εισόδου/εξόδου χωρίς αποκλεισμούς, επιτρέποντας την υποστήριξη σε δεκάδες χιλιάδες
ταυτόχρονες συνδέσεις, χωρίς να επιβαρύνεται με κόστος αλλαγής thread. Ο σχεδιασμός της
κοινής χρήσης ενός νήματος μεταξύ όλων των αιτημάτων που χρησιμοποιούν το μοτίβο του
παρατηρητή (observer), προορίζεται για την κατασκευή πολλών ταυτόχρονων εφαρμογών, όπου
οποιαδήποτε λειτουργία εκτελεί I / O πρέπει να χρησιμοποιεί callbacks. Η υλοποίηση του single-
thread event loop, πραγματοποιείται, χρησιμοποιώντας τη βιβλιοθήκη libuv, η οποία με τη σειρά
της χρησιμοποιεί μία ομάδα νημάτων σταθερού μεγέθους, που χειρίζεται ορισμένες από τις μη
αποκλεισμένες ασύγχρονες λειτουργίες εισόδου/εξόδου. Για την εκτέλεση παράλληλων
διεργασιών, υπεύθυνη χρίζεται μία ομάδα νημάτων που θα τις διαχειρίζεται [5].
Το thread κύριας λειτουργίας, καλεί τα post request στην ουρά των κοινόχρηστων εργασιών
και στη συνέχεια, καθορίζει και εκτελεί το κάθε thread στο thread pool. Ενσωματωμένες
λειτουργίες συστήματος μη αποκλεισμού, όπως η δικτύωση, μεταφράζονται ως kernel-side non-
blocking sockets, ενώ οι λειτουργίες συστήματος μπλοκαρίσματος, όπως τα αρχεία I / O,
εκτελούνται με τρόπο αποκλεισμού στα δικά τους νήματα. Όταν ένα νήμα από την ομάδα νήματος
ολοκληρώνει μία εργασία, ενημερώνεται το κύριο νήμα αυτού, το οποίο με τη σειρά του
ενεργοποιείται και εκτελεί το καταχωρημένο callback.
Στην εικόνα (5) παρουσιάζεται ο τρόπος διαχείρισης των αιτημάτων μετάδοσης δεδομένων.
Εικόνα 5: Διαχείριση αιτημάτων σύνδεσης