2013-03-23 22 views
6

tôi đến một cách ngẫu nhiên trên những thứ như:Are php ve non-blocking

<?php 
    declare(ticks=1); 

    // using a function as the callback 
    register_tick_function('my_function', true); 

    // using an object->method 
    $object = new my_class(); 
    register_tick_function(array(&$object, 'my_method'), true); 
?> 

Mà có thể được tìm thấy tại register_tick_function.

Tôi muốn biết liệu việc sử dụng tính năng này trong php có bị chặn hay không?

EDIT: Những gì tôi có nghĩa là bằng cách này nếu tôi có nhiều hơn thì một trong php đánh dấu hoạt động bắt đầu trên cùng một sợi đó là khả năng xử lý IO ở chế độ nền trong khi ve khác chạy hay nó cần phải chờ đợi cho mỗi đánh dấu để kiểm soát quá mức?

Trả lời

2

Chức năng đánh dấu đang chặn. PHP nói chung không (nguyên bản) hỗ trợ thực hiện song song trong cùng một yêu cầu. Vì vậy, không, bạn sẽ không thể xử lý IO trong nền, hoặc một cái gì đó như thế.

Lỗi nào ít khi thực hiện cuộc gọi đến chức năng đánh dấu sau mỗi câu lệnh. Vì vậy, những gì bạn nhận được là một cái gì đó như thế này:

tick(); 
$a = 1; 
tick(); 
$b = 2; 
tick(); 
// ... 

Và nó sẽ cư xử giống như thế :)

Mặc dù, chỉ để bạn hiểu hay không đây là thực sự quan trọng: Khi một callback được thực hiện trong JS (ví dụ: một thời gian chờ/sự kiện được kích hoạt), sau đó nó chỉ là chặn.

+0

Tôi hoàn toàn nhận thức được việc không chặn và tôi nên đặt câu hỏi tốt hơn một chút, tôi đã cập nhật các câu hỏi để phản ánh điều này. – WojonsTech

+0

@WojonsTech Xin lỗi, tôi không hiểu ý bạn là gì. Chức năng đánh dấu là chặn như bất kỳ chức năng nào khác trong PHP. Vì vậy, không, họ không thể chờ đợi cho IO trong khi ve khác thực hiện, hoặc một cái gì đó như thế. – NikiC

+0

thats fine có vẻ như bạn đã trả lời câu hỏi của tôi, khá nhiều chức năng đánh dấu không nhảy xung quanh ve trong khi họ đang nhàn rỗi nó xử lý chúng theo thứ tự – WojonsTech

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