pthreads php 安裝全過程

      網友投稿 748 2025-04-03

      簡介


      pthreads 是一組允許用戶在 PHP 中使用多線程技術的面向對象的 API。 它提供了創建多線程應用所需的全套工具。 通過使用 Thread, Worker 以及 Threaded 對象,PHP 應用可以創建、讀取、寫入以及執行多線程應用,并可以在多個線程之間進行同步控制。

      Tip

      建議使用?parallel?作為替代。

      Warning

      不可以在 web 服務器環境中使用 pthreads 擴展, PHP 多線程開發僅限于命令行模式的應用。

      Warning

      只能在 PHP 7.2+ 版本中使用 pthreads (v3) 擴展, 在 PHP 7.0 和 7.1 版本中,ZTS 模式是不安全的。

      我的PHP7.1安裝pthreads的各種版本在make 時一堆報錯,建議升級PHP7.2

      cd /tools

      wget https://github.com/krakjoe/pthreads/archive/v2.0.10.zip //改成自己的版本

      unzip v2.0.10.zip //改成自己的

      cd pthreads-2.0.10 //改成自己的

      /usr/local/php/bin/phpize

      ./configure --with-php-config=/usr/local/php/bin/php-config

      make

      make install

      注意:您的php 在編譯的時候需要開啟 –enable-maintainer-zts

      ./configure --prefix=/usr/local/php --disable-fileinfo --enable-fpm --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-openssl --with-zlib --with-curl --enable-ftp --with-gd --with-xmlrpc --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-gd-native-ttf --enable-mbstring --with-mcrypt=/usr/local/libmcrypt --enable-zip --with-mysql=/usr/local/mysql --without-pear --enable-maintainer-zts

      vim /etc/php.ini

      添加

      extension=pthreads.so

      pthreads php 安裝全過程

      重啟php

      /etc/init.d/php-fpm restart

      具體步驟參考:https://www.w3cschool.cn/php/php-thread.html

      Threaded 對象:?Threaded?對象提供支持 pthreads 操作的基本功能,包括同步方法以及其他對程序員很有幫助的接口。

      Thread 對象: 通過繼承 pthreads 中提供的?Thread?對象并實現?run?方法,用戶可以創建自己的 Thread 對象。 只要線程上下文中持有某個 Thread 對象的引用,就可以讀/寫該對象的屬性,也可以調用該對象的公有(public)或者受保護(protected)的方法。 當在創建 Thread 對象的上下文中調用該對象的?Thread::start()?方法時,pthreads 擴展會在另外的獨立線程中執行該對象的 run 方法。 僅有創建 Thread 對象的線程/進程方可開始(start)或者加入(join)這個 Thread 對象。

      Worker 對象:?Worker?是有狀態的線程對象,它在線程開始(通過調用?Thread::start()?方法)之后就可用, 除非代碼中顯式地關閉線程(通過調用?Worker::shutdown()?方法), 否則該對象在線程對象超出作用范圍之后才會失效。 持有 Worker 對象引用的線程上下文可以向 Worker 中入棧(通過調用?Worker::stack()?方法)其他線程對象,Worker 對象將在獨立線程中執行入棧對象的代碼。 Woker 對象的?run?方法會在它的棧中入棧對象之前執行,這樣就可以進行一些必需的資源初始化工作。

      Pool 對象:?Pool?對象是 Worker 線程對象池,可以用來在多個 Worker 對象之間分發?Threaded?對象, 這是最易用且高效的多線程編程方式。

      Caution

      Pool?是標準的 PHP 對象,它并沒有繼承?Threaded?類,所以不可以在多個線程上下文中共享同一個 Pool 對象。

      Volatile?類是在 pthreads v3 中新增加的, 用來表示可變的?Threaded?類中的?Threaded?屬性(默認情況下是不可變的)。 它也可以被用來在?Threaded?上下文中存儲數組。

      線程間同步: 由 pthreads 擴展創建的所有對象擁有內置的線程間同步機制, 和 Java 語言很類似, 使用?Threaded::wait()?和?Threaded::notify()?方法來實現線程間同步。 調用某一個對象的?Threaded::wait()?方法 會導致當前線程上下文進入等待狀態, 等待另外一個線程上下文調用同一個對象的?Threaded::notify()?方法。 為 PHP?Threaded?對象提供了強有力的線程間同步控制機制。

      Caution

      應用中會用在多線程場景中的對象都應該從?Threaded?類繼承。

      數據存儲: 一般來說,任何可以序列化的數據類型都可以作為 Threaded 對象的屬性,它可以從持有該對象引用的任何線程上下文讀/寫。 并不是所有的數據都采用序列化方式存儲,比如基本類型就是以其真實形態存儲的。 對于不是 Threaded 派生的對象,例如復雜類型、數組以及對象等,都是序列化存儲的,可以從持有 Threaded 對象引用的任何線程上下文中讀取和寫入, 區別就在于對于 Threaed 的派生對象,設置它的成員變量的過程是在獨立線程上下文中執行的。 對于 Threaded 派生對象,在同一時間,不同的線程上下文都可以從該對象中讀取到同樣的數據。

      靜態成員: 當創建新的線程上下文(Thread 或 Worker 對象)的時候,靜態成員會被拷貝到新的上下文中。出于安全考慮,資源類型以及包含內部狀態的對象類型的靜態成員會被置空。 實際上這個特性實現了類似線程本地存儲的功能。舉例說明,假設某個類擁有包含數據庫連接信息以及數據庫連接對象靜態成員, 那么當新的線程上下文啟動的時候,僅有數據庫連接信息會被復制到新上下文中,而數據庫連接對象并不會被復制。 所以,需要在新的上下文中根據復制過來的數據庫連接基本信息來初始化數據庫連接對象,新創建的數據庫連接對象是獨立的, 不影響在原上下文中的數據庫連接對象。

      Caution

      當使用 print_r, var_dump 或者其他函數來進行對象調試的時候,是沒有遞歸保護機制的。

      Note:

      資源類型: PHP 中很多使用到 Resource 資源類型的擴展或函數并未針對多線程場景進行特殊設計,也就是說,雖然 pthreads 擴展提供了 在多個線程上下文中共享資源類型變量的能力,但是通常來說,你應該把它們視為非線程安全的。 所以,如果要在多個線程上下文中共享資源類型的變量,你應該特別謹慎對待。

      Caution

      為了提供一個穩定的運行環境,pthreads 擴展在執行過程中會有一些必需的額外限制。

      需求

      要使用 pthreads 擴展,需要構建 PHP 時啟用 ZTS (Zend Thread Safety)。(--enable-maintainer-zts 選項, Windows 平臺為 --enable-zts)在編譯安裝PHP時添加--enable-maintainer-zts

      Caution

      ZTS 是構建期配置選項,只能通過構建時通過選項啟用,無法在構建之后啟用。

      要構建 pthreads 擴展,你需要啟用了 ZTS 的 PHP 以及 Posix Threads 頭文件(pthread.h)。對于 Windows 平臺,需要使用 redhat 的 pthread-w32 項目中的 pthread.h 頭文件。

      安裝

      pthreads 擴展由 PECL 主持,使用???github?管理源代碼。 使用標準的 PECL 包安裝方式就可以完成安裝:

      PHP版本大于7時,有問題,慎用,??https://pecl.php.net/package/pthreads。

      請使用https://github.com/krakjoe/pthreads

      運行時配置

      此擴展沒有在?php.ini?中定義配置指令。

      看不明白的話:pthreads php 安裝全過程(二)

      官方文檔:https://www.php.net/manual/zh/intro.pthreads.php

      PHP 任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:wps中excel表格怎樣在斜線內打字(wps表格怎么畫斜線在格子里面打字)
      下一篇:為什么表格填寫好后制作成電子檔打開后是表格的最后面、拜托高手指點一下
      相關文章
      国产亚洲综合久久系列| 亚洲男人第一无码aⅴ网站| 国产亚洲精品AA片在线观看不加载 | 亚洲欧洲日产国码在线观看| 亚洲熟女一区二区三区| 亚洲一本大道无码av天堂| 亚洲国产精品成人网址天堂| 亚洲a∨无码一区二区| 亚洲国产成人AV在线播放| 亚洲欧洲国产综合AV无码久久| 精品久久亚洲中文无码| 亚洲伊人久久大香线蕉结合| 亚洲一区二区三区不卡在线播放| 亚洲免费在线视频播放| 激情综合亚洲色婷婷五月APP| 亚洲国产成人精品无码区在线秒播 | 久久亚洲精品无码播放| 国产成人亚洲综合无码| 亚洲综合伊人久久综合| 久久亚洲综合色一区二区三区| 亚洲福利视频导航| 亚洲经典在线中文字幕| 亚洲人成网站日本片| 亚洲天堂男人影院| 久久久久亚洲AV无码去区首| 国产成人精品亚洲| 久久精品国产亚洲AV不卡| 亚洲午夜国产精品无码 | 亚洲伊人精品综合在合线| 激情内射亚洲一区二区三区爱妻| 在线观看亚洲AV日韩A∨| 色噜噜噜噜亚洲第一| 亚洲精品国产综合久久一线| 人人狠狠综合久久亚洲高清| 亚洲无线电影官网| 亚洲午夜精品一区二区| 亚洲无线一二三四区| 亚洲91精品麻豆国产系列在线| 亚洲日韩精品无码AV海量| 久久亚洲AV成人无码国产最大| 亚洲AV无码乱码精品国产|