• 0
harrrrpo

درس: How To Thread In Php

سؤال

احدى المشكلات المعروفة فى الPHP هى أنة لا يدعم الMulti-Threading وهو ما حذا الكثيرين الى محاوله اضافة هذة الخاصية بطريقة أو أخرى وهناك العديد من المحاولات والتالى هى محاولتى الشخصية التى سأحاول توضيحها فيما يلى و أنتظر ردودكم و اقتراحاتكم :-

Multi-Threading:- أبسط تعريف يمكن قولة هو وجود أكثر من مسار للتنفيذ تسير بشكل متوازى لا متسلسل وهو ما يعطى سلاسة و قوة فى الآداء وجودة أعلى فى التفاعل مع المستخدم.

المشكلة هى عدم وجود ذلك فى الPHP بشكل مباشر كما هو الحال مع C# مثلا . فكرتى هنا كانت فى استغلال الAjax وذلك للقيام بتفعيل الThreads والتى ما هى الا PHP Scripts واعطائها مدخلات و مراقبة حالة تنفيذها .

و لتنفيذ ذلك يمكن استخدام Js Class لكتابة الAjax ثم استخدام PHP class كويسيط بين الJs Class و الUser Script انظر الشكل التالى :-

post-110364-1187232767_thumb.jpg

و بداية من هنا كان التنفيذ سهلا و انقسم الى خطوات :

1. Js Class : ويتولى مهمة توليد كائنات الAjax و تم تنفيذة باستخدام أمرى flush,echo . حيث ترسل أكواد javascript ب echo على دفعات و تنفذ كل دفعة بflush (لاقناع المتصفح بتنفيذها ) .

2.PHP Class: و الذى اقتصر دوره على انه Interface مع الJs Class وذلك لتسيل التعامل معة .

الأكواد بالمرفقات أو هنا . وأنتظر بشغف رأيكم و تقيمكم للمحاولة و استفساراتكم.

ملاحظات :-

  • المشروع لسة فى النسخة التجريبية و متوقع الكثير من الأخطاء :blink: .
  • تحتوى الأكواد على أمثلة جيدة لمن أراد الابتداء فى JsOO و Ajax .
  • الأكواد المرفقة ستعمل مع كل المتصفحات تقريبا عدا IE التعديل سهل لمن اراد و ان كان كده أحسن ;) .
  • المثال المرفق مع ال Classes هو مثال بسيط يقوم بتنزيل ملفين على التوالى مع عرض النسبة التى تم تنزيلها بشكل بسيط ( المثال قابل للتنفيذ بطرق أخرى و هنا للايضاح فقط ) و لابد من قراءتة و تعديلة ليعمل معك (تغيير وصلات ) وفى الأغلب سيعمل فى www فى wamp مباشرة مع تفعيل Curl .
  • هناك نقطان أقولهما :-

  • الThreads لا تتوقف بتوقف الScript الرئيسى .
  • يمكن مباصاة مدخلات للScript و أخذ مخرجات منة .

PHPThreader.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

25 إجابة على هذا السؤال .

  • 0

مش ممكن لا مشاركات أو ردور على العموم هناك توضيح أو تكملة للدرس:-

الملفات المرفقة هى :-

AjT.php: هو Js Class الذى ينفذ بالPHP

Threader.php: هو PHP Class الذى يمثل واجهة التعامل مع الJs Class

Bag.php:هو أيضا يتعامل مع Js Class لمعرفة حالة الThread

أما ThreaderExample.phpوDownloader.php هما المثال حيث Downloader.php هو الThread المستعملة

شكرا ...... وأرجو المزيد من التفاعل

تم تعديل بواسطه ASDen
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

سلام عليكم..

ممكن مزيد من توضيح عن Curl

ثانيا كيف ستوظف Ajax في Multi-threading

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

و عليكم السلام ورحمة الله و بركاتة

ممكن مزيد من توضيح عن Curl

الCurl هو أحد أهم الاضافات Extentions فى الPHP , ويستخدم فى فعل كل ما تحلم بة من تواصل مع العالم الخارجى ويكمنك التعرف علية أكثر من هنا و فى المثال استخدمتة فقط فى تنزيل ملف لا بد من تفعيل Curl فى php.ini أو باستخدامwamp

ثانيا كيف ستوظف Ajax في Multi-threading

الفكرة هى الاعتماد على Ajax فى مناداة الThreads وبالتالى تفعيلها و ميزة الAjax هى أنة Asynchronous وبالتالى يتم تنفيذ الThreads على التوازى لا التوالى وبالتالى يكون هناك عدة مسارات للتنفيذ فى وقت واحد و يتحقق Multi-Threading أحد أهم المصادر لتعلم Ajax هو دروسIBM

و شكرا

تم تعديل بواسطه ASDen
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اية الحماس ده كلة ....................... أحبطونى :angry: :angry: :angry:

اخبرونى هل الموضوع صعب ؟ أم هو مش مستاهل حتى التعقيب ؟

و شكرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

