Hướng dẫn synchronous behavior of php - hành vi đồng bộ của php

Điều đó có nghĩa là mỗi câu lệnh phải kết thúc trước khi câu lệnh tiếp theo thực hiện và khi câu lệnh cuối cùng trong trang thực thi, trang được trả lại cho máy khách. Ví dụ: nhận nội dung của một tệp:


Khá dễ theo dõi, trước tiên, nội dung của tệp được đọc thành một biến, sau đó được hiển thị cho máy khách. So sánh một triển khai không đồng bộ trong Node.js:

server.get('/', function(req, res) {
    fs.readFile('index.html', function(err, page) {
        res.writeHead(200, {'Content-Type': 'text/html'});
        res.write(page);
        res.end();
    });
});

Server.get sẽ quay lại ngay lập tức, nếu chúng tôi đang sử dụng mô hình thực thi PHP, trang sẽ hiển thị ngay lập tức. Nhưng điều xảy ra ở đây là hàm ẩn danh (req, res) {} được gọi bất cứ khi nào một yêu cầu xuất hiện. Tương tự fs.readFile trả về ngay lập tức, nhưng nó không trả về nội dung của tệp. Thay vào đó, nó gọi hàm (err, trang) {} Hàm ẩn danh khi tệp đã được đọc, đặt nội dung tệp vào biến "trang". Chỉ khi res.end () được gọi là phản hồi được trả lại cho máy khách.

Tương tự như vậy, trong PHP, bạn có thể gọi giấc ngủ (5) để ngủ trong 5 giây. Điều đó chặn toàn bộ quy trình PHP trong 5 giây, các quy trình khác sẽ tiếp tục phục vụ khách hàng. Nhưng nếu bạn gọi giấc ngủ trong node.js (tôi tin rằng có một mô -đun để cung cấp chức năng này), nó sẽ chặn tất cả các yêu cầu hiện đang được tiến hành và không có cuộc gọi nào khác sẽ được bắn cho đến khi giấc ngủ kết thúc. Đó là lý do tại sao bạn thường sử dụng setinterval/setTimeout thay vì ngủ.

Chào buổi sáng, tôi muốn biết liệu tuyên bố chuẩn bị PHP là đồng bộ hay không đồng bộ, ví dụ:

$req1 = "UPDATE ...";
$statement1 = $connection->prepare($req1);
$statement1->execute();

$req2 = "SELECT ...";
$statement2 = $connection->prepare($req2);
$statement2->execute();

Vì vậy, kết quả của yêu cầu thứ hai phụ thuộc vào số thứ nhất, nó có thể gây ra vấn đề hoặc kết quả sai, trong các từ khác, có khả năng yêu cầu thứ hai thực hiện trước lần thứ nhất.

Tôi đã tìm kiếm câu trả lời, nhưng tôi chưa tìm thấy câu trả lời rõ ràng. Cảm ơn bạn.

Các nhà phát triển dựa vào & nbsp; các cuộc gọi PHP không đồng bộ để thực hiện các yêu cầu mà không làm giảm ứng dụng - nhưng điều đó không phải lúc nào cũng như vậy. Trong blog này, chúng tôi nhìn vào & nbsp; PHP không đồng bộ, cách thức hoạt động, cách sử dụng và cách so sánh với PHP đồng bộ. Hãy bắt đầu với những điều cơ bản

PHP không đồng bộ là gì?

PHP không đồng bộ đề cập đến mã PHP được viết bằng mô hình không đồng bộ. Nói cách khác, các ứng dụng không đồng bộ có thể đa tác vụ. Điều này là rất quan trọng bởi vì theo truyền thống, có rất nhiều thời gian khi CPU ngồi IDLE trong khi một ứng dụng PHP quản lý các nhiệm vụ I/O. Không chỉ hiệu suất ứng dụng tổng thể chậm này, mà còn làm giảm việc sử dụng phần cứng.there’s a lot of time when a CPU sits idle while a PHP application manages I/O tasks. Not only does this slow overall application performance, but also, it lowers hardware utilization.

