2012-10-09 14 views
6

PHP, görünüşte bir Thread sınıfını destekliyor. Ayrıca bir Mutex ve Cond sınıfı vardır. Yine de, iyi seçenekler ile derlemek ve buna sahip olmak için bir PECL uzantısı eklemek gerekir.10 PHP // Thread // Mutex // Cond Kullanılıyor

Başlamak için iyi bir öğretici var mı? Her bir Sınıf/Yöntemin adil kullanımını açıkça gösteren bir şey.

Bu sınıflarla nasıl baş edeceğimi bilmiyorum. Mümkün olduğunca çok sayıda yöntem sergileyen çok basit şeyler yapmanın somut örneklerine ihtiyacım var.

Teşekkür ederiz.

+0

Henüz serbest bırakılmadı. PHP geliştiricileri muhtemelen size daha fazla yardımcı olabilir. Cevabınız için – Ryan

cevap

14

Sanki serbest bırakıldı, github sayfalarında ... git (kaynak) Eğer yapabilirsen, daha yeni kod pencereler indirme ...

http://pthreads.org biraz daha bilgi içerir, PECL'de mevcuttur ve örnekler ödeme

Eğer ben, kesin bir cevap vermek doğrudan benimle temas kurmaktan çekinmeyin olabilir yapmanız gerekenler daha spesifik iseniz ... belgelerin eksikliği üzgünüm

, ben ... çok klasörü çalışmamda ne kadar az zaman geçirdiğime dair pthreads'ları agresif olarak geliştiriyorum - işten tatildeyken yazdım ve Şimdi işe geri döndüm - zaman bulduktan sonra dokümantasyon mümkün olduğunca güncellenecektir.

İş parçacığı genellikle karmaşık bir şeydir, ancak hiç ... 100'den daha az bir iş parçacığı havuzu görmemiş olması gerekir. https://github.com/krakjoe/pthreads/blob/master/examples/Pooling.php ... bir tane var! Sen PHP'de konuları çalışmasına koşullar veya Muteksleri hakkında bilmek gerekmez

, pthreads ... o I will mükemmel, sorgulamadan kolay peasy herşeyi ... gemide

Jump içerir

+0

Tamamen aradığım şey buydu, teşekkürler. İhtiyacım olduğunda sizinle iletişime geçmekten çekinmeyeceğim. – dader

+1

Pthread apache içinde çalışıyor mu? eğer öyleyse, mpm-prefork veya mpm-worker almalı mıyım? – dader

+0

Her SAPI ortamında çalışır, seçiminizi yapın. –

1

İş parçacıkları herhangi bir dilde kolay değildir. Farklı bir düşünce çizgisi gerektirir (doğrusal olmayan). Bahsettiğiniz şey herhangi bir yayımlanmış PHP sürümünde mevcut olmadığından, pctnl ve shmop işlevselliği ile oynamanızı tavsiye ederim. Özellikle pcntl_fork. Her ikisi de bir süredir var ve destekleniyor. Çok işlemcidir ve iş parçacığı değildir, ancak aradığınız şeyi başarabilir. Ancak iş parçacığı daha verimli.

Tipik olarak, iş için bir ana işlem denetimi yaptırmayı, çatallı bir sürece devretmesini ve sonra alt işlemin işini yaparken daha fazla iş olup olmadığını kontrol etmeyi tercih edebilirsiniz. Ebeveyn süreci, çocuk süreçlerinin durumunu kontrol edebilir. Örneğin, yalnızca belirli sayıda çocuk işlemlerini engellediğinizden emin olabilirsiniz ve bir başkasını unutmadan önce birinin tamamlanmasını bekleyebilirsiniz.

CPU yükünün yüksek olduğu noktada 500 işleme kadar açtım. Ana işlem, sistem yükünü kontrol edecek ve yük çok yüksek olduğunda artık çatallanmayacaktır.

Gerçekten ihtiyacınız varsa, iş parçacığıyla alacağınız işlevsellikten faydalanmak için paylaşımlı belleği (shmop işlevleri) kullanabilirsiniz.

+1

teşekkürler. Pcntl_fork ile çoktan çalıştım ve bu işin bir kısmını yapıyor, ama bana öyle geliyor ki, iş parçacığı beni süreçler arası iletişimin üstesinden koruyacaktı (iş parçacığının farklı iş parçacıkları arasında değişkenler paylaşma konusunda harika olanaklar sağladığını varsayarak, yanlış mıyım?) ?).Özellikle de, immutable nesneleri kullanırken (yine yanlış mıyım?) Düşünüyorum. – dader

+0

Haklısınız, iplikler sizi genel giderlerden korur. Paylaşımlı hafıza işlevleri ile "değişken paylaşma" işlemini iş parçacığı olmadan yapabilirsiniz. Dürüst olmak gerekirse, iş parçacığı yapmak ve süreçler hakkında endişelenmek istiyorsanız, muhtemelen PHP'nin yanında bir dile bakmalısınız. –

+0

Size tamamen katılıyorum, PHP bu görev için bir seçim olmaktan çok uzaktır. – dader

İlgili konular