Hướng dẫn dùng parellel trong PHP
|
Các PHP Developers hiếm khi sử dụng đa luồng. Sự đơn giản của chương trình đồng bộ, đơn luồng chắc chắn rất hấp dẫn, nhưng đôi khi việc sử dụng đa luồng có thể mang lại một số cải tiến hiệu suất đáng kể.
Show
Nội dung chính
Nội dung chính
Trong bài viết này, tôi sẽ giới thiệu cho các bạn cách tạo luồng trong PHP với pthreads extension. Để làm được điều này cần cài đặt PHP 7x ZTS (Zend Thread Safety), cùng với pthreads v3. (Tại thời điểm viết, người sử dụng PHP 7.1 sẽ cần phải cài đặt từ nhánh master của repo pthreads - xem phần này của bài viết để biết chi tiết về việc build các third-party extensions từ source). PS: pthreads v2 nhắm vào PHP 5.x và không còn được hỗ trợ; pthreads v3 nhắm vào PHP 7.x và đang được phát triển tích cực. Khi nào không sử dụng pthreadsTrước khi chúng ta tiếp tục, trước tiên tôi muốn làm rõ khi bạn không nên (cũng như không thể) sử dụng pthreads extension. Trong pthreads v2, khuyến nghị là không nên sử dụng pthreads trong web server environment (tức là trong FCGI process). Theo pthreads v3, đề xuất này đã được thi hành, vì vậy bây giờ bạn chỉ đơn giản là không thể sử dụng nó trong web server environment. Hai lý do nổi bật cho điều này là:
Đó là lý do tại sao threads không phải là một giải pháp tốt trong environment như vậy. Nếu bạn đang tìm kiếm threads như là một giải pháp cho các tác vụ chặn IO (chẳng hạn như thực hiện các yêu cầu HTTP), hãy để tôi chỉ cho bạn theo hướng lập trình không đồng bộ (asynchronous programming), có thể đạt được qua các framework như Amp. SitePoint đã phát hành một số bài báo xuất sắc về chủ đề này (như Writing Async Libraries và Modding Minecraft in PHP), trong trường hợp bạn quan tâm. Xử lý các tasks một lầnĐôi khi, bạn muốn xử lý các tasks một lần theo cách đa luồng (như thực hiện một số IO-bound task). Trong trường hợp như vậy, Ví dụ:
Ở trên, Chúng ta có thể tách các class bằng cách extend Threaded class, chúng có thể chạy được bên trong các threads khác:
Bất kỳ class nào cần chạy được bên trong của một thread riêng biệt Chúng ta hãy nhìn vào kiến trúc các classes của pthreads:
Chúng ta đã nhìn thấy và tìm hiểu những điều căn bản về các class Thread và Threaded, vậy bây giờ hãy xem ba phần còn lại (Worker, Volatile và Pool). Recycling threadsTách một thread mới cho mỗi tác vụ chạy song song là khó khăn. Điều này là do một shared-nothing architecture phải được sử dụng bởi pthreads để tạo được threading bên trong PHP. Điều này có nghĩa là toàn bộ execution context của PHP interpreter (bao gồm mọi class, interface, trait và function) phải được sao chép cho mỗi thread được tạo. Vì điều này làm giảm performance đáng kể, vì vậy nên luôn luôn sử dụng lại một thread khi có thể. Các thread có thể được sử dụng lại theo hai cách: với
Nhìn nhanh vào ví dụ sau:
Output: Đoạn code trên stack 15 works vào đối tượng Worker class cung cấp một số methods khác liên quan đến stack task của nó, bao gồm Một cách khác để sử dụng lại một thread khi thực hiện nhiều nhiệm vụ là sử dụng một thread pool (thông Chúng ta hãy xem ví dụ trên được thay thế bằng cách sử dụng pool của workers:
Output: Có một vài khác biệt đáng chú ý giữa việc sử dụng một pool như trái ngược với một worker. Thứ nhất, pool không cần phải manually started, chúng bắt đầu thực hiện task ngay khi có thể. Thứ hai, chúng ta submit các tasks cho các pool, chứ không phải stack chúng. Ngoài ra, Theo thực tế, workers và pools nên luôn luôn collect tasks sau khi hoàn thành, và manually shut down. Các thread tạo ra qua pthreads và tính bất biếnClass cuối cùng chúng ta tìm hiểu là Chúng ta hãy xem xét một ví dụ để chứng minh các ràng buộc bất biến mới:
Các Threaded properties của các
Chúng ta có thể thấy rằng Chỉ có một chủ đề cơ bản cuối cùng để đề cập đến sự thay đổi và các Hãy xem lại một ví dụ để hiểu rõ hơn về mọi thứ:
Chúng ta có thể thấy rằng các Demo:
Ngoài ra còn có các method khác như Đồng bộ hoá (Synchronization)Chủ đề cuối cùng chúng tôi sẽ giới thiệu trong bài viết này là đồng bộ hóa trong pthreads. Đồng bộ hóa là một kỹ thuật cho phép kiểm soát truy cập vào các tài nguyên chia sẻ. Ví dụ, chúng ta hãy thực hiện counter đơn giản:
Không sử dụng đồng bộ, đầu ra sẽ không được xác định. Multiple threads ghi vào một biến duy nhất mà không kiểm soát quyền truy cập sẽ khiến các bản cập nhật bị mất. Hãy khắc phục điều này bằng cách thêm đồng bộ hóa để chúng ta nhận được đầu ra chính xác là 20:
Đồng bộ các khối mã cũng có thể hợp tác với nhau bằng cách sử dụng Dưới đây là một gia tăng đáng kinh ngạc từ 2 sựđồng bộ hóa trong vòng lặp:
Bạn có thể đã nhận thấy các điều kiện bổ sung đã được đặt xung quanh Kết luậnChúng ta đã thấy 5 class của pthreads ( Tham khảo
|
Bài Viết Liên Quan
Hướng dẫn twitter trend analysis python - phân tích xu hướng twitter python
Dữ liệu lớn ở khắp mọi nơi. Giai đoạn = Stage. Trong quá trình điều hành một doanh nghiệp thành công trong ngày hôm nay, bạn có thể sẽ gặp phải nó cho dù ...
Hướng dẫn how do you subtract a number from multiple cells in google sheets? - Làm thế nào để bạn trừ một số khỏi nhiều ô trong trang tính của Google?
Phép trừ là một trong bốn hoạt động cơ bản của toán học. Bạn có thể tự mình sử dụng phép trừ hoặc kết hợp với các chức năng khác để tạo các ...
When can I buy a 2023 Dodge Challenger?
The Car Connection Expert Review Senior EditorSeptember 12, 2022LikesUnabashed powerUnabashed performanceDecent infotainmentHandles well, for its weight DislikesLousy safety techAWD version is ...
Hướng dẫn what are the rules for python variables? - các quy tắc cho các biến python là gì?
Tên biến Một biến có thể có một tên ngắn (như X và Y) hoặc một tên mô tả hơn (Age, Carname, Total_Volume). Quy tắc cho các biến Python:Một tên biến phải bắt ...
Hướng dẫn decrease brightness css - giảm độ sáng css
Hàm filter: drop-shadow(16px 16px 20px blue);5 CSS áp dụng hệ số nhân tuyến tính cho hình ảnh đầu vào, làm cho nó xuất hiện sáng hơn hoặc tối hơn. Kết quả của ...
Hướng dẫn import font css - nhập css phông chữ
Trong bài này chúng ta sẽ tìm hiểu cách sử dụng font trong html và css. Có hai dùng font là tải về, dủng trực tiếp trong mã nguồn. Cách thứ hai là dùng google ...
Sách giáo khoa lớp 3 năm học 2023 2023
Liên tục được cải tiến, sửa đổi bởi cả thế giới. Được sử dụng miễn phí không mất tiền. Được tự do khám phá, sửa đổi theo ý thích. Phù hợp ...
Hướng dẫn what is dynamic in javascript - động trong javascript là gì
Hầu hết các ngôn ngữ có một số khía cạnh của hành vi động. Ngay cả các ngôn ngữ được gõ tĩnh cũng có thể có một loại dữ liệu động hoặc biến thể ...
Hướng dẫn how do you f4 in excel on a mac? - làm thế nào để bạn f4 trong excel trên máy Mac?
Bỏ qua nội dungNếu bạn là người dùng Microsoft & NBSP; Excel và cần sử dụng ‘TÀI LIỆU THAM KHẢO TUYỆT VỜI TUYỆT VỜI TUYỆT VỜI TUYỆT VỜI TRONG MS Excel trên ...
Hướng dẫn can i use fetch in javascript? - tôi có thể sử dụng tìm nạp trong javascript không?
API Fetch cung cấp một giao diện để tìm nạp các tài nguyên (bao gồm cả trên mạng). Nó có vẻ quen thuộc với bất kỳ ai đã sử dụng fetch(url) .then(response ...
Hướng dẫn canny image opencv python - hình ảnh canny opencv python
I. Giới thiệu.Chào mừng bạn đến với OpenCV với ngôn ngữ Python. Trong hướng dẫn này, chúng ta sẽ sử dụng bao gồm các gradient hình ảnh và phát hiện ...
Hướng dẫn how do i manually edit wordpress pages? - làm cách nào để chỉnh sửa thủ công các trang wordpress?
Chỉnh sửa các trangBạn phải đăng nhập vào các trang chỉnh sửa..Phương pháp 1 - Từ bảng điều khiểnNhấp vào trang (thanh bên trái)Pages (left sidebar)Nhấp vào ...
Hướng dẫn how do you traverse xml in python? - làm thế nào để bạn duyệt xml trong python?
XML là gì?XML là viết tắt của ngôn ngữ đánh dấu mở rộng. Nó được thiết kế để lưu trữ và vận chuyển một lượng dữ liệu nhỏ đến trung bình và ...
Hướng dẫn python developer upwork - công việc của nhà phát triển python
{name: naven_infosite_salary_detail_fluid_en-us, id: div-adslot-la8gauwm, fluid: true} {}Chi tiết tiền lương cho một nhà phát triển Python tại UpworkCập nhật ngày 28 ...
Hướng dẫn line spacing html - giãn cách dòng html
Trang chủTham khảoCSSThuộc tính line-heightĐịnh nghĩa và sử dụngThuộc tính line-height thiết lập chiều cao giữa các dòng.Cấu trúctag { line-height: giá trị; } ...
Hướng dẫn how do i get python to recognize a command prompt? - làm cách nào để python nhận ra dấu nhắc lệnh?
Đội câu trả lời giáo dụcCác Python không được công nhận là lỗi lệnh bên trong hoặc bên ngoài. Lỗi được gây ra khi tệp thực thi Python không được tìm ...
Hướng dẫn mysql java tutorial - hướng dẫn java mysql
Chào mọi người, ở bài viết này mình sẽ hướng dẫn mọi người cách để kết nối tới cơ sở dữ liệu MySQLtrong Java. Ở đây mình sử dụng Netbean nên nếu ...
Hướng dẫn get header csv python - lấy tiêu đề csv python
CSV là viết tắt của các giá trị phân tách bằng dấu phẩy và các tệp CSV về cơ bản là các tệp văn bản được sử dụng để lưu trữ dữ liệu theo kiểu ...
How many teams are in the FA Cup 2023?
Help: FA Cup brackets on Livesport.com. Find FA Cup brackets, FA Cup 2022/2023 results/fixtures. Livesport.com provides FA Cup brackets, fixtures, live scores, results, and match details with ...
Lịch ra mắt game 2023
Portkey Games vừa thông báo trên trang chủ rằng tựa game lấy cảm hứng từ thế giới phép thuật của Harry Potter - Hogwarts Legacy sẽ dời lịch phát hành sang ngày 10 ...