Ý tưởng đằng sau PHP không đồng bộ là tận dụng tối đa tất cả các chu kỳ CPU có sẵn để tăng hiệu suất PHP. Nó thực hiện điều này bằng cách giữ các tác vụ I/O không chặn chạy trong nền và để CPU xử lý các tác vụ khác khi nó chờ đợi dữ liệu và hướng dẫn cần thiết để hoàn thành các tác vụ I/O. Bằng cách giúp các ứng dụng của bạn có thể & NBSP; quản lý nhiều yêu cầu cùng một lúc, họ có thể tận dụng tối đa các tài nguyên phần cứng có sẵn, có thể tăng & NBSP; ROI và mức dịch vụ cùng một lúc.ROI and service levels at the same time.

Làm thế nào để bạn kích hoạt nó?

Bằng cách sử dụng các tiện ích mở rộng như swoole hoặc khung cho PHP như Reactphp, bạn có thể giúp các ứng dụng PHP của bạn có thể chấp nhận các yêu cầu và phản hồi không đồng bộ, sử dụng các vòng lặp sự kiện. & NBSP;

Khung Php Async phổ biến nhất là gì?

Theo khảo sát cảnh quan PHP năm 2022 của chúng tôi, khung Async Php phổ biến nhất là Reactphp.

Tải xuống báo cáo miễn phí để mở khóa những hiểu biết bổ sung về Async PHP.

Tải xuống báo cáo

PHP đồng bộ là gì?

Mã PHP đồng bộ là tuần tự. Các nhiệm vụ cá nhân phải được hoàn thành trước khi bạn có thể bắt đầu một nhiệm vụ khác. Vì vậy, với PHP đồng bộ, CPU chỉ có thể xử lý một tác vụ I/O tại một thời điểm. Khi hoàn thành một nhiệm vụ, nó chuyển sang nhiệm vụ tiếp theo trong & nbsp; hàng đợi.ith synchronous PHP, the CPU can process only one I/O task at a time. When it completes one task, it moves on to the next one in the queue.

PHP ban đầu được tạo ra để hỗ trợ phát triển đồng bộ, vì vậy hầu hết các nhà phát triển PHP đều quen với việc chỉ viết mã đồng bộ với ngôn ngữ. Prefork với mod_php với Apache hoặc PHP-FPM với Apache hoặc Nginx.

Các cuộc gọi đồng bộ và không đồng bộ là gì?

Có hai loại cuộc gọi API; & nbsp; các cuộc gọi đồng bộ, phải được hoàn thành trước khi thực hiện mã tiếp tục trên API; & nbsp; và các cuộc gọi không đồng bộ, không tạm dừng thực thi mã trên API & NBSP; cuộc gọi được hoàn thành.

Liệu xử lý không đồng bộ có tăng hiệu suất PHP không?

Có.Because asynchronous processing enables the management and completion of more than one task at a time, you can dramatically boost PHP performance by using it instead of synchronous PHP. 

Trong một số điểm chuẩn, bạn có thể tăng hiệu suất PHP (thông lượng) lên 100 lần, bằng cách kích hoạt PHP không đồng bộ thông qua swoole, thay vì sử dụng máy gia tốc quy trình như PHP-FPM với & NBSP; mã đồng bộ. Điều đó bởi vì PHP-FPM không hỗ trợ giao tiếp không đồng bộ, thời gian thực bằng cách sử dụng các giao thức như WebSockets.

Hội thảo trên web này cho thấy cách xử lý Asynchronous & NBSP; có thể giúp tăng hiệu suất PHP, trong số các mẹo cải thiện hiệu suất khác.

Hướng dẫn synchronous behavior of php - hành vi đồng bộ của php

Khả năng mở rộng, xử lý không đồng bộ và tối ưu hóa cho phần mềm WAVE PHP - Rogue

Bạn nên sử dụng mô hình nào? & NBSP;

