Hướng dẫn dùng php async trong PHP

What is async

Chắc hẳn bạn đã nghe tới cái khác niệm lập trình đồng bộ [synchronous] và lập trình bất đồng bộ [asynchronous], gọi tắt là sync và async.

Lập trình đồng bộ tức là các dòng code được thực hiện tuần tự, đoạn code ở dưới phải đợi cho đến khi đoạn code ở trên kết thúc.

Còn đối với xử lý bất đồng bộ thì đoạn code ở dưới có thể chạy khi mà đoạn code ở trên chưa thực thi xong. Hai function được gọi theo thứ tự, nhưng function được gọi sau không phải chờ function được gọi trước kết thúc, mà có thể thực hiện gần như đồng thời. Các bạn có thể quen thuộc với kiểu lập trình này ở JS qua việc sử dụng callback trong setTimeout, promise chain hay async/await function.

Có thể kể đến một số ứng dụng của async programming như:

  • Xử lý đồng thời các tác vụ độc lập với nhau
  • Xử lý các tác vụ tốn thời gian [như network request [network I/O], read file [file I/O]...] mà không block toàn bộ ứng dụng, trong lúc chờ đợi kết quả vẫn có thể xử lý các tác vụ khác

Async in PHP

Đa số người ta viết PHP code theo cách đồng bộ.

Tuy nhiên cũng có khá nhiều thư viện hỗ trợ lập trình async trong PHP như amphp, ReactPHP, Swoole, Guzzle, hay thậm chí ext-curl của PHP và gần đây là PHP Fibers.

Trong loạt bài viết lần này mình sẽ giới thiệu và thực hành một số use case bằng các thư viện trên.

Bắt đầu với use case đơn giản. Request đồng thời nhiều HTTP requests.

Giả sử bạn muốn lấy data từ 1 list urls, và việc xử lý data của các url này là độc lập với nhau, thay vì phải đợi request và xử lý từng url thì chúng ta có thể tăng tốc bằng cách request đồng thời.

Trước hết, ta sẽ giả lập response trả về bằng 1 đoạn script đơn giản sau [nhận request, sleep random từ 1 - 5 giây và trả về thông tin thời gian bắt đầu request, thời gian kết thúc]:

Chủ Đề