Hướng dẫn multi thread php

Multi-thread là gì?

Multithread cho phép nhiều thành phần trong một chương trình được thực thi đồng thời trong một chương trình. Multithread cho phép ứng dụng của bạn tận dụng hết chức năng xử lý của bộ xử lý trung tâm (CPU).

Hiện tại multithread được hỗ trợ trên các ngôn ngữ hay nền tảng như Java, .Net, v.v....Trong khi đó khái niệm này vẫn chưa thật sự phổ biến trong môi trường của ngôn ngữ PHP. Nguyên nhân của những vấn đề này, cũng như các vấn đề phức tạp hơn mình sẽ thảo luận kỹ hơn vào các bài viết ở các kỳ sau( nếu rảnh)

Hướng dẫn multi thread php
Cài PHP multi thread thôi!

Cài thử

Để chạy được các chương trình có hỗ trợ multithread trong php thì những gì chúng ta cần 2 thứ:

  • PHP phải hỗ trợ ZTS (Zend thread safe), mặc định là bản download về là không có cái này.
  • pthreads extension được load vào PHP

Với điều kiện 1 thì chúng ta cần phải compile là ngôn ngữ PHP  và điều kiện thứ 2 thì các bạn có thể tham khảo tại php.net. Tuy nhiên theo mình thì để cài đặt 2 thứ này khá tốn thời gian và công sức. Do đó mình đề nghị các bạn cài đặt thông qua sử dụng Docker với thời gian cài đặt nhanh và hiệu quả. Do mình đã quên cái xài windows nên các bài viết của mình sẽ chỉ giới thiệu các bạn trên môi trường linux nói chung (thật ra là Ubuntu:14.04 LTS).

  1. Cài docker và pull image có PHP + pthread
//Cài đặt docker

$ sudo curl -fsSL https://get.docker.com | sh
$ sudo usermod -aG docker $USER
$ docker pull wyrihaximus/php70-pthreads

2. Test thử coi chạy dc PHP hok nhé!

$ mkdir multithread && cd multithread
$ echo "<?php echo 'PHP is very nice'.PHP_EOL; " > main.php
$ docker run -it --rm --name multithread -v $(pwd):/multithread wyrihaximus/php70-pthreads /multithread/main.php

Hình bên dưới là kết quả khi thực hiện theo các bước như trên.

Hướng dẫn multi thread php
Run PHP with docker

Bạn nào đang dùng Windows 10 và PHP7 có thể tham khảo bài viết cách cài đặt pthreads trên windows 10 để chiến multithreading.

Hướng dẫn cài đặt pthreads để code multithreading trong PHP

Bài viết hướng dẫn cách cài đặt extension pthreads cho phép chúng ta có thể thaotác với thread, hay thấy dân chúng dịch lập trình đa luồng trong PHP.Việc xử lýđa luồng trong PHP vốn tương đối lạ và ít tài liệu trên thế giới và nước mìnhcũng vậy. Bài viết nằm trong loạt bài viết về PHP Multithread…

Ricky Nguyễn

Hướng dẫn multi thread php

Lập trình thử multi-thread trong PHP

Để chạy đoạn code trên thì mình chạy thử theo hình bên dưới nhé.

Hướng dẫn multi thread php

Bài này khá đơn giản, do mình đang chạy dự án nên không có viết chi tiết dc.

PS. Bạn nào gặp khó khăn gì về php và multithread có thể comment bên dưới để mình chỉnh sửa thêm nhé.

Sắp tới mình sẽ ra loạt bài về PHP multithreading, hi vọng được sự ủng hộ của các bạn.

Bài viết hướng dẫn cách cài đặt extension pthreads cho phép chúng ta có thể thao tác với thread, hay thấy dân chúng dịch lập trình đa luồng trong PHP.  Việc xử lý đa luồng trong PHP vốn tương đối lạ và ít tài liệu trên thế giới và nước mình cũng vậy. Bài viết nằm trong loạt bài viết về PHP Multithreading trên blog KiKiGuru.

Mình xin nhắc luôn là do extension pthreads đã ngừng phát triển từ năm 2018. Các bạn không nên dùng nó để làm product đem bán nhé. Mình viết bài này cho các bạn sinh viên là chính, mình hi vọng rằng các bạn có thể hiểu sơ sơ về threading trong PHP hoặc cho bạn nào thích vọc vọc mà thôi.

Sơ sơ về extension pthreads của krakjoe

Trước tiên PHP core khi phát hành thì không hỗ trợ việc thao tác với threading. Để làm được điều này thì mình phải cài đặt một extension của php là pthreads. Source code của extension này các bạn có thể tìm trên github, mình kèm link bên dưới cho bạn nào lười nhé. Như đã đề cập ở trên thì extension này đã ngưng phát triển từ năm 2018. Tác giả của extension này đã chuyển sang phát triển một cái khác tương tự là krakjoe/parallel để thực hiện xử lý song song trên PHP.