Như với hầu hết các câu hỏi xung quanh thời gian chạy, máy chủ web và lập trình nói chung, quyết định sử dụng PHP không đồng bộ hoặc đồng bộ sẽ khác nhau giữa các trường hợp sử dụng. Để sử dụng PHP không đồng bộ, mã của bạn cần hỗ trợ nó. Ngày nay, hầu hết các tiện ích mở rộng PHP sẵn sàng chỉ có thể hỗ trợ các mô hình đồng bộ vì chúng sử dụng các phương thức như & NBSP; chặn các cuộc gọi I/O. & NBSP;

Có thể viết lại & nbsp; mã của bạn để hỗ trợ các quy trình không đồng bộ bằng cách sử dụng khung A & nbsp; như Swoole để quản lý xử lý nền. Ví dụ: các cuộc gọi yêu cầu & nbsp; I/O sẽ cần được gửi đến Swoole để quản lý trong nền để ứng dụng của bạn có thể tiếp tục hướng dẫn tiếp theo. Khi dữ liệu quay trở lại từ cuộc gọi I/O, Swoole sau đó sẽ cần & nbsp; để trả lại quyền kiểm soát cuộc gọi I/O của bạn cho ứng dụng của bạn, để có thể trao dữ liệu được yêu cầu cho quy trình.

Những lợi ích của PHP không đồng bộ là gì?

Tái cấu trúc các ứng dụng của bạn để hỗ trợ các quy trình không đồng bộ có thể yêu cầu một số nỗ lực. Tuy nhiên, bằng cách làm, bạn có thể:

  • Cải thiện hiệu suất PHP và trải nghiệm người dùng.
  • Tối đa hóa việc sử dụng phần cứng.
  • Có khả năng, giảm dấu chân trung tâm dữ liệu của bạn.

Các dự án để bắt đầu với PHP không đồng bộ

Vì mã của bạn phải được viết theo cách hỗ trợ các quy trình không đồng bộ, bạn sẽ cần sử dụng một dự án có thể làm điều đó. Dưới đây là ba khuyến nghị hàng đầu của chúng tôi:

  • Swoole & nbsp; - Khung lập trình an tâm Coroutine PHP. – Coroutine PHP ansychronous programming framework.
  • Reactphp & nbsp;-I/O điều khiển sự kiện, không chặn với PHP. – Event-driven, non-blocking I/O with PHP.
  • AMPHP & NBSP;-Khung đồng thời không chặn cho PHP. – Non-blocking concurrency framework for PHP.

Đào tạo: Các lớp PHP cho người mới bắt đầu đến cấp độ cao

Bạn có phải là nhà phát triển PHP dành cho người mới bắt đầu, trung cấp hoặc nâng cao đang tìm cách tăng kỹ năng PHP của bạn? Không cần phải cảm thấy choáng ngợp. Lấy một lớp học từ Zend by perforce. Đội ngũ chuyên gia PHP của chúng tôi dạy nhiều khóa học & NBSP; trực tuyến và tại chỗ. Bạn cũng có thể thể hiện chuyên môn PHP của mình và trở thành kỹ sư được chứng nhận A & NBSP; Zend.online and onsite PHP courses. You can also demonstrate your PHP expertise and become a Zend Certified Engineer.

Tìm hiểu thêm

Tài nguyên bổ sung

  • 101 Hướng dẫn: Phát triển các ứng dụng web với PHP
  • Blog: & nbsp; PHP là gì? & Nbsp;
  • Dịch vụ: & nbsp; Zend Php Audit & NBSP;
  • Blog: & nbsp; hàm PHP là gì?
  • Blog: & NBSP; Giao diện chức năng nước ngoài PHP là gì?
  • Blog: & nbsp; lợi ích giao hàng liên tục và rào cản & nbsp;

Blog này & nbsp; ban đầu được xuất bản vào ngày 18 tháng 12 năm 2019. Nó đã được cập nhật cho độ chính xác và rõ ràng.