✴️صانع القهوه ممكن يجهز أكتر من كوب في نفس الوقت (Concurrency)
✴️طب لو حابب تعمل scale للموضوع ... ممكن تجيب مكنة قهوه تانيه و تجيب حد تاني يشتغل عليها (Parallelism)
✴️طب لو حابب تعمل scale للموضوع ... ممكن تجيب مكنة قهوه تانيه و تجيب حد تاني يشتغل عليها (Parallelism)
و في العادة ال Concurrency أفضل من ال Parallelism لأنها بتستغل الموارد بشكل أفضل
ففي single core machines ... متقدرش يكون عندك Parallelism .. لكن ممكن يكون عندك Concurrency
ففي single core machines ... متقدرش يكون عندك Parallelism .. لكن ممكن يكون عندك Concurrency
و ال Concurrency بتم عن طريق ال multi threading ....
وإذا جينا نتكلم عن ال multi threading ... فأي threads بتتشغل في نظام واحد .. بتحتاج تتواصل مع بعضها
و التواصل ده ممكن يتم بطريقتين ...
و
وإذا جينا نتكلم عن ال multi threading ... فأي threads بتتشغل في نظام واحد .. بتحتاج تتواصل مع بعضها
و التواصل ده ممكن يتم بطريقتين ...
و
الطريقة الأولى و هي ال shared-memory model (زي في ال Java)
و في الطريقة دي لازم يكون فيه آليات لل synchronization (أو التزامن) بين ال threads ...
زي ال locks (و أنواعه سواء reentrant أو لا) و semaphore و ال mutex ...
و ده محتاج فهم و إلا مشاكل غير متوقعه ممكن تحصل 🙄
و في الطريقة دي لازم يكون فيه آليات لل synchronization (أو التزامن) بين ال threads ...
زي ال locks (و أنواعه سواء reentrant أو لا) و semaphore و ال mutex ...
و ده محتاج فهم و إلا مشاكل غير متوقعه ممكن تحصل 🙄
الطريقة التانيه اللي بتستخدم في ال communication بين ال threads هي ال message passing ..
و ممكن ال message passing هنا يتم عن طريقة channels ... أو عن طريقة mailbox لكل thread (actor)
و ممكن ال message passing هنا يتم عن طريقة channels ... أو عن طريقة mailbox لكل thread (actor)
أولا ال channel-based message passing ... و فيها بيكون فيه channels بتكون هي حلقة الوصل بين ال threads و اللي بيتم أن ال threads بترسل لبعضها رسائل على ال channel
و ال channel بتختلف من لغة للغة... و ممكن يكون ليها حجم و نوع بيانات
و لغة golang بتستخدم الطريقة
و ال channel بتختلف من لغة للغة... و ممكن يكون ليها حجم و نوع بيانات
و لغة golang بتستخدم الطريقة
ثانيا ال mailbox .. و فيها بيكون كل thread ليه mailbox.. و بيتم التواصل بينهم على عنوان ال mailbox .. و كل thread بيقرأ الرسايل من ال mailbox و ممكن يرد عليها ...
لغة erlang و scala akka framework بيستخدمو الطريقة دي
لغة erlang و scala akka framework بيستخدمو الطريقة دي
الطريقة التانيه (message passing) دي أكثر أمانا من الطريقة الأولى (shared memory) ...
(لكن لا تخلو من المشاكل لو أستخدمت بدون فهم ... مثلا لو thread Aمنتظر رساله و ال thread B لن يرسل هذه الرساله )
(لكن لا تخلو من المشاكل لو أستخدمت بدون فهم ... مثلا لو thread Aمنتظر رساله و ال thread B لن يرسل هذه الرساله )
جاري تحميل الاقتراحات...