بيت / إنترنت / موضوع مناقشة فقر الدم php. الحوسبة متعددة الخيوط في PHP: pthreads. ما هي الخيوط

موضوع مناقشة فقر الدم php. الحوسبة متعددة الخيوط في PHP: pthreads. ما هي الخيوط

يبدو أن مطوري PHP نادراً ما يستخدمون التزامن. لن أتحدث عن بساطة التعليمات البرمجية المتزامنة؛ بالطبع، هي أبسط وأكثر وضوحًا، ولكن في بعض الأحيان استخدام صغيريمكن أن يؤدي التوازي إلى تحسينات كبيرة في الأداء.

في هذه المقالة، سنلقي نظرة على كيفية تحقيق تعدد مؤشرات الترابط في PHP باستخدام ملحق pthreads. للقيام بذلك، ستحتاج إلى تثبيت إصدار ZTS (Zend Thread Safety) من PHP 7.x، بالإضافة إلى التمديد المثبتب المواضيع v3. (في وقت كتابة هذا التقرير، في PHP 7.1، سيحتاج المستخدمون إلى التثبيت من الفرع الرئيسي في مستودع pthreads - راجع ملحق الطرف الثالث.)

توضيح صغير: pthreads v2 مخصص لـ PHP 5.x ولم يعد مدعومًا، pthreads v3 مخصص لـ PHP 7.x ويجري تطويره بشكل نشط.

بعد هذا الاستطراد، دعونا ننتقل مباشرة إلى هذه النقطة!

معالجة المهام لمرة واحدة

في بعض الأحيان قد ترغب في معالجة المهام لمرة واحدة بطريقة متعددة الخيوط (على سبيل المثال، تنفيذ بعض المهام المرتبطة بالإدخال/الإخراج). في مثل هذه الحالات، يمكنك استخدام فئة Thread لإنشاء سلسلة رسائل جديدة وتشغيل بعض المعالجة على سلسلة رسائل منفصلة.

على سبيل المثال:

مهمة $ = فئة جديدة تمتد الموضوع (استجابة $ خاصة؛ تشغيل وظيفة عامة () ( $content = file_get_contents("http://google.com"); preg_match("~ (.+)~"، $content، $matches)؛ $this->response = $matches; ) ); $task->start() && $task->join(); var_dump($task->response); // سلسلة (6) جوجل

هنا طريقة التشغيل هي المعالجة الخاصة بنا، والتي سيتم تنفيذها داخل موضوع جديد. عندما يتم استدعاء Thread::start، يتم إنشاء مؤشر ترابط جديد ويتم استدعاء طريقة التشغيل. نقوم بعد ذلك بربط الخيط الفرعي مرة أخرى بالخيط الرئيسي عن طريق استدعاء Thread::join ، والذي سيتم حظره حتى ينتهي تنفيذ الخيط الفرعي. وهذا يضمن انتهاء تنفيذ المهمة قبل أن نحاول طباعة النتيجة (المخزنة في $task->response).

قد لا يكون من المرغوب فيه تلويث الفصل بمسؤوليات إضافية مرتبطة بمنطق التدفق (بما في ذلك مسؤولية تحديد طريقة التشغيل). يمكننا تمييز هذه الفئات عن طريق وراثتها من فئة Threaded. ثم يمكن تشغيلها داخل موضوع آخر:

