لو أنت مهتم بال concurrency بشكل عام ... مش شرط java concurrency ... أنصحك تبص على اللينك ده
openjdk.java.net
بيتكلم بشكل جميل و مبسط على مدرستين موجودتين على الساحه
مدرسة thread-per-thread (زي جافا و golang و غيرهم )
و مدرسة ال thread-sharing (زي .net -مؤخرا؟- و js )
openjdk.java.net
بيتكلم بشكل جميل و مبسط على مدرستين موجودتين على الساحه
مدرسة thread-per-thread (زي جافا و golang و غيرهم )
و مدرسة ال thread-sharing (زي .net -مؤخرا؟- و js )
المقال في البداية بيأصل للفرق بين ال latency و ال throughput و إزاي إننا نقدر نزود ال throughput في ظل ثبات ال latency عن طريق ال concurrency (يبدو أن هناك قانون لكده: Little's law)
و بيتكلم عن اتجاه كتير من اللغات حاليا لل thread-sharing model (أعتقد ال js واحده من الرواد هنا)
و بيتكلم عن اتجاه كتير من اللغات حاليا لل thread-sharing model (أعتقد ال js واحده من الرواد هنا)
و أن دي طريقة للإستفاده القصوى من ال hardware resources الموجوده ... على عكس ال thread-per-request اللي مش بتقدر تستغل إمكانيات ال hardware نتيجة لمحدودية ال scalability لل OS threads ... برغم من إن ال resources من cpu و غيره بتكون متاحه ...
و بعد كده بيتكلم عن ال Virtual Threads و هي طريقة للأستفاده من إمكانيات ال hw بالطريقة القصوى عن طريقة multiplexing أو ال M:N model ..
بإننا نقدر نشغل آلاف ( أو ملايين) من ال virtual threads ... بعدد قليل جدا من ال os threads ... (حاجه أشبه باللي معمول بيه في golang )
بإننا نقدر نشغل آلاف ( أو ملايين) من ال virtual threads ... بعدد قليل جدا من ال os threads ... (حاجه أشبه باللي معمول بيه في golang )
من أهم الأجزاء في المقال لما أتكلم عن ليه الجافا معملتش زي الناس التانيه و راحت ل thread-sharing ( أو بيسمى بال async model) أو إستخدام async-await ...
لعدة أسباب مذكوره في آخر المقال تحت عنوان فرعي "Alternatives"
لعدة أسباب مذكوره في آخر المقال تحت عنوان فرعي "Alternatives"
و بيتكلم برضه - و لو أنت مهتم في الجافا - عن تغيرات ال API اللي هتكون موجوده و التغيرات في العقلية اللي المبرمجين محتاجين يعتنقوها ... فمثلا مبرمجين الجافا ( و غيرهم) من سنين بيستخدم ال thread-pools ... دلوقتي محتاجين يوقفو التفكير بالشكل ده و ينسو تماما ال thread-pooling
يعني زمان كان bad practice إنك تنشأ thread لما تحتاج بدون الرجوع ل thread pool ....
مع ال virtual threads العكس تماما .. كل ما تحتاج thread أنشأ واحد و متعملش reuse من thread pool موجود ...
مع ال virtual threads العكس تماما .. كل ما تحتاج thread أنشأ واحد و متعملش reuse من thread pool موجود ...
تصحيح
thread-per-request*
thread-per-request*
جاري تحميل الاقتراحات...