Song song trong php ✅ Mới nhất
Thủ Thuật về Song song trong php 2022
Hoàng Lê Minh Long đang tìm kiếm từ khóa Song song trong php được Update vào lúc : 2022-12-19 13:25:13 . Với phương châm chia sẻ Bí kíp về trong nội dung bài viết một cách Chi Tiết 2022. Nếu sau khi tham khảo Post vẫn ko hiểu thì hoàn toàn có thể lại Comment ở cuối bài để Admin lý giải và hướng dẫn lại nha.Vì PHP không đáp ứng những luồng gốc nên chúng tôi phải sáng tạo để xử lý song song. Tôi sẽ ra mắt 3 khái niệm cơ bản rất khác nhau để mô phỏng đa luồng tốt nhất hoàn toàn có thể
Nội dung chính Show- Sử dụng những cuộc gọi hệ thốngSử dụng nĩa()sử dụng cuộn trònCòn tốc độ thì sao? Song song trong PHP là gì?Làm thế nào tất cả chúng ta hoàn toàn có thể đạt được xử lý song song trong PHP?Đồng thời PHP là gì?
Sử dụng những cuộc gọi khối mạng lưới hệ thống
Nếu bạn có một số trong những kiến thức cơ bản về linux, bạn sẽ biết rằng hoàn toàn có thể khởi đầu một quy trình nền bằng phương pháp thêm dấu và vào lệnh gọi khối mạng lưới hệ thống (trong Windows, đó là lệnh khởi đầu)
[email protected]:/var/www$ php index.php & [1] 3229Tập lệnh PHP đang chạy âm thầm trong nền. Những gì đang được in ra trình bao (3229) là id tiến trình, để chúng tôi hoàn toàn có thể hủy tiến trình bằng phương pháp sử dụng
kill 3229Một vấn đề với phương pháp này là bất kỳ đầu ra nào của tập lệnh đều bị mất, vì vậy chúng tôi phải chuyển hướng luồng đầu ra sang một tệp, in như vậy này
php index.php > output.txt 2>&1 &Mục đích của 2>&1 đáng sợ là chuyển hướng thiết bị xuất chuẩn sang thiết bị xuất chuẩn, vì vậy khi tập lệnh của bạn tạo ra bất kỳ loại lỗi php nào, nó cũng tiếp tục bị bắt bởi tệp đầu ra. Đặt mọi thứ lại với nhau, chúng tôi nhận được
$cmd = "php script.php"; $outputfile = "/var/www/files/out."; $pidfile = "/var/www/files/pid."; for ($i = 0; $i < $process_count; $i++) exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $cmd, $outputfile.$i, $pidfile.$i));Có vẻ khó hiểu, phải không? . >> %s vào lệnh, để id quá trình của tập lệnh nền được ghi vào một tệp. Điều này chứng tỏ là hữu ích để theo dõi tất cả những quy trình đang chạy
Nếu bạn muốn hủy tất cả những quy trình php, lệnh sau sẽ thực hiện
killall phpKhông nên phải nói rằng khi bạn thêm php shebang #. /usr/bin/php lên đầu tập lệnh của bạn và làm cho nó hoàn toàn có thể thực thi được bằng tập lệnh chmod +x. php, lệnh khối mạng lưới hệ thống cần phải sửa đổi thành. /ngữ cảnh. php thay vì tập lệnh php. php
Để kiểm tra xem một tiến trình có còn đang chạy hay là không, bạn hoàn toàn có thể sử dụng một số trong những biến thể của lệnh ps như đã thực hiện tại đây (đánh cắp từ Steffen)
function is_running($pid) $c = "ps -A -o pid,sSử dụng nĩa()
Sử dụng những hàm pnctl của php, bạn hoàn toàn có thể rẽ nhánh một quy trình (pcntl_fork, không khả dụng trên Windows). Trước khi bạn quá phấn khích, hãy tham khảo phần trích dẫn sau đây từ một phản hồi được viết trên php. net phản ánh đúng chuẩn kinh nghiệm tay nghề của tôi với forking trong php
Bạn nên _rất_ thận trọng với việc sử dụng fork trong những tập lệnh ngoài những ví dụ mang tính chất chất học thuật, hoặc đúng hơn là tránh nó hoàn toàn, trừ khi bạn nhận thức rõ về những hạn chế của nó.
Vấn đề là nó chỉ rẽ nhánh toàn bộ quá trình php, không riêng gì có gồm có trạng thái của tập lệnh mà còn cả trạng thái bên trong của bất kỳ tiện ích mở rộng nào được tải.
Điều này nghĩa là tất cả bộ nhớ được sao chép, nhưng tất cả những bộ mô tả tệp được chia sẻ Một trong những tiến trình cha và con.
Và điều đó hoàn toàn có thể gây ra sự tàn phá lớn nếu một số trong những tiện ích mở rộng duy trì nội bộ bộ mô tả tệp.
Ví dụ chính tất nhiên là mysql, nhưng đây hoàn toàn có thể là bất kỳ tiện ích mở rộng nào duy trì những tệp đang mở hoặc ổ cắm mạng.
Bạn đã được cảnh báo. Nhìn vào ví dụ sau
for ($i = 0; $i < 4; $i++) pcntl_fork(); echo "hi there! pid: " . getmypid() . "n";đầu ra
[email protected]:/var/www$ php script.php hi there! pid: 3534 hi there! pid: 3536 hi there! pid: 3538 hi there! pid: 3539 hi there! pid: 3540 hi there! pid: 3541 hi there! pid: 3542 hi there! pid: 3537 hi there! pid: 3543 [email protected]:/var/www$ hi there! pid: 3544 hi there! pid: 3545 hi there! pid: 3546 hi there! pid: 3548 hi there! pid: 3547 hi there! pid: 3549 hi there! pid: 3550Như bạn hoàn toàn có thể thấy, chúng tôi nhận được 2 ^ quy trình đếm ngã ba. Ở đâu đó ở giữa đầu ra, tập lệnh gốc đã hoàn thành xong nhưng một số trong những nhánh vẫn đang chạy. Thậm chí hoàn toàn có thể tiếp xúc với những quy trình mà bạn rẽ nhánh. Forking là một nghành rất thú vị của khoa học máy tính, tuy nhiên tôi không khuyên bạn nên sử dụng fork trong những ứng dụng php trong thế giới thực
sử dụng cuộn tròn
Cách ở đầu cuối để xử lý song song nhiều tập lệnh là lạm dụng sever web và cuộn tròn. Với curl, chúng tôi hoàn toàn có thể thực hiện song song nhiều yêu cầu (lấy cảm hứng từ Gonzalo Ayuso)
________số 8Ở đây, chúng tôi gọi ngữ cảnh calc. php gấp 15 lần. nội dung của tính toán. php là
Đầu ra như sau
kill 3229 0Thật thú vị khi thấy rằng tất cả chúng ta thấy id quá trình tương tự một vài lần. Hãy nhớ rằng bạn kích hoạt một yêu cầu , vì vậy bạn đang mất hiệu suất vì sever web phải thực hiện một số trong những việc làm. Hơn nữa, tập lệnh được gọi sẽ hoạt động và sinh hoạt giải trí với php thông thường. ini chứ không phải php-cli. ban đầu
Còn tốc độ thì sao?
Bạn sẽ học được gì từ bài đăng này, khi bạn không biết phương pháp xử lý song song nào là nhanh nhất có thể? . Về cơ bản, đây là calc tập lệnh điểm chuẩn của tôi. php
kill 3229 1khối mạng lưới hệ thống của tôi
kill 3229 2Tôi hoàn toàn biết rằng điểm chuẩn này sẽ không mang tính chất chất đại diện, chính bới việc ghi những tệp kết quả vào đĩa cứng hoàn toàn có thể ảnh hưởng đến những quy trình khác vẫn đang chạy và so sánh thời gian của tôi cũng hoàn toàn có thể hơi không đúng chuẩn. À, trước khi bạn hỏi. Tôi chưa sử dụng set_time_limit vì nó quá tệ. Vì vậy, mang lại kết quả
kill 3229 3Như bạn hoàn toàn có thể thấy, càng nhiều quy trình song song, tổng số lần lặp lại càng nhiều. Tôi chưa kiểm tra 64 quy trình và hơn thế nữa vì khối mạng lưới hệ thống của tôi gần như thể bị đóng băng (sử dụng bộ nhớ và sử dụng cpu). Vui lòng diễn giải những kết quả theo bất kỳ cách nào bạn muốn nhưng ở đầu cuối, nó chỉ tạm dừng ở phương thức exec – vì fork là xấu xa và curl không phải là một giải pháp thay thế tráng lệ
Cuối cùng, nếu bạn muốn tự mình thực hiện một số trong những thử nghiệm, thì đây là tệp điểm chuẩn của tôi. Đặt nó trong cùng thư mục với calc. php phía trên, cấp quyền thực thi cho tệp và tạo thư mục results. Các tập tin được gọi là phương pháp sử dụng. /Băng ghế. phương thức php processcount, vì vậy những cuộc gọi hoàn toàn có thể là