krakjoe/pthreads

Threading for PHP - Share Nothing, Do Everything :) - krakjoe/pthreads

krakjoe

Một vài điểm yếu của ext pthreads

  • pthreads đã ngưng phát triển
  • Multi-threading chỉ support cho các ứng dụng console, cli thôi nên khôn chạy được với PHP FPM hay Apache.

Nói cũng hơi nhiều rồi, tới lúc chiến rồi anh em..

Hướng dẫn multi thread php

Hướng dẫn cài đặt pthreads trên windows 10.

Mình xin hướng dẫn các bạn cài đặt pthreads trên windows 10 để lập trình đa luồng, bạn nào xài linux hay Mac nếu có nhu cầu thì comment bên dưới, nếu có nhu cầu thì mình sẽ viết thêm cách làm trên Linux nhé (do mình ko có Mac).

Vài lưu ý trước khi cài đặt nè:

  • Mình cần PHP 7.2 ZTS, cái này là bắt buộc và nhớ là bản ZTS chứ không phải NTS nhé.Hiện tại thì phiên bản mà PHP còn hỗ trợ là PHP 7.3 nên để cài đặt PHP 7.2 ZTS thì bạn phải tìm lại phiên bản cũ trên internet nhé, mình có thể download tại link này:
  • pthreads version cuối cùng là 3.2.0, các bạn download nó tại github nhé, chứ trên php.net thì mới có 3.1.x thôi. Mà theo mình thấy chỉ có bản 3.2.0 là còn chạy tàm tạm thôi nhé mấy bạn.

Cách cài đặt pthreads tương đối giống với như các extension khác, các bạn cần làm 2 việc để cài đặt đó là.

Bước 1: Tải về PHP 7.2 ZTS

Việc đầu tiên cần làm là cài đặt PHP 7.2 ZTS, cái này là khá tốn công vì như đề cập thì PHP cũng ngưng support version 7.2 luôn rồi. Các bạn download PHP 7.2 ở đây nhé:

https://windows.php.net/downloads/releases/archives/php-7.2.9-Win32-VC15-x64.zip

Bước 2:  Tải về pthreads từ github

Tải về bản php-pthreads cuối cùng từ github thông qua link này nha:

https://github.com/krakjoe/pthreads/releases/download/v3.2.0/php_pthreads-3.2.0-7.2-ts-vc15-x64.zip

Tải xuống xong rồi giải nén rồi copy mấy file dll theo thông tin sau nha. Lưu ý rằng mình cài đặt php tại đường dẫn C:\bin\php nên các bạn chắc sẽ phải khác chút nhé.

  • Copy file php_pthreads.dll copy vào thư mục ext của PHP, của mình là C:\bin\php\ext.
  • Copy file pthreadvc2.dll vào thu mục có cái file thực thi của PHP php.exe, của mình sẽ là C:\bin\php.

Sau khi copy xong rồi thì bạn thêm vào php.ini thông tin để nó load cái ext lên thôi, đơn giản như làm mấy cái extension khác vậy.

; On windows: 
extension_dir = "ext"

;Load pthreads 
extension=pthreads

Thêm một lưu ý nữa là bạn cần đảm bảo php.exe được tìm thấy trong biến môi trường $PATH của windows 10 nhé.

Hướng dẫn multi thread php
Add PHP vào biến môi trường PATH

Bước 3:  Kiểm tra việc cài đặt pthreads

Kiểm tra việc cài đặt khá đơn giản,  bạn kiểm tra module pthreads có được load không bằng lệnh php -m trong cmd. Lệnh php -m sẽ cho bạn biết thông tin những module mà PHP đang sử dụng.

Hướng dẫn multi thread php
Kiểm tra pthreads trong php.

Để cho chắc ăn hơn thì mình sẽ test nhẹ pthread bằng một đoạn script PHP đơn giản thế này.

Chương trình này sẽ in ra random threadId, nếu bạn thấy thứ tự mấy cái threadId nó xuất ra không đúng thứ tự tăng dần 1, 2, 3 bạn đã đi qua được chặn đường gian khổ số 1 rồi đó.

Hướng dẫn multi thread php

Tới đây là bạn đã hoàn thành xong việc cài đặt pthread cho PHP trong windows 10 rồi đó.

Hướng dẫn multi thread php

Kết nhẹ

Vậy là mình đã hướng dẫn xong cài đặt pthreads trong PHP để lập trình multithreading trong PHP rồi đó. Vì vấn đề này khá ít bạn quan tâm, nên mình cần bạn nào thấy bài viết còn thiếu sót hay có ý kiến gì thì để lại tí comment để mình còn biết là có bạn đang gặp vấn đề để hỗ trợ nhé.

Chúc các bạn một ngày tốt lành.


Bài mình có tham khảo thông tin tại các nguồn:

  1. pthreads - https://github.com/krakjoe/pthreads
  2. PHP docs - https://www.php.net/manual/en/book.pthreads.php