الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

درس: How To Thread In Php

بدأه ASDen في 16 أغسطس 2007 · 25 رد · 4,747 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

احدى المشكلات المعروفة فى ال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

#2

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

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

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

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

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

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

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

تم تعديل هذه المشاركة بواسطة ASDen في 16 أغسطس 2007 في 16:06

#3

سلام عليكم..

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

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

#4

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

اقتباس
ممكن مزيد من توضيح عن Curl

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

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

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

و شكرا

تم تعديل هذه المشاركة بواسطة ASDen في 16 أغسطس 2007 في 17:25

#5

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

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

و شكرا

#6

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

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

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

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

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

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

#7

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

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

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

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

تم تعديل هذه المشاركة بواسطة phpspider في 17 أغسطس 2007 في 23:00

بسم الله الرحمن الرحيم

و قل ربي زدني علماً

صدق الله العظيم

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

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

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#9

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

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

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

post-9138-1187608686_thumb.gif

#10

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

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

#11

أولا أشكر الأخوه PHPSpider,HGB,RAZ_C@DE على تفاعلهم الرائع .

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

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

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

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

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

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

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

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

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

1
#12

الجزء الثانى

اضافة ال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 مما يعلى من التخاطبية و يوسع تفاعلها مع المستخدم.

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

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

#13

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

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

#14

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

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

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

التحميل : هنا

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

#15

السلام عليكم

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

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

#16

thanks for that .. i will keep track

asap

#17

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

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

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

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

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

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

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

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

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

التحميل هنا

التصويت هنا

تم تعديل هذه المشاركة بواسطة ASDen في 5 أكتوبر 2007 في 00:54

#19

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

مدونة مهندس ميكانيكى

“Any fool can make things bigger, more complex, and more violent”

#20

اكتر من رائع ASDen

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

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

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

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

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

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

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

----

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

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

#22

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

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

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#23
اقتباس
مشاكل ولاإيه ؟

لا هو فية اية :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

#24

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

بالتوفيق ASDen

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#25

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

الحمد لله انتهيت من ال 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

---

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

مواضيع مشابهة