如何判斷PHP 是線程安全還是非線程安全的

什么是線程安全與非線程安全?

線程安全就是在多線程環境下也不會出現數據不一致,而非線程安全就有可能出現數據不一致的情況。

線程安全由于要確保數據的一致性,所以對資源的讀寫進行了控制,換句話說增加了系統開銷。所以在單線程環境中效率比非線程安全的效率要低些,但是如果線程間數據相關,需要保證讀寫順序,用線程安全模式

這個主要是針對web server 而言,在windows環境下,如果你使用的web server 是apchae 或者 iis 7以下版本,則應該選擇線程安全的安裝文件,而如果你使用Fast-cgi模式時,可以選擇非線程安全,因為 web sever 本身能保證線程安全。
當然還有二進制文件編譯時所使用的編譯器:vc9 (vs系列) vc6(gcc)

如樓上所言,是針對web server的,部分web server在處理應用請求的時候是用多線程而非多進程的方式處理,線程方式因為涉及到共享寄存器和內存,所以很容易出錯,這個時候程序就需要花一些額外的經歷去處理寄存器中的數據一致性,即保證線程安全。
所以是否采用線程安全主要看你的web server所采用的PHP請求處理方式,如果是多線程處理,那么請選擇線程安全的,否則選擇非線程安全的,如樓上所說Fast-cgi方式可選擇非線程安全的

先從字面意思上理解,None-Thread Safe就是非線程安全,在執行時不進行線程(thread)安全檢查;Thread Safe就是線程安全,執行時會進行線程(thread)安全檢查,以防止有新要求就啟動新線程的 CGI 執行方式耗盡系統資源。

再來看PHP的兩種執行方式:ISAPI和FastCGI。FastCGI執行方式是以單一線程來執行操作,所以不需要進行線程的安全檢查,除去線程安全檢查的防護反而可以提高執行效率,所以,如果是以 FastCGI(無論搭配 IIS 6 或 IIS 7)執行 PHP ,都建議下載、執行 non-thread safe 的 PHP (PHP 的二進位檔有兩種包裝方式:msi 、zip ,請下載 zip 套件)。而線程安全檢查正是為ISAPI方式的PHP準備的,因為有許多php模塊都不是線程安全的,所以需要使用Thread Safe的PHP。

說到這里,大家應該知道應該如何選擇哪個版本的PHP了。None-Thread Safe or Thread Safe,您會選擇哪個?

Windows下的PHP現在的版本已經是5.3.6,現在的Windows版本可以在PHP官方PHP For Windows(http://windows.php.net/download/)下載,下載的時候同版本有VC9 x86 Non Thread Safe、VC9 x86 Thread Safe、VC6 x86 Non Thread Safe、VC6 x86 Thread Safe等四個版本。那么這些版本有什么區別呢?

VC9的版本是用legacy VS 2008編譯的,VC6的版本是用legacy VS6編譯的。

如果你是在windows下使用IIS+PHP的話,你需要下載VC9的版本。
如果你是在windows下使用Apache+PHP的話,你需要下載VC6的版本。

Non Thread Safe是指非線程安全,Thread Safe則是指線程安全。

如果是使用ISAPI的方式來運行PHP就必須用Thread Safe(線程安全)的版本;而用FastCGI模式運行PHP的話就沒有必要用線程安全檢查了,用None Thread Safe(NTS,非線程安全)的版本能夠更好的提高效率。


如何判斷:

通過phpinfo(); 查看其中的 Thread Safety 項,這個項目就是查看是否是線程安全,如果是:enabled,一般來說應該是ts版,否則是nts版。

轉載于:https://www.cnblogs.com/ghjbk/p/6879182.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370652.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370652.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370652.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關聯查詢mysql_《MySQL數據庫》關聯查詢

原標題:《MySQL數據庫》關聯查詢一、關聯查詢1、概念在查詢數據時,所需要的數據不只在一張表中,可能在兩張或多張表中。這個時候,需要同時操作這些表來查詢數據,即關聯查詢。關聯查詢所涉及到的表與表之間都會存在有關…

python語言語塊句的標記_《自然語言處理理論與實戰》

編輯推薦 1.講解自然語言處理的理論 2.案例豐富,實戰性強 3.適合自然語言處理學習的入門者 內容提要 自然語言處理是什么?誰需要學習自然語言處理?自然語言處理在哪些地方應用?相關問題一直困擾著不少初學者。針對這一情況&#x…

NOIP2017年11月9日賽前模擬

最后一次NOIP模擬了 題目1:回文數字 Tom 最近在研究回文數字。  假設 s[i] 是長度為 i 的回文數個數(不含前導0),則對于給定的正整數 n 有: 以上等式中最后面的括號是布爾表達式,Tom 想知道S[n] mod 2333…

height百分比失效

heigh:100%失效 解決方案: 第一種 html, body { height: 100%; } 第二種 div { height: 100%; position: absolute; } 非定位元素的寬高百分比計算不會將 padding 計算在內,而定位元素會計算在內。 利用這個特性可以實現圖片左右半區點擊分別上一張圖…

Java堆空間,本機堆和內存問題

最近,我在和一個朋友討論為什么Java進程使用的內存比啟動Java進程時設置的最大堆多。 代碼創建的所有Java對象都是在Java堆空間內創建的,其大小由-Xmx選項定義。 但是一個Java進程由很多空間組成,而不僅僅是Java堆空間。 以下是組成Java進程…

mysql視圖表怎么設置約束_MySQL一一sql的視圖、索引、約束

一、視圖本質上相當于一張**“虛擬表”**,可當作獨立的一張表進行操作(增、刪、改、查)** 作用:**** a)**可通過權限控制,只將“表中的少數列”暴露給數據庫用戶,而不讓該用戶直接操縱數據庫中“實際表”** b)**…

