2013-03-01 32 views
7

Tôi đang sử dụng phần mở rộng pthreads cho PHP. Khi tôi thực thi kịch bản PHP từ cmd trên Windows, tôi nhận được các luồng song song nhưng khi tôi gọi cùng một tập lệnh từ Apache, tôi nhận được một kết quả khác và có vẻ như với tôi như việc thực hiện một luồng đơn lẻ.pthreads cho PHP không thực thi các chuỗi song song trong Apache

Có cấu hình nào mà tôi nên thực hiện cho Apache để nhận phản hồi như cmd (song song) không?

class AsyncOperation extends Thread { 
    public function __construct($arg){ 
     $this->arg = $arg; 
    } 

    public function run(){ 
     if($this->arg){ 
      for($i = 0; $i < 50; $i++) { 
       echo "Yoo " . $this->arg . "<br>\n"; 
      } 
     } 
    } 
} 
$thread = new AsyncOperation("World ----------"); 
$thread2 = new AsyncOperation("Second -------------------------"); 
$thread->start(); 
$thread2->start(); 

for($i = 0; $i < 100; $i++) { 
    echo "Standard <br>\n"; 
} 

$thread->join(); 
$thread2->join(); 

mã ví dụ cho phản ứng trong cmd như:

Yoo World ----------<br> 
Yoo World ----------<br> 
Yoo World ----------<br> 
Standard <br> 
Standard <br> 
Yoo World ----------<br> 
Yoo Second -------------------------<br> 
Standard <br> 
Standard <br> 

Trong trình duyệt web:

Cập nhật: trên các trình duyệt khác nhau tôi nhận được kết quả khác nhau; vấn đề này có thể liên quan đến bộ đệm, mà tôi sẽ điều tra.

+1

có u cố gắng đặt 1 giây ngủ trong mỗi hoạt động không đồng bộ? – Blacksonic

+0

kết quả khá giống nhau. –

+0

bạn mong đợi kết quả chuỗi xen kẽ nào? sau đó chia chuỗi trong hàm chuỗi, đầu ra chuỗi đầu tiên sau đó ngủ cho vài millisecs và chuỗi thứ hai đầu ra. – SparKot

Trả lời

2

Không có gì được mô phỏng, bạn đang thực hiện các chuỗi thực. Bạn không nên viết đầu ra tiêu chuẩn từ các chủ đề trong chế độ SAPI, bạn sẽ gặp phải lỗi và hành vi không mong muốn, không thể kiểm soát được, có quá nhiều môi trường và SAPI để che nó tốt, vì vậy nó không được đề cập đến, đừng làm thế.

Ngay cả trong đầu ra chế độ CLI của mã phức tạp sẽ bị cắt xén, để giải quyết vấn đề này, bạn có thể xác định phương pháp được bảo vệ trong bất kỳ đối tượng nào bạn chuyển đến tất cả các ngữ cảnh. đối tượng là một pthreads một, chỉ có một bối cảnh sẽ có thể viết đầu ra tiêu chuẩn tại một thời điểm ... cùng một đối tượng có thể được sử dụng trong môi trường SAPI bằng cách trao đổi đầu ra tiêu chuẩn cho cơ sở dữ liệu ...

+0

bạn có bất kỳ mã ví dụ nào để tôi có thể xem chính xác cách thực hiện điều đó không? tôi có nghĩa là nếu có chủ đề thực hành tốt tôi muốn đọc chúng. –

+1

http: // stackoverflow.com/a/14565559/1658631 chứa một ví dụ trong đó đầu ra cho bàn điều khiển được đồng bộ bằng cách sử dụng các phương thức được bảo vệ, có rất nhiều ví dụ được bao gồm trong việc phân phối các pthread bao gồm nhiều chủ đề khác nhau. –

+0

@EmrahMehmedov bạn cũng có thể đánh chìm kết quả để xếp chồng lên nhau và sử dụng print_r để xem từng bước cách xử lý .... Không có gì được mô phỏng – Baba

Các vấn đề liên quan