رغم تجاهل الأعضاء للموضوع :angry: ................ فانى أواصل توضيحة هنا بقديم مثال أخر وهو عبارة عن Download Manager باستخدام الPHP سمه (PDM) وهو هنا لايقدم الا الشىء الأساسى فى أى Download Manager وهو القابلية لفتح أكثر من Connection فى نفس الوقت مع توضيح الProgress لكل Connection المثال بسيط جدا ولا يحتوى الا على الأساسيات و يستخدم الCurl فى الحصول على جزء معين من الملف حيث :-

PDM.php:هو الScript الأساسى الذى يتعامل مع المستخدم .

PartDownloader.php:هو الThread المستعملة من قبل الScript .

طبعا لابد أن يكون معك الClass حتى يعمل الScript .

التحميل : من هنا

ملحوظة : كيف أضع مرفقات فى الرد السريع ؟ :P

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم...

فيك البركة أخي, مشكورة جهودك بكل ما تحمل هذه الكلمة من معنى

قد يكون الموضوع جديد كما ذكرت لذلك فأتوقع أن الزملاء يستكشفون هذا النمط الحديث من البرمجة (و أنا واحد منهم)....و قريباً الردود و التقييمات التي أتوقع ان تكون رائعة...

مشكور مرة أخرى...أخوك الحكيم

تم تعديل بواسطه phpspider
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ملحوظة : كيف أضع مرفقات فى الرد السريع ؟

لاتوجد طريقة لرفع المرفقات على الرد السريع يجب إستخدام الرد العادي بزر (تعقيب) لرفع المرفقات , ربما تتم إضافتها في نسخ لاحقة من شركة ipb :) وتشكر على الموضوع الجميل الذي جذبني من رابط في توقيعك .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يعطيك العافيه..

الاجاكس هو مستقبل البرمجه

وهو جديد بانسبه لي

post-9138-1187608686_thumb.gif

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخي الكريم لماذا تعمل multithread باستخدام ال ajax يمكن من خلال java bridge في ال php ان تفعل هذا الامر مباشرة

اقرأ عنها في zend في الاغلب.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أولا أشكر الأخوه PHPSpider,HGB,[email protected] على تفاعلهم الرائع .

وأشكر الأخ undefinedmatrix على استفساره العلمى و أرد علية فى بضعة نقاط :-

أخى أتعرف متطلبات عمل هذا ال java bridge على سيرفر انها:-

1.لابد من وجود JVM ويتطلب على Java Extension السيرفر وتكلف هذة الJVM من الذاكرة 64MB

2.لابد من عمل ReCompile للPHP لأن النسخة القياسية لا تفى بالأمر

3. لابد من عمل ReCompile للِِApache أو استخدام طريقة أخرى غير القياسة تعتمد على Sockets

4. حتى مع ما سبق لا يعمل الApache بشكل جيد و يفضل IIS

أى انك بحاجة لسيرفر بفلوس وليس أى سيرفر بفلوس كمان

فى حين أن العمل بتقنية الAjax يجعلة سهل التطبيق و مباشر و على أى سيرفر مجانى أو سيرفر بسيط بفلوس

و شكرا على الرد و بانتظار استفسارات تقنية أخرى

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الجزء الثانى

اضافة الITC و ال Synchronization

تناقشنا فى الجزء الأول عن انشاء الThreads وهنا نضيف بعض الخصائص المهمة لها وهى التخاطب بين هذة الThreads و التزامن فى الوصول للبيانات المشتركة Synchronization

أولا:-Inter Thread Communication(ITC) وهو التخاطب و التواصل بين الThreads وهو ما يضيف لها قوه وأداء أفضل وكانت فكرتى فى ذلك هى استخدام ملف نصى كمخزن يتم تخزين البيانات فية بصورة أقرب الى XML و استخدام String Manipulation فى الحصول على هذة المعلومات بحيث يكون شكل الملف كالتالى :-

|Read=ON|X=1|IN=YES|Working=No|

ثانيا التزامنSynchronization :- وهنا استخدمت فكرة بسيطة وهى غلق القراءة من الملف أثناء الكتابة كنوع من Mutex Synchronization وذلك لضمان وحدة البيانات الواصلة لطالبيها باستخدام الخاصية Read فى الملف .

وبذلك تم تحقيق نوع من Shared Data بين الThreads مما يعلى من التخاطبية و يوسع تفاعلها مع المستخدم.

التحميل من هنا

شكرا ............ و أرجو منكم التواصل و مستعد لسماع أى استفسارات

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

كلامك جميل جدا ودعني اضيف

Multithreading بال ajax توفر لك cpu load يتم عمله علي جهاز ال user لا علي ال server

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

قمت باضافة مثال عبارة عن Web Crawler و هو يقوم بجلب كل ما يصل الية من صفحات فى Domain محدد من Seed يعطى لة

وهو يقوم على فكرة جلب الصفحة ومن ثم استخراج كل ال Links منها وايكال كل Link الى Thread تقوم بتنزيلها و هكذا يدور على كل ما يصل لة

أرجو منكم التجربة و الرد

التحميل : هنا

يرجى تحميل الClasses أيضا لأنى غيرت فى هيكلها

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

