Hướng dẫn dùng collectable 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ể. Nội dung chính
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
Stt hài 2023
Bạn đang quan tâm đến Stt hài hước câu like phải không? Nào hãy cùng PHE BINH VAN HOC theo dõi bài viết này ngay sau đây nhé! Stt vui nhộn câu like được share ...
Hướng dẫn dùng random uuid trong PHP
Đây là bài viết thứ 3 trong series Laravel Gist. Các bạn có thể xem code của project tại Github.#Giới thiệuTrong bài trước chúng ta đã tạo và chỉnh sửa migration ...
Event calendar -- php/mysql plugin nulled
Event Calendar is a server-side dynamic web application conceived with PHP/MySQL, built with jQuery FullCalendar and integrated onto Bootstrap Grid Layout. Perfect responsive plugin to fit every ...
Parse error syntax error unexpected wordpress
Updated on April 5, 2022Parse Error: Syntax Error Unexpected ‘ ‘ in WordPressTable of Contents [TOC]Parse Error: Syntax Error Unexpected ‘ ‘ in WordPressWhat are parse error: syntax errors ...
Hướng dẫn query array mongodb
Nội dung bài viếtVideo học lập trình mỗi ngàyMongodb là gì? Query array trong mongodb? Thì trong bài này, tôi sẽ giới thiệu một số kỹ thuật truy vấn khi document ...
Hướng dẫn dùng europe timezone trong PHP
Đôi lúc các bạn xem các hướng dẫn về hàm lấy thời gian :date(format,timestamp).Nội dung chínhTIMEZONE LÀ GÌ?CÁCH CHỈNH TIMEZONE TRÊN LINUXXác định giờ đang chạy ...
How do i print two numbers in python?
W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we ...
Hướng dẫn dùng backward typing python
Một cái nhìn tổng quan về ba cách chính để đảo ngược một string trong Python, bao gồm cả các vấn đề về hiệu năng.Nội dung chínhOption 1: Reversing a Python ...
Hướng dẫn base64 encode php
Chuyển đến nội dungCó nhiều giải pháp để mã hoá hình ảnh, Encode Base64 là một trong số đó. Khi chuyển hình ảnh về dạng này ảnh được hiển thị trực ...
Xóa 1 phần tử trong mảng javascript
Xóa phần tử trong Array JavaScript là một bài toán mà hầu hết mọi người đều gặp phải khi lập trình JavaScript. Để giải quyết bài toán này, JavaScript cung ...
How do i count tables in mysql?
In case you would like a count all the databases plus a summary, please try this:SELECT IFNULL(table_schema,Total) Database,TableCount FROM (SELECT COUNT(1) TableCount,table_schema FROM ...
Javascript float max decimal places
I wanted to display a number to 2 decimal places.I thought I could use toPrecision(2) in JavaScript .However, if the number is 0.05, I get 0.0500. Id rather it stay the same.See it on JSbin.What is ...
Luật quân sự năm 2023
(Chinhphu.vn) - Bộ Quốc phòng đã đồng ý với ý kiến đề xuất của Bộ Giáo dục và Đào tạo (GD&ĐT) về cấp giấy tạm hoãn nghĩa vụ quân sự. Hướng ...
Get month from string date php
Given the following timestring:$str = 2000-11-29; $php_date = getdate( $str ); echo <pre>; print_r ($php_date); echo </pre>; How to get the year/month/day in PHP?[seconds] => ...
What symbol do you use when concatenating strings in php?
There are two string operators. The first is the concatenation operator (.), which returns the concatenation of its right and left arguments. The second is the concatenating assignment operator ...
Hướng dẫn remove css property react
I am new to React. I have a few buttons in a button group:<div className=btn-group> <button className=btn btn-mini btn-default onClick={() => this.changeDataType(type1)} ...
Write a program in php to print prime numbers between 1 and 100
Print prime numbers from 1 to 100 in PHP using for loop and while loop.In this article, you will learn how to print prime numbers from 1 to 100 in PHP using for loop and while ...
Hướng dẫn ctype php extension install
Character type checkingIntroductionInstalling/ConfiguringRequirementsInstallationRuntime ConfigurationResource TypesPredefined ConstantsCtype Functionsctype_alnum — Check for alphanumeric ...
How do i recover mysql root password?
B.3.3.2 How to Reset the Root Password If you have never assigned a root password for MySQL, the server does not require a password at all for connecting as root. However, this is insecure. For ...
Hướng dẫn structure in python example
Source code: Lib/struct.pyThis module performs conversions between Python values and C structs represented as Python bytes objects. This can be used in handling binary data stored in files or from ...
