რა განსხვავებაა Node.js- ს მიერ წარმოქმნილ მოვლენათა არქიტექტურასა და სხვა ენებზე მრავალრიცხოვან პროგრამირებას შორის?


პასუხი 1:

როგორც მოვლენებზე ორიენტირებული, ისე მრავალწახნაგოვანი პარადიგმებში, კოდი შესრულებულია ოპერაციული სისტემის პროცესში.

თუ პროცესი გადის მრავალჯერადი ძაფით, ეს ძაფები იზიარებს პროცესის მეხსიერებას (მისამართის სივრცე) კითხვისა და წერისთვის.

JavaScript, რომელიც მართავს Node.js, არის თანდაყოლილი ერთ – ძაფი. გარანტირებულია ყველა ფუნქციის შესრულება და ამ ფუნქციის შესრულების დროს სხვა JavaScript კოდი არ შესრულებულა. ბუნებრივად ასინქრონული მოვლენები (ქსელი, დისკის შეყვანა / გამომავალი, ტაიმერი, სხვა აპარატურა და ოპერაციული სისტემის მოვლენები) დამუშავებულია ძრავის მიერ, რომელიც ამატებს JavaScript ფუნქციებს, რომლებიც რეგისტრირებულია როგორც დამმუშავებლები (ან ზარის უკუკავშირი) ამ მოვლენებისთვის, ღონისძიების მარყუჟის რიგში, რომ შესრულდება. რიგის დასრულებამდე.

მრავალწახნაგოვანი პარადიგმის პირობებში, ორი ან მეტი თემა პარალელურად ასრულებს კოდს, ისე, რომ ფუნქციური პერსპექტივის დროს, კოდი შეიძლება სხვა კოდი ასევე შესრულდეს სხვა პროცესორის ბირთვზე, შესაძლოა კითხულობდეს ან წერთ იმავე მეხსიერების მისამართებზე. ეს შეიძლება გამოიწვიოს მეხსიერების არათანმიმდევრულ მდგომარეობამდე, თუ კოდი არ იყენებს სპეციალურ ოპერაციული სისტემის მექანიზმებს (სინქრონიზაციის პრიმიტივები) საერთო მეხსიერებაში წვდომის მართვისთვის.



პასუხი 2:

ეს არის კარგი კითხვა: "რა განსხვავებაა Node.j- ის მიერ დამყარებულ მოვლენათა არქიტექტურასა და სხვა ენებზე მრავალრიცხოვან პროგრამირებას შორის?"

ჩვენ შეგვიძლია და უნდა შემცირდეს ეს ცოტათი.

  • კვანძის მოვლენებზე ორიენტირებული არქიტექტურა

მოვლენებზე ორიენტირებული არქიტექტურა არ არის განკუთვნილი მხოლოდ კვანძებისთვის, მაგ. B. Tornado (პითონი), Vertx (Java), Akka (Scala), ReactiveX (მრავალი ენა).

  • მრავალრიცხოვანი პროგრამირება სხვა ენებზე.

გაითვალისწინეთ, რომ JavaScript სტანდარტულად არ უჭერს მხარს ბევრ ძაფს. იგი მხარს უჭერს ვებ-მუშაკებს, რომლებსაც, ჩემი ცოდნით, შეუძლიათ თემატიკად იმოქმედონ.

ამრიგად, ორიენტირებული მოვლენები არა მხოლოდ კვანძებისთვის არის შესაძლებელი, ხოლო მრავალთეზირება შესაძლებელია კვანძებში.

ასე რომ, შეიძლება არსებობდეს ორი კითხვა: "რა განსხვავებაა მოვლენებზე ორიენტირებულ და მრავალწახნაგებს შორის" და "რა განსხვავებაა კვანძსა და სხვა ენებს შორის (ჩარჩოები)". ამ უკანასკნელზე გავამახვილებ ყურადღებას, რადგან ეს, როგორც ჩანს, კითხვის განზრახვა იყო.

Node- ის განსაკუთრებული მნიშვნელობა ის არის, რომ ავტორმა შექმნა იგი, რომ ვებ – პროგრამების აგებისას I / O– ის დაბლოკვის თავიდან ასაცილებლად. კვანძების საზოგადოების კულტურა ხაზს უსვამს და აძლიერებს არა – ბლოკირების I / O– ს სიძლიერეს. თქვენ ვერ იპოვით ძალიან ბევრი მესამე მხარის ბიბლიოთეკას, რომლებიც ბლოკავს ზარებს. როგორც კოდის გამოყენებით შემქმნელი, თქვენ სავარაუდოდ ვერ შეხვდებით დაშვებულ დაბლოკვებს თქვენს კოდში. სხვა ენებზე, გულუბრყვილო დეველოპერმა შეიძლება შემთხვევით განახორციელოს ძალიან არაეფექტური ბლოკირების ზარები, მაგალითად ბ. მონაცემთა ბაზის კავშირის კითხვა.

როგორც ითქვა, თქვენ ნამდვილად უნდა წაიკითხოთ მრავალი „პარალელიზმის“ მრავალი მოდელის შესახებ და გესმოდეთ თითოეული დადებითი და დადებითი. ბონუს ქულა იმის აღიარებისთვის, თუ რატომ იყო მისაღები მრავალწახნაგა ამდენი ხნის განმავლობაში.



პასუხი 3:

კონცეპტუალური განსხვავებები საკმაოდ მარტივია თქვენს გარშემო ტრიალისთვის.

მოვლენებზე დამყარებულ არქიტექტურაში, თქვენი პროგრამა მიმდინარეობს უწყვეტი ერთჯერადი მარყუჟით (კვანძში შეგიძლიათ გააკეთოთ რამდენიმე ძაფის გაკეთება, მაგრამ ახლა ამაზე ფიქრი არ გჭირდებათ). როდესაც ღონისძიება გამოიწვევს, ზარის დასტაზე არის სამუშაო, რომელიც უნდა დამუშავდეს პროგრამის თავისუფალ დროს.

მრავალწახნაგოვანი ხუროთმოძღვრება ზოგადად ახდენს ახალ ძაფს, როდესაც ის უნდა დაელოდოს მოქმედებას. ასე რომ, გადადიხართ მონაცემთა ბაზაში და შექმნით ახალ ძაფს, რომელიც ასრულებს ყველა საჭირო დავალებას და გადადგამს აუცილებელ ნაბიჯებს ორიგინალური ძაფის დასასრულებლად ან გადასაცემად.

ორივე მეთოდი ძალიან სასარგებლოა სხვადასხვა მიზნებისათვის. მოვლენებზე ორიენტირებული პროგრამა შესანიშნავია მომხმარებლის ინტერფეისებისა და სერვერებისთვის, რადგან თქვენს პროგრამამ არ იცის, როდის მოხდება ახალი მოვლენა და მოვლენები ხშირად ხდება ჯგუფებში. ხოლო ძაფის გაკეთება საჭიროა გამოთვლითი ინტენსიური სამუშაოებისთვის, სადაც გსურთ პრობლემის გაყოფა გაცილებით მცირე ნაწილებად (ან მიუახლოვდეთ თქვენი ერთი ძაფის მარყუჟის ზღვარს).