توسع مهمة الفئة الخيوط ( public $response; public function someWork() ( $content = file_get_contents("http://google.com"); preg_match("~ (.+) ~", $content, $matches); $ this->response = $matches ) ) $task = new Task; $thread = new class($task) يمتد الموضوع ( مهمة $ خاصة؛ وظيفة عامة __construct(Threaded $task) ( $this->task = $task; ) تشغيل الوظيفة العامة() ( $this->task->someWork( )); $thread->start() && $thread->join(); var_dump($task->response);

أي فئة تحتاج إلى تشغيلها في موضوع منفصل يجبترث من فئة الخيوط. وذلك لأنه يوفر الإمكانيات اللازمة لإجراء المعالجة على سلاسل عمليات مختلفة، بالإضافة إلى الأمان الضمني والواجهات المفيدة (مثل مزامنة الموارد).

دعونا نلقي نظرة على التسلسل الهرمي للفصل الذي يقدمه امتداد pthreads:

الخيوط (الأدوات القابلة للعبور والتحصيل) تجمع عامل الخيط المتطاير

لقد قمنا بالفعل بتغطية وتعلم أساسيات فئتي Thread وThreaded، والآن دعونا نلقي نظرة على الفئات الثلاثة الأخرى (Worker، وVolatile، وPool).

إعادة استخدام المواضيع

يعد بدء سلسلة رسائل جديدة لكل مهمة تحتاج إلى موازنتها أمرًا مكلفًا للغاية. وذلك لأنه يجب تنفيذ بنية لا شيء مشترك في pthreads لتحقيق تعدد مؤشرات الترابط داخل PHP. مما يعني أنه يجب نسخ سياق التنفيذ الكامل للمثيل الحالي لمترجم PHP (بما في ذلك كل فئة وواجهة وسمة ووظيفة) لكل موضوع تم إنشاؤه. نظرًا لأن هذا له تأثير ملحوظ على الأداء، يجب دائمًا إعادة استخدام الدفق كلما أمكن ذلك. يمكن إعادة استخدام الخيوط بطريقتين: استخدام العمال أو استخدام التجمعات.

يتم استخدام فئة العامل لتنفيذ عدد من المهام بشكل متزامن داخل مؤشر ترابط آخر. يتم ذلك عن طريق إنشاء نسخة عامل جديدة (مما يؤدي إلى إنشاء سلسلة رسائل جديدة)، ثم دفع المهام إلى مكدس سلسلة المحادثات المنفصلة (باستخدام Worker::stack).

إليك مثال صغير:

تمتد مهمة الفئة Threaded ( قيمة $ خاصة؛ وظيفة عامة __construct(int $i) ( $this->value = $i; ) وظيفة عامة run() ( usleep(250000); echo "Task: ($this->value) \n"; ) ) $worker = new Worker(); $worker->start(); for ($i = 0; $i stack(new Task($i)); ) while ($worker->collect()); $worker->shutdown();

في المثال أعلاه، تم دفع 15 مهمة لكائن $worker جديد إلى المكدس عبر طريقة Worker::stack، ثم تتم معالجتها بالترتيب الذي تم دفعها بها. يتم استخدام طريقة Worker::collect، كما هو موضح أعلاه، لتنظيف المهام بمجرد الانتهاء من تنفيذها. باستخدامها، داخل حلقة while، نقوم بحظر الخيط الرئيسي حتى يتم إكمال جميع المهام الموجودة على المكدس ومسحها - قبل أن نستدعي Worker::shutdown . سيؤدي إنهاء العامل مبكرًا (أي في حين لا تزال هناك مهام يجب إكمالها) إلى حظر الخيط الرئيسي حتى تنتهي جميع المهام من تنفيذها، فقط لن يتم تجميع المهام المهملة (وهو ما يستلزم حدوث تسرب للذاكرة).

توفر فئة العامل عدة طرق أخرى تتعلق بمكدس المهام الخاص بها، بما في ذلك Worker::unstack لإزالة آخر مهمة مكدسة وWorker::getStacked للحصول على عدد المهام في مكدس التنفيذ. تحتوي حزمة العامل على المهام التي يجب تنفيذها فقط. بمجرد اكتمال مهمة على المكدس، تتم إزالتها ووضعها على مكدس منفصل (داخلي) لجمع البيانات المهملة (باستخدام طريقة Worker::collect).

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

دعونا نكيف المثال أعلاه لاستخدام مجموعة من العمال:

تمتد مهمة الفئة Threaded ( قيمة $ خاصة؛ وظيفة عامة __construct(int $i) ( $this->value = $i; ) وظيفة عامة run() ( usleep(250000); echo "Task: ($this->value) \n"; ) ) $pool = new Pool(4); for ($i = 0; $i Submit(new Task($i)); ) while ($pool->collect()); $pool->shutdown();

هناك بعض الاختلافات الملحوظة عند استخدام حمام السباحة بدلاً من العامل. أولاً، لا يلزم تشغيل المجمع يدويًا؛ فهو يبدأ في تنفيذ المهام بمجرد توفرها. ثانيا نحن يرسلالمهام إلى التجمع، لا وضعها على كومة. بالإضافة إلى ذلك، لا ترث فئة التجمع من Threaded وبالتالي لا يمكن تمريرها إلى سلاسل رسائل أخرى (على عكس العامل).

من الممارسات الجيدة للعاملين والتجمعات أن يقوموا دائمًا بتنظيف مهامهم بمجرد الانتهاء منها، ثم إنهاؤها يدويًا بأنفسهم. يجب أيضًا ربط المواضيع التي تم إنشاؤها باستخدام فئة Thread بالسلسلة الأصلية.

pthreads و (im) قابلية التغيير

آخر فئة سنتطرق إليها هي Volatile، وهي إضافة جديدة إلى pthreads v3. لقد أصبحت الثبات مفهومًا مهمًا في خيوط pthread، لأنه بدونه يتأثر الأداء بشكل كبير. لذلك، بشكل افتراضي، أصبحت خصائص الفئات المترابطة التي هي في حد ذاتها كائنات مترابطة غير قابلة للتغيير، وبالتالي لا يمكن الكتابة فوقها بعد تعيينها الأولي. يُفضل حاليًا التغيير الصريح لمثل هذه الخصائص، ولا يزال من الممكن تحقيقها باستخدام الفئة المتطايرة الجديدة.

دعونا نلقي نظرة على مثال يوضح قيود الثبات الجديدة:

توسع مهمة الفئة الخيوط // فئة مترابطة ( الوظيفة العامة __construct() ( $this->data = new Threaded(); // $this->data غير قابلة للكتابة فوقها، لأنها خاصية مترابطة لفئة مترابطة ) ) $task = new class(new Task()) Extends Thread ( // فئة مترابطة، حيث أن Thread يمتد وظيفة عامة مترابطة __construct($tm) ( $this->threadedMember = $tm; var_dump($this->threadedMember-> data); // object(Threaded)#3 (0) () $this->threadedMember = new StdClass(); // غير صالح، لأن الخاصية عضو مترابط في فئة Threaded ) );

من ناحية أخرى، فإن الخصائص المترابطة للفئات المتطايرة قابلة للتغيير:

تمتد مهمة الفئة المتطايرة ( الوظيفة العامة __construct() ( $this->data = new Threaded(); $this->data = new StdClass(); // صالحة، لأننا في فئة متطايرة)) ) $task = new class(new Task()) Extends Thread ( public function __construct($vm) ( $this->volatileMember = $vm; var_dump($this->volatileMember->data); // object(stdClass)#4 (0) () // لا يزال غير صالح، نظرًا لأن Volatile يمتد Threaded، لذا فإن الخاصية لا تزال عضوًا مترابطًا في فئة Threaded $this->volatileMember = new StdClass() );

يمكننا أن نرى أن الفئة المتطايرة تتجاوز الثبات الذي تفرضه فئة الخيوط الأصلية الخاصة بها لتوفير القدرة على تغيير الخصائص المترابطة (بالإضافة إلى إلغاء تعيينها).

هناك موضوع آخر للمناقشة لتغطية موضوع التباين والفئة المتطايرة - المصفوفات. في pthreads، يتم تحويل المصفوفات تلقائيًا إلى الكائنات المتطايرة عند تعيينها إلى خاصية من فئة Threaded. وذلك لأنه ببساطة ليس من الآمن التعامل مع مجموعة من سياقات PHP المتعددة.

دعونا نلقي نظرة على مثال مرة أخرى لفهم بعض الأشياء بشكل أفضل:

مصفوفة $ = ; مهمة $ = فئة جديدة($array) تمتد الموضوع (بيانات $ خاصة؛ وظيفة عامة __construct(array $array) ( $this->data = $array; ) وظيفة عامة run() ( $this->data = 4; $ this->data = 5; print_r($this->data)); $task->start() && $task->join(); /* الإخراج: كائن متطاير ( => 1 => 2 => 3 => 4 => 5) */

نرى أنه يمكن التعامل مع الكائنات المتطايرة كما لو كانت مصفوفات لأنها تدعم عمليات المصفوفة مثل (كما هو موضح أعلاه) عامل المجموعة الفرعية (). ومع ذلك، لا تدعم الفئات المتطايرة وظائف المصفوفة الأساسية مثل array_pop وray_shift. بدلاً من ذلك، توفر لنا الفئة Threaded عمليات مثل الأساليب المضمنة.

كدليل:

بيانات $ = فئة جديدة ممتدة متطايرة ( public $a = 1; public $b = 2; public $c = 3; ) ؛ var_dump($data); var_dump($data->pop()); var_dump($data->shift()); var_dump($data); /* الإخراج: كائن(class@anonymous)#1 (3) ( ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) ) int(3) int(1) كائن(class@anonymous)#1 (1) ( ["b"]=> int(2) ) */

تتضمن العمليات المدعومة الأخرى Threaded::chunk و Threaded::merge .

التزامن

في القسم الأخير من هذه المقالة، سنلقي نظرة على المزامنة في سلاسل الرسائل. المزامنة هي طريقة تسمح لك بالتحكم في الوصول إلى الموارد المشتركة.

على سبيل المثال، لننفذ عدادًا بسيطًا:

$counter = فئة جديدة تمتد الموضوع ( public $i = 0; public function run() ( for ($i = 0; $i i; ) )); $counter->start(); for ($i = 0; $i i; ) $counter->join(); var_dump($counter->i); // سيطبع رقمًا من 10 إلى 20

بدون استخدام المزامنة، لا يكون الإخراج محددًا. تكتب سلاسل رسائل متعددة إلى نفس المتغير دون التحكم في الوصول، مما يعني فقدان التحديثات.

دعونا نصلح هذا حتى نحصل على الناتج الصحيح وهو 20 عن طريق إضافة التوقيت:

$counter = فئة جديدة تمتد الموضوع ( public $i = 0; public function run() ( $this->synchronized(function () ( for ($i = 0; $i i; ) )); )); $counter->start(); $counter->synchronized(function ($counter) ( for ($i = 0; $i i; ) ), $counter); $counter->join(); var_dump($counter->i); // كثافة العمليات (20)

يمكن أيضًا أن تتواصل كتل التعليمات البرمجية المتزامنة مع بعضها البعض باستخدام الطرق Threaded::wait وThreaded::notify (أو Threaded::notifyAll).

فيما يلي زيادة بديلة في حلقتين متزامنتين:

$counter = فئة جديدة تمتد الموضوع ( public $cond = 1; public function run() ( $this->synchronized(function () ( for ($i = 0; $i notify(); if ($this->cond === 1) ( $this->cond = 2; $this->wait(); ) ) )); $counter->start(); $counter->synchronized(function ($counter) ( if ($counter->cond !== 2) ( $counter->wait(); // انتظر حتى يبدأ الآخر أولاً) for ($i = 10; $i notify(); if ($counter->cond === 2) ( $counter->cond = 1; $counter->wait(); ) ) ), $counter); $counter->join(); /* الإخراج: int(0) int(10) int(1) int(11) int(2) int(12) int(3) int(13) int(4) int(14) int(5) int( 15) int(6) int(16) int(7) int(17) int(8) int(18) int(9) int(19) */

قد تلاحظ شروطًا إضافية تم وضعها حول استدعاء Threaded::wait . تعد هذه الشروط بالغة الأهمية لأنها تسمح باستئناف رد الاتصال المتزامن عند تلقي إشعار ويكون الشرط المحدد صحيحًا. يعد هذا أمرًا مهمًا لأن الإشعارات يمكن أن تأتي من أماكن أخرى غير وقت استدعاء Threaded::notify. وبالتالي، إذا لم تكن الاستدعاءات إلى الأسلوب Threaded::wait محاطة بشروط، فسننفذها مكالمات إيقاظ كاذبةمما سيؤدي إلى سلوك تعليمات برمجية غير متوقع.

خاتمة

لقد نظرنا إلى الفئات الخمس لحزمة pthreads (Threaded، Thread، Worker، Volatile، and Pool) وكيفية استخدام كل فئة. لقد نظرنا أيضًا إلى المفهوم الجديد للثبات في pthreads مراجعة قصيرةقدرات المزامنة المدعومة. مع وضع هذه الأساسيات، يمكننا الآن البدء في النظر في كيفية استخدام خيوط pthreads في حالات العالم الحقيقي! وهذا سيكون موضوع مقالتنا القادمة.

إذا كنت مهتمًا بترجمة المنشور التالي، فأخبرني: قم بالتعليق على وسائل التواصل الاجتماعي. الشبكات، التصويت لصالح ومشاركة المنشور مع الزملاء والأصدقاء.

مناقشة مترابطة

أ مناقشة مترابطةهي مناقشة إلكترونية (مثل تلك التي تتم عبر البريد الإلكتروني، قائمة الايميلاتأو لوحة الإعلانات أو مجموعة الأخبار أو منتدى الإنترنت) حيث يساعد البرنامج المستخدم من خلال تجميع الرسائل بشكل مرئي. عادةً ما يتم تجميع الرسائل بشكل مرئي في تسلسل هرمي حسب الموضوع. تسمى مجموعة الرسائل المجمعة بهذه الطريقة أ موضوع الموضوعأو ببساطة "الخيط". يقال إن منتدى المناقشة أو عميل البريد الإلكتروني أو عميل الأخبار يحتوي على "موضوعات مترابطة" إذا قام بتجميع الرسائل حول نفس الموضوع معًا لتسهيل القراءة بهذه الطريقة. علاوة على ذلك، تسمح المناقشات المترابطة عادةً للمستخدمين بالرد على منشور معين داخل سلسلة رسائل الموضوع. ونتيجة لذلك، يمكن أن يكون هناك تسلسل هرمي للمناقشات داخل موضوع السلسلة. قد تسمح أنواع مختلفة من البرامج بعرض هذا التسلسل الهرمي في ما يسمى الوضع المترابط. (البديل هو الوضع الخطي، والذي يعرض عادةً جميع المشاركات بترتيب التاريخ، بغض النظر عمن قام بالرد على من على وجه التحديد.)

مزايا

تتمثل ميزة طرق العرض المترابطة هرميًا في أنها تسمح للقارئ بتقدير البنية العامة للمحادثة بسرعة: وتحديدًا من يرد على من. على هذا النحو، يكون مفيدًا للغاية في المواقف التي تتضمن محادثات أو مناقشات موسعة، مثل مجموعات الأخبار: في الواقع، بالنسبة للمناقشات المعقدة حقًا، يصبح من المستحيل بسرعة متابعة الحجة دون وجود نوع من نظام التسلسل الهرمي.

هناك فائدة أخرى تتمثل في التقدير الأكثر دقة للمجتمع في الأنظمة المترابطة هرميًا. وبما أن الردود يجب أن تتم على منشورات محددة، فهي تتم أيضًا على أفراد محددين. ولذلك فإن المحادثات المترابطة تميل إلى تركيز الكاتب على وجهات النظر المحددة وشخصية الفرد الذي يتم الرد عليه. ويحدث هذا بشكل أقل في المنتديات التي يتم فيها إدراج التعليق الأخير في المجموعة العامة.

سلبيات

عيب الترابط الهرمي على الترابط المسطح هو زيادة مستوى التعقيد، وبالتالي فإن مثل هذا الرأي يتطلب مستوى متزايد من الراحة والتطور من جانب مستخدميه. لذلك ليس من المستغرب أن يكون الإقبال عليها أكبر في بعض المجتمعات الأقدم و/أو الأكثر تطورًا على الإنترنت، مثل Usenet أو CIX أو Slashdot. وبالمقارنة، فإن أنظمة الدردشة والتعليقات على شبكة الإنترنت هي أحدث عهدًا ومفتوحة أمام جمهور أوسع، وعلى هذا النحو، أصبح التسلسل الهرمي شائعًا في مثل هذه المجالات مؤخرًا فقط.

يؤدي فرض التسلسل الهرمي الشجري أيضًا إلى تجزئة المناقشة داخل الموضوع: لم يعد من الممكن نشر رسالة للرد على العديد من المنشورات السابقة المختلفة أو تلخيصها. وبدلاً من ذلك، يجب الرد على كل مشاركة سابقة بشكل فردي. يمكن القول أن هذا يؤدي إلى أسلوب نقاش أكثر تصادميًا في المنتديات التي تستخدم الخيوط الهرمية. ومع ذلك، على الرغم من أن ذلك قد يكون صحيحًا، إذا لم يعد الرد المباشر المترابطة ممكنًا بسبب حجم الردود على المنشور المطلوب، فإن المستخدمين الآن غالبًا ما يستخدمون علامات الاقتباس من قبل الشخص الذي يردون عليه من أجل إبقاء المحادثة في المسار الصحيح وتدفقها بسلاسة يوصى بهذا من قبل معظم مجتمعات لوحة الرسائل في حالة وصول مؤشر الترابط إلى الحد الشامل.

فتح الموضوع

يشير الموضوع المفتوح إلى مشاركة مدونة حيث يمكن للقراء التعليق ومناقشة أي موضوع يختارونه. وعادة ما تكون أكثر فائدة على المدونات الشهيرة التي تحتوي على كميات كبيرة من مرور; يتم استخدامها غالبًا عندما لا يكون لدى مؤلف المدونة موضوع للنشر فيه أو عندما يكون هناك فترة توقف في النشر.

تُستخدم المواضيع المفتوحة أيضًا لكسر رتابة المشاركات على الصفحات الرئيسية للمدونات. قد تتراكم التعليقات على المشاركات الموجهة للمحتوى؛ ولذلك، يستخدم المؤلفون المواضيع المفتوحة حتى لا تتباطأ أوقات تحميل الصفحة.

أمثلة

* ياهو! مجموعات[ http://groups.yahoo.com/]، مجموعات MSN [ http://groups.msn.com/] وسلاش دوت [ http://www.slashdot.com/] تقدم جميعها منتديات على شبكة الإنترنت تتميز بمناقشات مترابطة.

أنظر أيضا

* الكتابة السماوية العلمية
* قائمة مصطلحات التدوين

مراجع

* دارتموث. (2003). [ http://www.dartmouth.edu/~webteach/articles/discussion.html "إجراء المناقشة عبر الإنترنت" ]
* وولسي، تي. ديفير، [ http://www.readingonline.org/articles/art_index.asp?HREF=wolsey/index.html "مناقشة الأدب في الفضاء الإلكتروني: المراهقون الشباب يستخدمون مجموعات المناقشة المترابطة للحديث عن الكتب] . “القراءة عبر الإنترنت”، 7 (4)، يناير / فبراير 2004. تم استرجاعه في 30 ديسمبر 2007

مؤسسة ويكيميديا. 2010.

  • ليون باوي
  • بارح عزوم

انظر إلى القواميس الأخرى:

    منتدى الإنترنت- حزمة برامج منتدى الإنترنت phpBB، وهي من أشهر حزم المنتديات... ويكيبيديا

    تاريخ بيئات التعلم الافتراضية في التسعينيات- في تاريخ بيئات التعلم الافتراضية، كانت فترة التسعينات فترة نمو، ويرجع ذلك في المقام الأول إلى ظهور أجهزة الكمبيوتر والإنترنت بأسعار معقولة. التسعينات1990* شركة Formal Systems Inc. من برينستون، نيوجيرسي، الولايات المتحدة الأمريكية تقدم تقييمًا قائمًا على نظام DOS... ... ويكيبيديا

    قهوة- مطور (مطورو) البيئة التعليمية التعاونية وجهًا لوجه، اتحاد LEAD الإصدار الثابت 5.0 / يونيو 2010 نظام التشغيل عبر الأنظمة الأساسية ... ويكيبيديا

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

    سلاش دوت- لقطة شاشة لعنوان URL للصفحة الرئيسية لـ Slashdot.org slashdot.org شعار أخبار المهووسين. أشياء مهمة... ويكيبيديا

    ميدياويكي- تتم إعادة توجيه مساحة الاسم هنا. للمساعدة فيما يتعلق بمساحة اسم MediaWiki على ويكيبيديا، راجع مساعدة:مساحة اسم MediaWiki. للحصول على معلومات عامة حول مساحات الأسماء في ويكيبيديا، راجع Wikipedia:مساحة الاسم. تتم إعادة توجيه صفحة النقاش وصفحة نقاش MediaWiki هنا. ل... ... ويكيبيديا

    الاتصالات بوساطة الكمبيوتر- لمعانٍ أخرى، انظر CMC (توضيح). يتم تعريف الاتصال عبر الكمبيوتر (CMC) على أنه أي معاملة تواصلية تحدث من خلال استخدام جهازي كمبيوتر أو أكثر متصلين بالشبكة. في حين أن المصطلح يشير تقليديًا إلى تلك... ... ويكيبيديا

    مقارنة بين برامج ويكي- الجداول التالية تقارن المعلومات العامة والفنية لعدد من حزم برامج الويكي. المحتويات 1 معلومات عامة 2 الجمهور المستهدف 3 الميزات 1 4 الميزات 2 ... ويكيبيديا

    الكتابة السماوية العلمية- هو مصطلح صاغه العالم المعرفي ستيفان هارناد يصف مجموعة من رسائل البريد الإلكتروني المتعددة وأرشيف الويب المترابطة الموضوع مثل مجموعة الأخبار أو قائمة البريد الإلكتروني أو البريد التشعبي أو أخبار الشبكة أو منتدى الإنترنت، المرتبطة والقابلة للفرز حسب التاريخ، ... ... ويكيبيديا

    برامج صنع القرار التعاوني- برنامج اتخاذ القرار التعاوني (CDM) هو تطبيق برمجي أو وحدة نمطية تعمل على تنسيق الوظائف والميزات المطلوبة للتوصل إلى قرارات جماعية في الوقت المناسب، مما يمكّن جميع أصحاب المصلحة المعنيين من المشاركة في العملية. ال... ... ويكيبيديا

لقد قمت مؤخرًا بتجربة pthreads وكانت مفاجأة سارة لي - فهو امتداد يضيف القدرة على العمل مع عدة سلاسل رسائل حقيقية في PHP. لا محاكاة ولا سحر ولا تزييف - كل شيء حقيقي.



أنا أفكر في مثل هذه المهمة. هناك مجموعة من المهام التي يجب إكمالها بسرعة. لدى PHP أدوات أخرى لحل هذه المشكلة، لم يتم ذكرها هنا، المقال يدور حول pthreads.



ما هي الخيوط

هذا كل شئ! حسنا، كل شيء تقريبا. في الواقع، هناك ما قد يزعج القارئ الفضولي. لا شيء من هذا يعمل على لغة PHP القياسية المترجمة مع الخيارات الافتراضية. للاستمتاع بتعدد مؤشرات الترابط، يجب عليك تمكين ZTS (Zend Thread Safety) في PHP الخاص بك.

إعداد PHP

بعد ذلك، PHP مع ZTS. لا مانع من الاختلاف الكبير في وقت التنفيذ مقارنةً بـ PHP بدون ZTS (37.65 مقابل 265.05 ثانية)، لم أحاول تعميم إعداد PHP. في حالة عدم وجود ZTS، قمت بتمكين XDebug على سبيل المثال.


كما ترون، عند استخدام خيطين، تكون سرعة تنفيذ البرنامج أعلى بحوالي 1.5 مرة مما كانت عليه في حالة الكود الخطي. عند استخدام 4 خيوط - 3 مرات.


يمكنك ملاحظة أنه على الرغم من أن المعالج 8 النواة، إلا أن وقت تنفيذ البرنامج ظل دون تغيير تقريبًا إذا تم استخدام أكثر من 4 خيوط. يبدو أن هذا يرجع إلى حقيقة أن المعالج الخاص بي يحتوي على 4 مراكز مادية من أجل الوضوح، لقد قمت بتصوير اللوحة في شكل رسم تخطيطي.


ملخص

في PHP، من الممكن العمل بشكل رائع مع مؤشرات الترابط المتعددة باستخدام امتداد pthreads. وهذا يعطي زيادة ملحوظة في الإنتاجية.

العلامات: إضافة العلامات

فقدت والدة إحدى صديقاتي العزيزة حقيبتها أثناء رحلة جوية من سانت بطرسبرغ إلى موسكو، وكان لديها رحلة أخرى إلى شواطئ أكثر دفئًا، وهي الآن موجودة بالفعل في المنتجع - بدون ملابس السباحة والصنادل وبقميص T فقط. -قميص من حقيبة يدها. من أجل الماضي، أعطيتها بعض النصائح حول ما يجب فعله وأين يجب أن أركض، واليوم قررت أن أكتب كل ما أعرفه عن موضوع معين هنا.

لتوضيح مدى ذكائي الشديد، اسمحوا لي أن أذكركم أنني عملت في وقت ما في الخدمات الأرضية للعديد من شركات الطيران، بما في ذلك التعامل مع بعض المشكلات المتعلقة بالتفتيش على الأمتعة. حسنًا، بالإضافة إلى تجربتي في الطيران، بالطبع. ومع ذلك، لأن لقد تركت صناعة خدمات الطيران منذ عدة سنوات، ربما تغيرت بعض الفروق الدقيقة - إذا كان الأمر كذلك، فسأقبل التعليقات حول الموضوع بامتنان وأصحح المعلومات الواردة في المنشور.

سأبدأ بهذا ما يجب عليك فعله لمنع ضياع أمتعتك:
1. قم بإزالة جميع العلامات والملصقات من الرحلات السابقة من حقيبتك، حتى الصغيرة منها التي تحتوي على رمز شريطي، والتي غالبًا ما يتم لصقها بشكل منفصل على الحقيبة نفسها - فقد تؤدي إلى إرباك نظام فحص الأمتعة وفرزها تلقائيًا.
2. قم بتعليق علامة اسم على حقيبتك (حقيبة، صندوق، حزمة - بشكل عام، كل ما تقوم بتسجيله كأمتعة): يمكنك شراء خيار قابل لإعادة الاستخدام مقدمًا أو أخذ بطاقة ورقية من مكتب تسجيل الوصول - عادةً كل شيء شركات الطيران اللائقة أكثر أو أقل تقدمها دون قيود. وطيران الإمارات، على سبيل المثال، تمتلك بشكل عام علامات بلاستيكية ممتازة على سلك متين يمكن أن يستمر لفترة طويلة جدًا:

يمكن للمصابين بجنون العظمة أن يفعلوا مثلي: لدي دائمًا بطاقة بلاستيكية قابلة لإعادة الاستخدام من مجموعة سامسونايت معلقة على حقيبتي تحتوي على عنوان منزلي الدائم ورقم الهاتف ورقم الهاتف. بالبريد الالكتروني، وعندما أسافر إلى مكان ما في إجازة، أقوم أيضًا بتعليق مذكرة ورقية أشير فيها إلى تواريخ إقامتي في المكان الجديد وجميع جهات الاتصال الممكنة (اسم وعنوان الفندق، ورقم هاتفه المحلي، إذا كان متاحًا، واسمي الأول والأخير بالطبع).
3. عند مكتب تسجيل الوصول، تأكد من أن بطاقة الأمتعة المطبوعة بواسطة وكيل تسجيل الوصول مثبتة على أمتعتك - مع رمز المدينة التي تسافر إليها ورقم الرحلة.
4. إذا كان لديك عدة رحلات متصلة، فأخبر وكيل تسجيل الوصول بهذا الأمر وحدد النقطة التي تريد فحص أمتعتك فيها. في بعض الحالات، سيتعين عليك التقاط الأمتعة في مطار أو آخر على طول الطريق، بغض النظر عن رغبتك: ينطبق هذا، على سبيل المثال، على عمليات النقل بين المطارات (أورلي وشارل ديغول في باريس، دوموديدوفو - شيريميتيفو - "فنوكوفو" " في موسكو)، محطات منفصلة (المبنيان 1 و 2 في فرانكفورت) أو عند نقطة الوصول الأولى إلى الولايات المتحدة الأمريكية أو المكسيك - هذا متطلب جمركي في هذه البلدان: لنفترض أنك تسافر بالطائرة بين موسكو وواشنطن وفينيكس، وبطاقة الأمتعة يتم إصدارها لجميع القطاعات الثلاثة إلى فينيكس، ولكن في واشنطن، يجب أن يتم التقاط الأمتعة فعليًا وتخليصها من الجمارك وتسجيل الوصول مرة أخرى أيضًا، إذا كنت تقوم بتسجيل عربة أطفال سُمح لك بحملها قبل الصعود إلى الطائرة طائرة أو حيوانًا، فمن المحتمل أن تحتاج إلى استلامه من نقطة عبور. بشكل عام، في حالة وجود طريق معقد مع عمليات النقل، من الأفضل توضيح تفاصيل حركة الأمتعة مسبقًا في مركز الاتصال التابع لشركة الطيران أو، في الحالات القصوى، عند تسجيل الوصول.
5. اجعل أمتعتك مرئية: لا يكون تأخير الأمتعة دائمًا بسبب خطأ عمال الأمتعة أو فشل نظام الفرز. في بعض الأحيان، يأخذ راكب آخر شارد الذهن، متعبًا بعد رحلة طويلة، من عربة الأمتعة نفس حقيبة سامسونايت السوداء أو حقيبة رياضية غير موصوفة مثل حقيبتك. لذلك، ضع علامة على أمتعتك: قم بتعليق مجموعة من الأشرطة الساطعة أو لعبة ناعمة صغيرة على المقبض، أو قم بلصق ملصق كبير عليها، أو قم ببساطة بإعطاء الأفضلية للون غير عادي عند اختيار حقيبة السفر.

ما الذي لا ينبغي فحصه في الأمتعة؟
تذكر أن جميع شركات الطيران والمطارات تفقد الأمتعة. بالطبع، تختلف الإحصائيات من شخص لآخر، ولكن حتى شركات الطيران الأكثر موثوقية يمكن أن تفقد الأمتعة أو تؤخرها، وحتى في أصغر المطارات، حيث يقوم معالج أمتعة واحد بنقل عربة بها حقائب سفر مباشرة من مكتب تسجيل الوصول إلى الطائرة. لذلك أنصحك أن تأخذ معك دائمًا حقيبة يدك:
- المستندات المهمة، بما في ذلك تلك التي لا حاجة إليها أثناء الرحلة (على سبيل المثال، في رحلتي الأخيرة إلى سانت بطرسبرغ، كنت بحاجة إلى تغيير رخصتي، وأخذت معي في حقيبة يدي شهادة زواج وجميع أنواع البطاقات من مدرسة لتعليم قيادة السيارات)
- المفاتيح (مع علامة تحمل عنوانك، قد يكون ذلك خطيرًا)
- المال والمجوهرات (لا توجد تعليقات)
- معدات هشة باهظة الثمن
- الأدوية التي تتناولها بانتظام، بالكمية المطلوبة للرحلة، مع احتياطي صغير في حالة البحث عن مثيل لها في بلد أو مدينة أجنبية. الأدوية الطبية التي لا يمكن شراؤها في حالة فقدان أمتعتك، خذ معك المبلغ اللازم للرحلة بأكملها.
- شيء قد تكون هناك حاجة إليه بشكل عاجل عند الوصول (على سبيل المثال، شاحنللهاتف
- شيء له قيمة عاطفية بالنسبة لك شخصيا: في بعض الأحيان تضيع الأمتعة إلى الأبد، وإذا كان فقدان مذكراتك الشخصية يكسر قلبك، فمن الأفضل أن تتركها في المنزل أو تأخذها معك على متن الطائرة

قصة مفيدة: أثناء عملي في لوفتهانزا في سانت بطرسبرغ، جاء زوجان من الولايات المتحدة مسرعين إلى مكتبنا، وهما يفركان أيديهما - ولم تصل أمتعتهما، التي كانت تحتوي على وثائق مهمة جدًا لمحاكمة التبني، وكانت المحاكمة في اليوم التالي. بالطبع شركة الطيران هي المسؤولة عن فقدان الأمتعة، ولكن من المستفيد من ذلك؟ لتجنب مثل هذا الموقف، كان يكفي ببساطة وضع الأوراق المهمة في حقيبة يدك.

لقد وصلت ولم تجد أمتعتك على حزام الأمتعة. ما يجب القيام به؟
1. إذا قمت بتسجيل أمتعتك شيئًا مختلفًا عن الحقائب العادية: الزلاجات، التشيلو، لوحة بلازما بحجم الحائط، عربة أطفال، دانماركي رخامي حي، تحقق مما إذا كانت هناك نقطة منفصلة لإصدار ما يسمى. الأمتعة كبيرة الحجم أو الأمتعة كبيرة الحجم - غالبًا ما يتم تحميل الأمتعة المشابهة لتلك التي وصفتها أعلاه في حجرة منفصلة ويتم تفريغها يدويًا بشكل منفصل. إذا لم يتم العثور على أمتعتك هناك أيضًا
2. اذهب إلى قسم تتبع الأمتعة أو مكتب المفقودات. هناك سوف تحتاج إلى ملء نموذج خاص به معلومات مفصلةبخصوص أمتعتك: الطريق، مظهر، قائمة قصيرة بالمحتويات، جهات الاتصال الخاصة بك في مكان إقامتك الدائم وإقامتك المؤقتة. وأيضًا، في خدمة تتبع الأمتعة، من المرجح أن ترى مخططًا للأمتعة مثل هذا:

وفقًا لهذا التصنيف، سيتم ترميز أمتعتك المفقودة، وكما تفهم، سيتم ترميز هاتين الحقيبتين بنفس الرمز:

لذا لا تتردد في إضافة تفاصيل إضافية في الوصف ولا تتخطى بند المحتوى. كقاعدة عامة، عند ملء تقرير تأخر الأمتعة لأول مرة، سيُطلب منك الإشارة إلى عدة عناصر من المحتويات التي يمكن من خلالها التعرف على حقيبتك إذا لم تكن هناك علامات تعريفية من الخارج وسيتعين فتح الحقيبة (إذا الحقيبة مفتوحة، سوف تضع إشعارًا بهذا). مثال سيء: تي شيرت / كتاب / مناديل مبللة، مثال جيد: بيكيني أحمر ساطع / كتالوج نسخ ماليفيتش / مكواة قابلة للطي. بعد ملء الطلب، سيعطيك موظف خدمة تتبع الأمتعة رقمًا بالتنسيق XXXYY11111، حيث XXX هو رمز مطار الوصول، YY هو رمز شركة طيران الوصول + 5 أرقام من الرقم التسلسلي للتطبيق: على سبيل المثال، JFKLH12345، إذا سافرت مع لوفتهانزا إلى مطار كينيدي في نيويورك. تذكر هذا الرقم أو اكتبه - سيكون أسهل طريقة للعثور على طلبك في التطبيقات المستقبلية.
باستخدام نفس الرقم يمكنك التحقق من حالة البحث بنفسك (لسبب ما يختفي الرابط: إذا لم يعمل معك، فإن Google World Tracer Online والرابط الثاني حرفيًا - مع عنوان تتبع الأمتعة على موقع الويب worldtracer.aero - هو ما تحتاجه)، لأن الوصول إلى المفقودات والعثور عليها غالبا ما يكون صعبا للغاية
3. حاول الاتصال بمكتب شركة الطيران الخاصة بك في مطار الوصول: في بعض الأحيان (أؤكد - في بعض الأحيان!) إذا لم تكن قد سافرت إلى المنزل، ولكن إلى مكان إقامة مؤقتة (إجازة، رحلة عمل)، يمكن لشركة الطيران توفير مجموعة من أدوات النظافة (تتضمنها شركة Lufthansa قميصًا كبيرًا، وفرشاة ومعجون أسنان، ومشطًا، وعبوات صغيرة من الشامبو وجل الاستحمام، وعلبة من مسحوق الغسيل، وما إلى ذلك) أو دفع مبلغ نقدي صغير مقابل نفقات صغيرة. المكان (الدفع النقدي الفوري).

ماذا سيحدث بعد؟
سيتم نقل ملفك (ما يسمى AHL) إلى النظام المركزي للبحث عن الأمتعة (World Tracer). تقع جميع عناصر الأمتعة التي لم تتم المطالبة بها في نفس نظام البحث، بغض النظر عما إذا تم العثور عليها بدون علامة في أركان وزوايا ساحة الأمتعة أو بقيت على حزام الأمتعة لكل عنصر من هذه العناصر، فإن الملف بتنسيق XXXYY11111 هو تم إنشاؤه أيضًا من نوع فرعي مختلف فقط - ما يسمى. تقرير في متناول اليد أو OHD. إذا كانت البيانات من ملفات AHL وOHD متطابقة (الاسم الأخير، وصف الحقيبة، المسار، وما إلى ذلك)، فستتلقى كلا المحطتين (حيث تم الإبلاغ عن فقدان الأمتعة وحيث تم العثور على الأمتعة التي لم تتم المطالبة بها) إشعارًا، وبعد ذلك إنها مسألة تقنية: إعادة الفحص وفي حالة النجاح إرسال الأمتعة إلى المدينة المطلوبة. وبطبيعة الحال، عدد كبير من صناعة شخصية- المراسلة، ورفض الحقائب المماثلة ولكن ليست نفس الحقائب، بالإضافة إلى الردود على حقائب متعددة اتصالات هاتفية- بشكل عام، لا يشعر موظفو خدمة البحث عن الأمتعة بالملل أبدًا.
إحصائيات تقريبية: تم العثور على أكثر من 90% من الأمتعة المفقودة في أول 3 أيام من البحث، و3% منها فقدت إلى الأبد.
ما الذي تستطيع القيام به؟
1. إذا كان عليك شراء أي شيء تحتاجه بشكل عاجل عند الوصول (من فرشاة الأسنان إلى بدلة العمل)، فتأكد من الاحتفاظ بإيصالاتك للحصول على تعويض لاحق. ومع ذلك، يجب عليك تجنب عمليات الشراء الباهظة الثمن غير الضرورية؛ وسأشرح السبب لاحقًا.
2. باتباع خطوات جديدة، قم بإعداد قائمة المحتويات الأكثر تفصيلاً، ويفضل أن تكون مع اللون والعلامة التجارية و التكلفة التقريبيةكل عنصر، من الأفضل أن يكون باللغة الإنجليزية (وإلا سيتعين على موظف شركة الطيران ترجمة هذه القائمة لإدخالها في النظام)، اتصل بشركة الطيران وأرسل لهم هذه القائمة، وستتم إضافتها إلى تطبيق البحث عن الأمتعة. خلال الخمسة أيام الأولى، يتم البحث عن الأمتعة من قبل مطار الوصول، ثم يصبح البحث من مسؤولية شركة الطيران الناقلة (شركة الطيران المشار إليها في رقم الطلب - تذكر JFKLH12345؟)، وبعد 21 يومًا يمكنك يمكن التقدم بطلب للحصول على التعويض النهائي.
3. إذا لم يتم العثور عليها بعد 21 يومًا من تاريخ تقديم بيان بشأن الأمتعة المفقودة، فاتصل بشركة الطيران الناقلة للمطالبة بالتعويض. إذا لم أكن مخطئا، فإن قانون التقادم هو سنتان، أي. يمكنك التقدم بطلب التعويض خلال سنتين من تاريخ تقديم المطالبة بالتعويض عن الخسارة.

دفع التعويضات.
لدفع التعويض، ستحتاج إلى الاتصال بالمكتب التمثيلي لشركة الطيران الخاصة بك لتقديم طلب للدفع، والمستندات التي تؤكد الرحلة وحقيقة فقدان الأمتعة (بطاقات الصعود إلى الطائرة، وعلامات الأمتعة، ورقم المطالبة بفقدان الأمتعة، وتفاصيل الدفع). إذا لم أكن مخطئا، في الاتحاد الروسي يجب النظر في قرار التعويض قانونيا في غضون 30 يوما. قد يُطلب منك أيضًا تقدير تكلفة المحتويات، وإذا أمكن، تقديم إيصالات لشراء الحقيبة والأشياء الموجودة فيها (أدرك أن هذا غير واقعي في معظم الحالات، ولكن هذا جزء من الإجراء).
في السابق، كانت المدفوعات تتم على أساس وزن الأمتعة المسجلة - حوالي 20 دولارًا للكيلوغرام الواحد. وفي وقت لاحق، تم تغيير نظام الدفع واقتصرت مسؤولية شركات الطيران على 1000 وحدة تقليدية (يتم احتساب تكلفة الوحدة التقليدية داخل شركة الطيران)، والتي كانت في وقت عملي تقابل حوالي 1300 يورو. أولئك. حتى لو أحضرت إيصالًا لشراء حقيبة لويس فويتون المصنوعة من آلاف جلود أبو بريص البوليفية والمحشوة بالماس، فلن تحصل على أكثر من 1300 يورو.