مقارنة السرعة بين أشهر التقنيات ⚡️🚀 | Node.js 🟢 vs Go 🔵 (Node Clusters , Go Routines)
Вставка
- Опубліковано 8 лют 2025
- 🎓 كورس بريميوم لتعلم MERN Full-Stack
🔥 احصل على خصم 30% خاص لمتابعي يحيى تك!
yehiatech.stor...
---
رابط كورس React في 90 دقيقة:
• كورس أساسيات رياكت في...
---
تابعوني ومتنسوش تعملوا Like وSubcribe لو مش عاملين.
وشاركوني بآراكم في الكومنتات.
===
أنا يحيى العربي مهندس برمجيات شغال بقالي أكتر من 10 سنين في المجال. هدفي في الفيديوهات اللي بنزلها اني انشر الوعي البرمجي وانقلكم خبرتي وتجاربي في السوق عشان تستفيدوا منها ومتكرروش نفس الاخطاء.
وبتمنى التوفيق للجميع
===
صفحة الانستجرام
/ yehia.tech
عايزين مقارنة بين node js و c#
C# طبعاً
بعد ما شرحت الفرق بين ال single وال multi threading مش قادر امسك ايدي عن اني اديك لايك عالشرح الجميل البسيط جدا ده
اشكرك وطبعا فيه شرح افضل وامثلة اخرى استفدت منها من رأي الناس في الكومنتات هراعي ذكرها في فيديوهات قادمة باذن الله .. وفقتم
محتوى عربي نادر وجميل جدا 🤍🤍
سلمت يداك يا استاذ 🤍🤍
انشالله إلى الاعلى🤍🤍
شكراً على المحتوي الممتاز ده.. ربنا يحفظك ويوفقك
اعتقد كان النتائج هتكون اوضح و أعدل لو كانت العمليات التي تحتاج معالجة أكثر واكبر
احسنت ،جزاك الله خيرا وربنا يبارك فيك
ممكن تعمل multi thread في node js لو استخدمت ال worker thread
Go Vs. C# Vs. JAVA ممكن مقارنة بينهم
ان شاء الله هخبص ٣ثانوي واتعلم البرمجه الله المستعان😊
personally i love having php as my main backend with laravel, react as my frontend; and when i need heavy computations i write a seperate service in go, or for ML or ai stuff a service in python
i love the batteries included with laravel and love having react on the front, and also the performance & simplicity of go
100% agree .. Laravel is on a different level of productivity (similar to Ruby on Rails) .. it gets things done efficiently!
@@yehiatech indeed, especially when using inertia js, it makes it insanely easy to build web apps, it makes life easier, and the fun part is that regardless if you are using inertia or not your api is exactly the same only the response changes, if you want to return normal json you can just set a header in the request & check the header before returning the response....
Go is also really nice perfect for writing heavy computation apis, and the syntax is very easy & simple most of your types are inferred...
شكراً الك على المعلومات
فيدو ممتاز جدا
ما تشرحلنا sql + PostgreSQL فى فيديوا ولا اتنين يا بشمهندس وياريت يكون الشرح على لينكس مش ويندوز
جزاك الله خيرا
Great comparison, thx
عاوزين مقارنة بين بايثون و جو
للغه go ممكن ان تؤدي فكره async باستخدام channels من خلال نظام goroutines
السلام عليكم, شرح حضرتك جميل جدا و احترافي. اسمحلي اضيف تعليق بسيط.
1- شرح حضرتك لشخص واحد شغال لوحده و بيعمل كل خطوه و يستناها تخلص عشان يروح للخطوه ال بعديها دا single thread synchronous execution.
2- شرح حضرتك لشخص واحد شغال لوحده و بيبدل بين تنفيذ الخطاوات بدل ما يستنه كل وحده تخلص دا single thread Asynchronous execution.
3- Multi threading هو ال اكتر من شخص بيعمل المهمه في نفس الوقت .
شكرا جدا لحضرتك و اتمنه نشوف فيديو مقارنه بين .net و Go في سرعه ال Api.
و السلام عليكم
شكرا ليك على التعليق 🌹🚀
وفي تحسين للامثلة في الفيديوهات القادمة باذن الله.
هو في حاجه غلط لو قولنا مالتي ثريد يبقي parallel وشرحك يا هندسه معناه كونكرنت فا مش هيبدأ في الثريد لأنه لو الشغل اتوزع ع كزا ثريد كدا توازي مش كونكرنت فا لو نفس الشخص مقصود بيه ثريد واحد وقام بكدا مهمه ده معناه كونكرنت لو المهمه انقسمت علي شخصين يعني توازي بغض النظر عن الاعتماد علي بعضهم من عدمه
Great video
لو تم توليد ارقام عشوائية في ملف txt وكلا اللغتين يقرأوا نفس قائمة الارقام تكون المقارنة أكثر دقة
16:10
Using multiple goroutines in Go doesn't necessarily mean the program is multithreaded
دي حقيقة هو كدة عمل concurrency بس مش parallelism
Agree, this is absolutely accurate! To add more detail, we can explicitly set runtime.GOMAXPROCS(n) to a value higher than 1 (by default, it matches the number of available CPU cores since Go 1.5).
That said, my key takeaway here is: "Goroutines enable us to achieve concurrent execution and effectively utilize multiple threads when needed."
Thanks for your comment! 🌹
يحيى ... محتاجة اعرف عن linux اقدر من خلاله اشتغل ع الالعاب الاستراتيجية ؟؟
ممكن تضيف elixir للمقارنات دي؟
بس نود يتفوق من ناحية هندل اكثر من ركوست بنفس الوقت بسبب non blocking i/o
misleading
أكيد go أسرع
لكن
spinning up a node worker is not cheap
لو ال process كانت heavier
بالتأكيد ال multi-processing هيخليها أسرع ب multiplier ال cores مش أبطأ أبدا حتي مع node
يا اخي العرب يسوٌن الحبه كبه ، "خير الكلام ما قل ودل"
فيما يلي مجموعة من التصحيحات والتنبيهات على أبرز التعريفات أو المفاهيم التي عرضها صاحب الفيديو، مع توضيح المفهوم الصحيح لكل منها:
---
1. تعريف Single-threading
ما قيل في الفيديو:
صوّر صاحب الفيديو الـSingle-threading على أنه تنفيذ خطوات متتالية بشكلٍ “سطحي” فقط، دون توضيح كافٍ لفكرة وجود خيط واحد مسؤول عن كل المهام.
التصحيح:
Single-threading يعني وجود خيط تنفيذ واحد (Thread) داخل عملية واحدة (Process). هذا الخيط مسؤول عن تنفيذ التعليمات جميعها.
في الأنظمة التي تعتمد أسلوب Single-thread (مثل Node.js)، يمكن استخدام آلية الحدث غير المتزامن (Event Loop) للتعامل مع المهام غير المحسوبة (مثل I/O) بشكلٍ غير حاجز (Non-blocking)، لكن يظل هناك خيط وحيد مسؤول عن إدارة جميع المهام.
إذا حصلت مهمة حسابية ثقيلة (CPU-bound) على هذا الخيط، سيصبح الخيط محجوبًا (Blocked) إلى أن ينتهي، مما يعطّل المهام الأخرى.
---
2. تعريف Multi-threading
ما قيل في الفيديو:
قُدِّم الـMulti-threading وكأنه مجرد “تبديل سريع” بين الخطوات أثناء تنفيذها من قبل شخص واحد، في حين أشار المثال إلى وجود نفس الشخص يقوم بمهام متعددة.
التصحيح:
Multi-threading يعني وجود عدة خيوط (Threads) داخل نفس العملية (Single Process)، تشارك جميعها نفس مساحة الذاكرة.
يمكن لهذه الخيوط أن تعمل بشكلٍ متزامن (Concurrent)، بل ومتوازي (Parallel) فعليًّا إذا توفرت أكثر من نواة (Core) في المعالج.
في المثال العملي (مثل تحضير أكثر من مهمة بالتوازي)، من الأدق القول إن “كل خيط هو بمثابة شخص مستقل” داخل نفس المكان (الذاكرة المشتركة)، وليس شخصًا واحدًا يقوم بالتبديل.
---
3. تعريف Multi-processing
ما قيل في الفيديو:
جرى تصوير الـMulti-processing على أنه دائمًا أبطأ، لأنك تحتاج إلى تقسيم للمهام وإرسال واستقبال النتائج.
التصحيح:
Multi-processing يعني تشغيل عدة عمليات (Processes) منفصلة، لكل عملية مساحة الذاكرة الخاصة بها.
يتواصل كل Process مع الآخر عادة عبر قنوات اتصال بين العمليات (IPC)، مثل الرسائل أو القنوات المشتركة، وهذا يضيف بعض التكلفة (Overhead).
قد يكون Multi-processing مفيدًا جدًا عند توزيع مهام حوسبة ثقيلة على عدة أنوية (Cores) بمعزل عن بعضها، خصوصًا في لغات أو بيئات لا تدعم تعدد الخيوط بشكل فعّال أو عند الحاجة لعزل أمني (Sandboxing).
صحيح أن هناك تكلفة للتواصل بين العمليات، لكنها ليست بالضرورة أبطأ دائمًا، بل تعتمد على نوع المهمة. في بعض التطبيقات (مثل معالجة الصور الضخمة أو تحويل الفيديو)، قد يكون Multi-processing أسرع من Single-thread أو Multi-thread في عملية واحدة، بشرط إدارة الاتصالات والموارد بكفاءة.
---
4. الخلط بين المفاهيم: Concurrency vs Parallelism
ما قيل في الفيديو:
الخلط بين فكرة “تنفيذ المهام بالتزامن” (Concurrency) وبين “تنفيذها بالتوازي” (Parallelism). إذ أعطى صاحب الفيديو مثال “الشخص الذي يبدل بين المهام بسرعة”، وهذا أقرب إلى Concurrency منه إلى Parallelism.
التصحيح:
Concurrency: قدرة النظام على التعامل مع مهام متعددة في نفس الفترة الزمنية، ولو عن طريق التبديل السريع بينها على خيط واحد أو أكثر.
Parallelism: تنفيذ مهام متعددة في نفس اللحظة فعليًّا على أكثر من نواة معالجة، أي كل نواة تنفذ خيطًا (Thread) أو عملية (Process) بشكل متوازٍ حقيقي.
مثال “الشخص الواحد يبدل بين المهام” هو Concurrency (لا يوجد إلا شخص واحد)، بينما “عدة أشخاص يعملون بالتوازي” هو Parallelism.
---
5. الخلاصة والتصحيح الشامل
1. Single-thread:
خيط واحد فقط ينفذ كل المهام.
مفيد للمهام غير الحاسوبية الثقيلة (مثل I/O) مع وجود Event Loop (كما في Node.js).
يعاني جدًا عند وجود مهام حسابية كثيفة (CPU-bound)، لأن الخيط يتعطل.
2. Multi-threading:
عدة خيوط تتشارك نفس الذاكرة داخل عملية واحدة.
جيد للمهام الحسابية الكثيفة (Parallelism) إذا دعم العتاد ذلك.
يحتاج لإدارة تزامن (Synchronization) لحماية البيانات المشتركة.
3. Multi-processing:
عدة عمليات، لكل واحدة مساحة ذاكرة مستقلة.
مفيد لتوزيع الحسابات الضخمة أو عند الحاجة لعزل الأمان.
هناك تكلفة إضافية للتواصل بين العمليات.
4. Concurrency vs. Parallelism:
Concurrency: التعامل مع مهام متعددة (قد يكون عبر خيط واحد أو عدة خيوط) عن طريق التبديل السريع.
Parallelism: تنفيذ عدة مهام فعليًّا في الوقت نفسه عبر أنوية متعددة.
5. اختيار النموذج المناسب:
يختلف باختلاف نوع التطبيق:
تطبيقات I/O مثل السيرفرات التي تتعامل مع طلبات كثيرة “خفيفة الحساب” تناسبها بيئات Single-thread + Event Loop (مثل Node.js).
تطبيقات الحوسبة المكثفة (مثل الحسابات المالية أو العلمية) تناسبها لغات تدعم الـMulti-threading أو الـMulti-processing بكفاءة (مثل Go أو Rust).
---
باختصار
الأخطاء في الفيديو تمثّلت في:
1. حصر Single-thread بمعنى “خطوات متتالية”، دون توضيح أنّ هنالك خيطًا وحيدًا ينفذ كل شيء، ما يسبب حجبًا (Blocking) في المهام الثقيلة.
2. توصيف Multi-threading كأنه مجرد شخص واحد يبدل المهام، والصحيح أنه عدة خيوط (بمثابة عدة أشخاص) تعمل في نفس الذاكرة.
3. تصوير Multi-processing كأنه دائمًا أبطأ، بينما الصحيح أنه يعتمد على طبيعة المهمة.
4. خلط بين مفهومي Concurrency وParallelism.
هذه هي أبرز النقاط التي تحتاج إلى إعادة صياغة أو تصحيح لضمان دقة المفاهيم.
Node.js vs python please
ينفع حضرتك تعمل كورس C#
يا هندسة اليوتيوب مليان محتوي عربي خد اي واحد
مقارنة مع Rust
Rust تعتبر low level
مفيش مقارنة اصلا مع دول ممكن علشان تبقى مقارنة عادلة تبقى مع zig مثلا
لا ، لغة Rust ليست low-level language @@aliadel1723
مساء الخير ❤استاذ يحيى أنا حاسبات و معلومات و هتخصص و الكلية فيها ثلاث تخصصات ايه أفضلهم من حيث الشغل و اعلى راتب
1 داتا ساينس
2 روبوتكس
3 مالتي ميديا
و انا ميال لكله تنصحني بأيه ❤
المشكلة البسيطة في multi processing انو سلاح دو حدين انك تبلش process جديدة تحتاج اشياء كتيرة و المشكلة التانية الي مدشملة node js في مقارنتك هي فكرة استخدام slice لازم عشان تكون المقارنة عادلة تستخدم نفس فكرة go و هي مشاركة الميموري (ممكنة و بإمكانك تستخدم shairdArrayBuffer)
في نقطة تانية هي استخدامك ل reduce في node js المشكلة هو انو callback الخاص ب reduce بيتم المنادات عليه على كل element في array تخيل مليون function call لو الcall الواحد ب 0.01us فعندك (1000000*0.01us)=10000us=10ms بس في function calls 😂 طبعا 0.01 مجرد متال لا اكتر بس الفكرة هي الاهم انو node js مضلوم في المقارنة هادي و لا انكر ان go اسرع لعدة اسباب منها compilation و static types ولاكن هادا لا يلغي كون node js اسرع من الي في المقارنة وشكرا😊
حلوه منك يا مهندس😂 2:00
😂😁
ممكن تستخدم bun بدل nodejs
2:00
ابعد عن صاحبك منعش يا يحيى 😂😂
😂😂😁😁
انا دلوقتي كنت عاوز اعمل موقع LMS ويكون مربوط ب AI Model
عاوز اعرف ايه ال frameworks المناسبة للمشروع دا
وانا عارف لو قلت react ولا angular هتبقى مقارنة خاطئة عشان هقارنهم في ايه بالظبط
ف المهم بالنسبالي جزء back end اكتر هيبقى افضل مع Node JS ولا Django
وخاصة انا هربط الموقع ب AI Model عشان كدا عاوز اعرف ايه المفيد في الجزء دا
وهل الكورس بتاع حضرتك هيكون كافي انه يأهلني إني اقدر اكمل بعده ولا لأ؟ وعارف انه سؤال غريب ذوقياً ومن اتجاة Technical كمان
بس انا بجد مشتت خالص في موضوع المصادر وكان ليا تجربة تبع تدريب الجامعة في الاجازة اللي فاتت خليتني اخاف من node js عشان مكنتش جاهز كفاية في js وكمان وقت التدريب كان 40 ساعة بس
وانا بحاول اخلي وقتي يكون لل ai اكتر عشان دا مشروع تخرج
فعاوز اعرف امشي ازاي في الموضوع دا حتى لو بشكل مبسط
وشكراً 🤍
اول مره استخدمت go كنت مستغرب فشخ اي الوحده دي 😂 انا اخر حاجه كنت اعرفها ال ms 🤦
4:36 اظن انك خلطت بين ال Multithreading , Aysnchronous
هو الفكرة ان الAsync ينفع يبقى شغال على Single Thread او Multi Thread بنفس المبدأ والمفهوم بتاعه .. فهي نفس الفكرة والمثال اللي انا شرحتها بس كان مفترض مني اوضح النقطة ده اكتر.
شكرا على التنبيه للجزئية ده 🌹
@@yehiatech
هو احنا ممكن نظبط المثال اكتر بأن
ال async هو مطبخ واحد سواء طباخ او اكتر
ال multithreading أكتر من طباخ في نفس المطبخ
ال multiprocessing أكتر من مطبخ
يا هندسه معلش انا كنت شاري الكورس بتاع حضرتك لما كان عليه اوفر قبل رأس السنة الي هو اوفر المشتركين باجي دلوقتي اخش على يوديمي مش بلاقيه هو كان ليميتيد و لا ايه المشكله
مهندس يحيا يمكن الايميل عايز اتواصل معاك عشان شغل
bun v 1.2 better so so far
Why you're not using BunJs
Will do it in another comparison
GO Vs. Python
يحيى بحاول اشتري الدورة من يودمي بس مش نازل عليها خصم ال30% ليش؟
ده لينك الخصم
yehiatech.store/mern
🤣
لكن لاتنسى انه يمكن تحسين وتقليل زمن الاستجابة بطرق مختلفة، في الفترة الاخيرة تحسن اداء الجافاسكربت بشكل افضل وظهر عندك بون من جافا سكربت سرعته رهيبة وصارت جافا سكربت قريبة من جو نوعاما ومازالت في تحسن، لكن تبقى لغة جو في الاداء والسرعة والتزامن وتعدد المهام الاولى وخاصة في الميكروسيرفيسس والانظمة الموزعة..مشكور على المقارنة.
نعم صحيح .. لذلك انا كنت دقيق وكتبت Node.js في المقارنة حتى لا يختلط الامر على الناس انها مقارنة عامة.
شكرا على الاضافة وبالتوفيق لكل خير 🌹
انت إنسان كويس جداً وكل ما اكون شغال واحب استمع ل بود كاست جنبي بشغل فيديوهاتك، لكن مع احترامي محتاج اعدل اكتر من معلومه.
اولا المثال الخاص بتحضير الأكل ده مش مناسب، كمان فعليا الفرق بين ال threads وال processes في أنظمة التشغيل بتخلتف.
اولا ال multi process ده خاصيه في نظام التشغيل بيحققها بأن ال process loader ياخد ال process ويحطها في الرام ومعاها "sections" الخاصة بالبروسيس بما فيهم ال dynamic linkage table, وبيقوم نظام التشغيل بالتبدبل بين ال process المختلفه بأنه يحفظ ال context ل بروسيس ويعمل ليها suspend و يروح ل التانيه سواء المعالج multi core او لا، لكن في حالة انه كان multi core وليكن two cores في الحاله دي بيكون two processes شغالين at a time.
اي مشكله بتحصل من بروسيس وتبعت exception سواء ثاني او ثالث ل ال CPU نظام التشغيل بيعمل halt ليها كلها.
فا لو انا عندي بروجيكت multi process و process واحده حصل فيها مشكله هي فقط اللي بيحصل ليها halting بدون ما يأثر علي باقي ال processes
اما ال multi threaded بتكون process واحده ايضا ال loader بيحدد لكل thread affinity level زيها زي ال بروسيس وحتي كمان ليها stack section منفصل "اذا اردت" لكن
١- كل ال threads ليهم access علي كامل ال process section
٢- اي thread تعمل general fault exception علي ال CPU البروسيس كلها بتقف بما فيهم باقي ال threads اللي تحت نفس ال process.
اما طريقه توزيع التشغيل علي ال cores نفس تماما ال multi process مع تحديد ال affinity level زي ما تحب وتطلب من ال OS.
ثاني موضوع بما أني مش مبرمج ويب لكن علي حد معرفتي ان node js multithreaded ده اللي قرأته من ال documentation الخاص بيهم من مدة طويله لو ذاكرتي ما خانتنيش.
اخر نقطة وهي أن ال coroutines شيء و ال multithreading شيء اخر تماما.
ال coroutines مش multithreaded ال coroutine كأنك بتروح ل داله تعمل ليها call وتخليها وليكن تشتغل عند نصها وترجع نتيجه وبعد كده بنفسك تعمل ليها call تاني وتكمل النص الثاني، بمعني اخر كأن عندك دالتين عملت call ل الاولي اخدت منها نتيجه وبعد كده عملت call ل الداله التانيه تاخد منها نتيجه تانيه، الفرق إننا أحيانا بنفضل نحط الدالتين في داله واحده لما يكون النصف الثاني بيخرج نتيجه معتمده علي النصف الأول، أيضا بنسميها state machine، لان داخل ال coroutine function بيكون فيه زي متغير بيحتفظ بقيمه تحددلي المكان اللي الداله وقفت عندها، عشان لما اعمل call ليها تاني تعرف هاتشتغل من اي نقطه.
أيضا فيه فرق بين ال multithreading وال coroutines و حاجه إسمها future اللي تقدر تاخدها من promise شغال في thread آخر عشان تاخد signal ل الانتهاء او نتيجه حاصل ليها ready، وممكن تعمل ليهم implementation بنفسك باستخدام ال condition variables عشان تعمل broadcast ل النتيجة.
تحياتي ليك وبالتوفيق ليك جدااا وبحب محتواك.
شكرا جدا على الاضافة والمشاركة .. اضافة ثرية وانا اقرأ واستمتع بهذه الكومنتات وبتضيفلي وجهات نظر وبعد جديد للمواضيع .. حيث ان كل واحد بيتعلم اشياء ويسمع من وجهات نظر مختلفة .. وفقنا الله واياكم لكل خير ❤️🌹
@yehiatech
متشكر جدااااا علي ردك المتوقع من إنسان راقي وذو خبره كبيره في المجال ♥️
إحنا دائماً هانفضل نتعلم لآخر لحظة Bjarne Stroustrup بنفسه لما اتسأل في احد المؤتمرات عن مستواه في لغة البرمجة اللي هو مؤسس ليها "C++" قال 7/10 وعمري ما قابلت شخص عملاق بلقب عالم في شركة كبيره زي إنتل او غيره وكان بيقيم مستواه اكتر من 80% وفي مجال محدود حتي.
بالتالي دائما هانفضل نتعلم من بعض زي ما أنا بتعلم من فيديوهاتك.
إلي الأفضل دايما وبالتوفيق ليك.
محتوى عربي نادر وجميل جدا 🤍🤍
سلمت يداك يا استاذ 🤍🤍
انشالله إلى الاعلى🤍🤍
محتوى عربي نادر وجميل جدا 🤍🤍
سلمت يداك يا استاذ 🤍🤍
انشالله إلى الاعلى🤍🤍
محتوى عربي نادر وجميل جدا 🤍🤍
سلمت يداك يا استاذ 🤍🤍
انشالله إلى الاعلى🤍🤍