Software Development Life Cycle

轉載于:https://www.cnblogs.com/genezhao/p/6879848.html

python中 的用法_詳解python中@的用法

python中的用法 是一個裝飾器,針對函數,起調用傳參的作用。 有修飾和被修飾的區別,function作為一個裝飾器,用來修飾緊跟著的函數(可以是另一個裝飾器,也可以是函數定義)。 代碼1 結果1 Its fun…

ArrayAndString(數組和字符串)

1.實現一個算法,確定一個字符串的所有字符是否全都不同。假使不允許使用額外的數據結構,又該怎么處理? public class UniqueChars {public static void main(String[] args) {// TODO Auto-generated method stubString string "abcdef…

MyBatis教程– CRUD操作和映射關系–第2部分

為了說明這一點,我們正在考慮以下示例域模型: 會有用戶,每個用戶可能都有一個博客,每個博客可以包含零個或多個帖子。 這三個表的數據庫結構如下: CREATE TABLE user (user_id int(10) unsigned NOT NULL auto_incr…

position 的屬性值

理論上來說,全部 position 的取值有8個 包括:position:static | relative | absolute | fixed | sticky | initial | inherit | unset 其中最常用的是 static 、relative、absolute、fixed 和 sticky initial、inherit、unset 是css的關鍵…

[ JavaScript ] JavaScript 實現繼承.

對于javascript中的繼承,因為js中沒有后端語言中的類式繼承。所以js中的繼承,一般都是原型繼承(prototype)。 function P (name){this.name name;this.say function(){console.log(p);} }function S (name,id){this.id id;this.eat function(){conso…

mysql數據庫應用的權限層級_MySQL數據庫的用戶權限管理

嗨!各位小伙伴今天翻了一下歷史記錄MySQL 數據庫還有點內容今天開始我們就來補上吧~用戶權限管理伙伴們要知道,在數據庫方面有兩個方向。一個是數據庫管理員(Database Administrator)簡稱DBA,一個是數據庫開發工程師(Database Developer)&…

linux i2c adapter 增加設備_Linux驅動之I2C驅動架構

一、Linux的I2C體系結構主要由三部分組成:(1) I2C核心提供I2C控制器和設備驅動的注冊和注銷方法,I2C通信方法,與適配器無關的代碼以及探測設備等。(2) I2C控制器驅動(適配器)(3) I2C設備驅動二、重要的結構體i2c_adapter//i2c控制器(適配器)i…

Alpha-end

前言 失心瘋病源10團隊代碼管理github個人感悟 肝不動了,肝不動了。明天如果見不到我,不要太想我。站立會議 隊名:PMS530雨勤(組長) 今天完成了那些任務 熬夜肝代碼代碼簽入github明天的計劃 肝到凌晨還剩下哪些任務 團…

html 01前沿-web介紹

1. 認識網頁 網頁主要由文字、圖像和超鏈接等元素構成。當然,除了這些元素,網頁中還可以包含音頻、視頻以及Flash等。 2. 瀏覽器(顯示代碼) 瀏覽器是網頁顯示、運行的平臺,常用的瀏覽器有IE、火狐(Firefox…

避免寫慢SQL

最近在整理數據庫中的慢SQL,同時也查詢了相關資料。記錄一下,要學會使用執行計劃來分析SQL。 1. 為查詢緩存優化你的查詢 大多數的MySQL服務器都開啟了查詢緩存。這是提高性最有效的方法之一,而且這是被MySQL的數據庫引擎處理的。當有很多相同…

為什么子孫后代會討厭使用java.util.Stack

在我用無意義的重言式殺死你之前,這是要點 如果您的應用程序接近實時,或者將代碼發送到Mars,則需要保留Java中默認的Stack實現。 根據LinkedList編寫您自己的版本。 同樣,如果您的應用程序是關鍵任務,并且希望堆棧由…

play 連接mysql_Play framework 2.x 連接mysql | 學步園

筆者所使用的系統為64位 windows7。本文假設java1.5版本以上環境已經搭好,play 框架已經下載至本地。首先我們創建一個項目。命令行進入play的目錄命令:play new demo再次輸入項目名字輸入2 選擇java項目創建完成界面OK,一個play框架下的java…

rpm -e --nodeps_微課 | rpm的思維導圖

前導課程:微課 | rpm的查詢、升級與卸載命令本次微課將演示使用xmind繪制rpm思維導圖的過程,包括視頻文字,大約需要你10分鐘。另外,文末還有一則IT冷笑話,學習之余、會心一笑:)這個思維導圖將包含以下內容:…