PHP по подразбиране използва един процес за всяка заявка за уебстраница. Този процес съдържа единствена нишка за обработка на заявката и това е единствената нишка, която може да използва PHP скрипта.
Node.js от друга страна използва един процес с множество нишки за обработка на заявки. Тези нишки са създадени от Node.js за да могат да обработват заявки едновременно, като всеки потребителски заявка се обработва от отделна нишка.
В PHP може да се конфигурира използването на множество нишки в рамките на един процес, като това изисква допълнителна конфигурация. В Node.js, множеството нишки е вградено в ядрото на приложението и не изисква допълнителна конфигурация.
Когато говорим за Node.js като "еднонишкова система", ние се отнасяме до факта, че Node.js използва един процес с множество нишки, като главната нишка (или "event loop") обработва всички заявки за входящи събития. Този процес обикновено се нарича "мултиплексиращ сървър" (multiplexing server), тъй като той работи по начин, който позволява на една нишка да обработва множество заявки едновременно.
Системата на Node.js е базирана на асинхронни събития и входящи потоци. Когато приложението срещне асинхронна операция (например извикване на API), то не блокира изпълнението на главната нишка, а вместо това подава задачата към подходяща нишка в пула от нишки, която изпълнява операцията асинхронно. След това главната нишка продължава да обработва други заявки, докато асинхронната операция не завърши и не бъде върнат резултатът от нея.
Така Node.js постига ефективност в обработката на множество заявки едновременно, като използва единствено един процес и пул от нишки. Това го прави подходящо за създаване на мащабируеми и бързи уеб приложения.
Въпреки че Node.js не е еднонишкова система в строгия смисъл на думата, главната му нишка обработва много заявки едновременно, като се грижи за превключването между тях. Това го прави "еднонишкова" от гледна точка на програмирането, тъй като програмистът може да се фокусира върху една нишка за обработка на всички заявки в системата.
Причината, че когато един потребител смени стойността на променлива в NodeJS и тя се вижда променена за всички потребители е че е едно-процесова система ли?
Да, причината е свързана с това, че Node.js е еднопроцесова система, която работи в една нишка. Това означава, че всички заявки се обработват от един единствен процес и нишка, който изпълнява JavaScript кода.
Така когато един потребител промени стойността на променлива в кода, тази стойност се променя за всички потребители, защото те работят в рамките на същия процес и нишка. В PHP, от друга страна, всеки потребител работи в рамките на отделен процес или нишка, което означава, че промените в променливите са видими само за конкретния потребител, който ги е направил.
Да, в Node.js е важно да се внимава при дефинирането на променливи, защото те са видими за всички потребители в рамките на един процес и нишка. Ако не се внимава, може да има конфликти при работа с променливите между различни потребители.
Затова, е добра практика да се използват локални променливи в рамките на функции, които не са достъпни извън тях, и да се използва правилно затваряне на обхвата на променливите, за да не се вмешващи с други части от кода. Това помага да се избегнат потенциални проблеми с променливите, когато работим с Node.js приложения.
Многонишковото програмиране е начинът на програмиране, при който се използват множество нишки (threads), за да се изпълняват едновременно няколко задачи в една програма. Това може да се постигне чрез създаването на нишки, които могат да работят паралелно или конкурентно в рамките на една програма.
Предимствата на многонишковото програмиране са, че могат да се постигнат по-големи нива на паралелизъм и ефективност в използването на ресурсите на компютъра. Така програмата може да се изпълнява по-бързо и да обработва повече заявки едновременно.
Някои от недостатъците на многонишковото програмиране включват по-сложна управление на паметта и синхронизация между нишките, което може да доведе до грешки и конфликти при обработка на данни. Затова е важно да се има предвид тези фактори при разработката на многонишкови приложения.
Примери за езици за многонишково програмиране са Java, C#, Python с threading модула, Go и Rust. В PHP, многонишковото програмиране може да се постигне с използване на pthreads модула или други библиотеки.