انا شايف ان الموضوع ده اكبر من استيعابى و ان كنت حابب انى ادخل فيه

هل فيه مواضيع اخرى تفيدنى كخطوة أولى للموضوع ده ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

thanks for that .. i will keep track

asap

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ترددت قبل طرح هذا و لكنى سأفعل , ما فى الأمر أن الClass تم قبولة فى موقع الPHPClasses و دخل مسابقة الinnovation

حيث يتم عمل تصويت لاختيار أفضلهم خلال هذا الشهر وما فى الموضوع أنى أرت ممن تابع معى الClass أن يقارنة بباقى

الموجودين ثم يختار

وأنا هنا لا أجمع أصوات قبل أن يقولها أحد فأنا لم أفتح موضوع جديد و أخاطب متابعى الموضوع فقط

------------------------------------------------------

نعود للClass قمت باضافة شىء جديد أرجو أن تجربوة وهو نوع جديد من التخاطب بين الThreads عن طريق

MySql Heap Engine وهو ما يجعلة

1. أسرع لأنة فى الMemory

2. يعطى فرصة لThreads فى أكتر من Server للتواصل

التحميل هنا

التصويت هنا

تم تعديل بواسطه ASDen
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الف الف مبررووك :) ومزيدا من النجاح ان شاء الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اكتر من رائع ASDen

لكن سؤال هل فكرت فى دعم ال threading من خلال كتابة C- Extension ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لكن سؤال هل فكرت فى دعم ال threading من خلال كتابة C- Extension ؟

فكرت طبعا بس .... موضوع زى كده مش سهل أبدا

الخبايا و المشاكل اللى بتظهر فى تطبيق Threading Model مش بسيطة زى ال Sync. و أخواتها

الفكرة بتاعت المشروع كانت استخدام Threading Model جاهز و مكتوب ومجرب زى بتاع ال Server أو ال Browser والاستفادة منة فى ال PHP

اللى ممكن يكون من السهل تحويلة الى C Extension هو الكلاس السابق :lol: بحيث يكون التغليف نضيف وسريع والتعامل الخارجى أسهل

----

شىء اخر باذن الله قريبا ساطرح Class اخر لل Threading بجانب ال Sockets و ال Ajax يعتمد على نظام التشغيل هذة المرة بدلا من ال WebServer

و الفكرة ليكون صالح للاستخدام مع PHP/CLI

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بصراحة انا لو كان مطلوب منى المشروع دا كانت اول خطوة عملتها انى اكتب Extensions لل PHP اغلف فيها ال threading APIs فكدا مش هيكون فى مشاكل ولاإيه ؟ لأنك كل اللى عملته تغليف لل APIs بتاعت الthreading واستدعيتها فى ال PHP ؟

على كل حال الفكرة زى ماقلت ممتازة ومستنين الإصدار الجاى ^^

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشاكل ولاإيه ؟

لا هو فية اية :lol:

وخصوصا لو عايو تشغل ال PHP تحت ال Apache أو أى Webserver تانى

مثلا دلوقتى انت محتاج Shared Memory أو Sync فى ال Resources فعملية ضمان ان ده ميعملش مشاكل مع ال Apache ومع تحكماتة على ال PHP Process

وازاى ميعديش المسموح بية وفى نفس الوقت ميحصلوش Crash ولو Thread حصل فيها مشكلة تعرف تعزلها ده طبعا مع توفير خصائص و مزايا ال Threading التقليدية

فكرة علية ال Threads جوه ال PHP Process جوه ال Apache فعلا شيقة بس مش سهلة ^_^

اه نسيت شىء ظريف جدا كمان فية عدد محترم من ال PHP Extensions مش Thread-Safe أصلا :P

شىء أخير فعلا فى مشروع Extension اسمة Threads بس حتى الان Extremely UnStable

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

واضح ان هى دى المشكلة انى مش كنت حاطط الآباتشى فى الحسابات

بالتوفيق ASDen

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ورحمه الله وبركاتة ,

الحمد لله انتهيت من ال PHPThreader 1.6

النسخة متاحة الان للتحميل اما

من ال SF هنا : http://sourceforge.net/project/showfile ... _id=203377

أو من ال PHPClasses هنا : http://www.phpclasses.org/browse/package/4082.html

---

الخصائص الجديدة / الاضافات :-

1) توثيق كامل للكلاس هنا : http://ajphpth.sourceforge.net

2) طريقة / كلاس جديد للتواصل بين ال Threads عن طريق ال Shared Memory (طبعا لابد من وجود ال ShmOp Extension

3) طريقة جديدة لمناداه ال Threads عن طريق OS Specific Shell Calls تسمى CliThread (حيث هى الوحيده التى تعمل مع ال PHP/Cli (

4)ِ Class جديد مسئول عن تغليف ل Simple Mutex بحيث لا تكون Communication Method Dependent ومن الممكن استعمالها من اى كلاس أى User Made Communication Class

4)نظام مدمج لمراقبة ال Thread State

5) نظام بسيط لل Class Loading وتفادى مشاكل ال Path

---

بانتظار تعليقاتكم / استفساراتكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .