pthreads php 安裝全過程

2022-09-14 17:06:15 字數 4098 閱讀 5068

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 //改成自己的版本

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

重啟php  

/etc/init.d/php-fpm restart

具體步驟參考:

threaded 物件: threaded 物件提供支援 pthreads 操作的基本功能,包括同步方法以及其他對程式設計師很有幫助的介面。

thread 物件: 通過繼承 pthreads 中提供的 thread 物件並實現run方法,使用者可以建立自己的 thread 物件。 只要執行緒上下文中持有某個 thread 物件的引用,就可以讀/寫該物件的屬性,也可以呼叫該物件的公有(public)或者受保護(protected)的方法。 當在建立 thread 物件的上下文中呼叫該物件的 thread::start() 方法時,pthreads 擴充套件會在另外的獨立執行緒中執行該物件的 run 方法。 僅有建立 thread 物件的執行緒/程序方可開始(start)或者加入(join)這個 thread 物件。

pool 物件: pool 物件是 worker 執行緒物件池,可以用來在多個 worker 物件之間分發 threaded 物件, 這是最易用且高效的多執行緒程式設計方式。

caution

pool 是標準的 php 物件,它並沒有繼承 threaded 類,所以不可以在多個執行緒上下文中共享同乙個 pool 物件。

volatile 類是在 pthreads v3 中新增加的, 用來表示可變的 threaded 類中的 threaded 屬性(預設情況下是不可變的)。 它也可以被用來在 threaded 上下文中儲存陣列。

執行緒間同步: 由 pthreads 擴充套件建立的所有物件擁有內建的執行緒間同步機制, 和 j**a 語言很類似, 使用 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時,有問題,慎用,» 

請使用

此擴充套件沒有在 php.ini 中定義配置指令。

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

官方文件:

pthreads php 安裝全過程 二

因為pthreads是需要開啟執行緒安全的,預設是不開啟的,所以需要重新進行編譯 首先獲取我們的configure配置 php i grep configure tar zxvf php7.2.tar.gz cd php7.2 新增配置項開啟多程序安全 enable maintainer zts e...

bugzilla安裝全過程

安裝bugzilla將近搞了一天,主要問題停留在apache的設定上,是在有點冤枉.2.解開壓縮包,放在目標目錄,比如 bugzila 3.cd bugzilla perl checksetup.pl 就會有一堆的檢測資訊,告訴你什麼perl模組檢測不到,需要安裝 特別提一下,安裝perl模組一般有...

nginx 安裝 全過程

至於 nginx 是神馬東西,就不說了,直接上過程,如下 tar zxvf pcre 8.01.tar.gz cd pcre 8.01 configure make make install 解壓 tar zxvf nginx 0.8.24.tar.gz cd nginx 0.8.24 配置安裝目錄...