2012-12-24 10 views
6

Trong khi chạy một vòng lặp vô hạn trong PHP trên Apache, các trang/tập lệnh khác sẽ treo (mất vĩnh viễn để tải) cho đến khi tôi ngắt thực thi tập lệnh. Tuy nhiên, các trang khác sẽ vẫn thực thi trên một phiên hoặc trình duyệt người dùng khác. Điều này có thể được giải quyết?Vòng lặp vô hạn PHP ngăn truy cập vào các tập lệnh khác?

+0

Có bao nhiêu CPU trong máy của bạn? Có bao nhiêu luồng đang chạy trong apache? Tôi đã nghĩ rằng nhiều kịch bản sẽ có thể chạy cùng một lúc, nói chung. Có thể bạn cần: http://httpd.apache.org/docs/2.2/mod/worker.html (Tôi giả định "vô hạn" của bạn chỉ là "trong khi (1);" hoặc một số nội dung như vậy, và không phải cái gì phức tạp hơn có thể gây xung đột khóa với tệp main.php của bạn) –

+0

Tập lệnh vô hạn của bạn có cần phiên không? Nếu không, bạn có thể chạy nó từ dòng lệnh. Mặc dù php có thể không phải là công cụ thích hợp để giữ cho một chương trình đang chạy ... – jeroen

+1

Bạn có thể thử sử dụng ID phiên dành riêng/đặc biệt cho tập lệnh chạy vô hạn của mình. Chỉ cần chắc chắn rằng nó không thể đụng độ với session ID bình thường của bạn – jeroen

Trả lời

4

Đây là vấn đề về tình trạng chủng tộc.

Khi bạn session_start() phiên, tệp được đính kèm với id phiên được mở bằng quyền hạn chế (bị khóa để đọc và viết). Nếu một số khác được gọi là session_start(), nó sẽ chờ tệp phiên được mở khóa, để tránh tập lệnh thứ hai sửa đổi không đồng bộ phiên.

Hãy xem qua số this article giải thích rõ hơn những gì đang diễn ra.

+4

Đó không phải là định nghĩa của một "điều kiện chủng tộc", nó là một nguồn tài nguyên bị khóa đơn giản. Câu trả lời đúng mặc dù. – deceze