當前位置:首頁 » 編程語言 » php線程和進程

php線程和進程

發布時間: 2023-07-09 01:37:53

1. php真的有多進程,多線程嗎

通常意義上所說的多進程是由apache調度的,比如html頁面同時發送5個ajax請求的時候,那麼5個php進程會幾乎同時進行。
PHP本身是不存在多線程的,總是單線程的方式執行。

誤區就是PHP可以通過特別的手段用多進程的方式來模擬多線程,不過幾乎用不到。因為PHP不像java之類的本身有進程管理機制,因此模擬的多線程非常不好控制,同時效率也並不高。

2. 現在開發網站,好像都是流行用php,那javaweb一般用在哪裡呢它們之間的區別和優劣勢在哪裡呢

1.php即寫即用的。

也就是說每次只有一改動完成,用戶立馬看到效果,而java則慢多了,代碼改動完成後,要重新編譯,然後重啟jvm,中間耗費的時間可是不少啊,而且重啟jvm過程可是會造成用戶響應中斷的哦。

2.php寫東西快。

php可以說是非常敏捷的,一個需求給到滑晌含,只要不考慮後期的性能和用戶量問題,那是相當快速的,甚至你都可以不用框架,直接寫也會非常快的,寫一個增刪改查功能,可能也就30-50行代碼就搞定了。而java就慢多了,首先要想一下用什麼框架,目前基本上就是spring了,然後就是配置各種資料庫,過濾器,servlet,決定是用mybatis還是hibernate,然後考慮代碼之間的傳遞,然後考慮事務。。。然後不停調試,一改代碼可能就是幾分鍾信笑的等待時間,可想而知。

3.php的表面思路更清晰。

什麼是表面思路,就是你看到的東西就是真正做出來的東西,比如echo"helloworld",就是輸出helloworld,而java則不同,你可能是寫response中,可能是寫在modelattribute中,也可能就是return了該字元串,然後不知道怎麼的,它就顯示到頁面上了。

4.php佔用內存少。

php是進程式處理問題的,佔用內存相當少,可以說,你在一台機器部署50個項目沒有任何問題,只要訪問量不上來,搞得定。而java就不行了,java每啟動一個項目,本身就得耗盡許多內存,比如在一台8g內存的機器上,一般跑上2個項目就差不多了。

說了這php的好處,難道java就沒有好處嗎?那是不可能的。

1.java組件多。

我個人覺得單是這一點就蓋過其他所有優點了,因為組件多,意味著用的人多,群眾的眼睛是雪亮的。所以,java一定是好的,它已經積淀了太多的東西,不是一門新型語言能夠隨便替代的。你想要做什麼,好好搜索java組件,可能都有你需要的功能,特別對於當下最流行的大數據產業,java更是占據一方。而php在這種場謹鏈景就有點無能為力了。

2.java線程池,連接池,非同步化方便。

其實這一點和第一點也很相似,也是因為組件多,所以要使用線程池連接池都很方便,這對於高並發高性能的場景來說,是絕對必要的。因為java的運行原因就是多線程的,所以不用每次都去初始化很多基本的東西,這省去了太多的時間,也因此大家可以忍受伺服器啟動的緩慢過程,因為只有一次。而php則是多進程的,每次都需要重新載入所有需要的代碼,也因此無法將一些常用數據保存在內存,連接池也不大好做,非同步操作更是一個大短板。

3.java是真正意義上的邏輯清晰。

因為,java中,你可以從一個進入可以藉助IDE工具分析到最深層次的邏輯操作,對於每個欄位,都可以清晰明了,這其實是介面和完全對象的一個使用優點。而php則做不了或者說很少有人費那勁去做這種事情,php可以說是半面向對象半面向過程開發,所以,在調用過程中插入幾個自定義的函數調用是很正常的,那麼你再想通過簡單的IDE去分析調用鏈就不那麼容易了。比如,對於第三方提供的介面,php就很難清楚的看出介面返回了什麼,除非你把它列印出來,但是列印出來也不一定對,因為有些返回值的數據不一定有體現。這對於理解代碼來說,增加了一個大大的門坎。

4.雖說java編譯比較煩,但是可以為你提前發現錯誤。

java的編譯的確比較耗時,但是如果有明顯的錯誤,編譯是不會通過的,這就給你一個重新檢查代碼的機會。而php則不會,不管你寫得多爛,都不會給你提示什麼,而許多時候,往往就因為少寫了個;分號,導致你排查數小時。

5.java遠程調用方便,rmi,hessian,bbo。

不管怎麼樣,遠程和本地調用都很方便的知道相關的信息,而且java的同語言調用不是採用純粹的http調用,而且維護一定的連接,從而大大提高性能。而php也有遠程調用,但是相對來說就弱許多了。

其實沒有問題是沒有絕對的好壞的,存在即合理。只是應用場景不一樣罷了。

3. php是單線程單進程的么

每個PHP文件的執行是單線程的,但是,伺服器(apache/nigix/php-fpm)是多線程的。每次對某個PHP文件的訪問伺服器都會創建一個新的進程/線程,用來執行對應的PHP文件.

4. PHP 到底是單進程還是多進程

一般都是多進程,由php-fpm或者fastcgi開啟並管理的。這個沒什麼意義。
你應該想問的是PHP是單線程還是多線程。
一般PHP是默認單線程的,不過可以用php插件來支持多線程模式。

5. 討論php程序執行是線程還是進程

進程

進程是什麼?進程是正在執行的程序;進程是正在計算機上執行的程序實例;進程是能分配給處理器並由處理器執行的實體。 進程一般會包括指令集和系統資源集,這里的指令集是指程序代碼,這里的系統資源集是指I/O、CPU、內存等。 綜合起來,我們也可以理解進程是具有一定獨立功能的程序在關於某個數據集合上的一次運行活動, 進程是系統進行資源分配和調度的一個獨立單位。

在進程執行時,進程都可以被唯一的表示,由以下一些元素組成:

  • 進程描述符:進程的唯一標識符,用來和其它進程區分。在Linux中叫進程ID,在系統調用fork期間生成,只是我們通過getpid返回的不是其pid欄位,而是其線程組號tgid。

  • 進程狀態:我們常說的掛起、運行等狀態,其表示的是當前的狀態。

  • 優先順序:進程間的執行調度相關,相對於其它進程而言。

  • 程序計數器:程序中即將被執行的下一條指令的地址,該地址是內核術中或用戶內存空間中的內存地址。

  • 內存指針:包括程序代碼和進程相關數據的指針,還有和其它進程共享內存塊的指針。

  • 上下文數據:進程執行時處理器的寄存器的數據。

  • I/O狀態信息:包括顯式的I/O請求、分配給進程的I/O設備等

  • 記賬信息:可能包括處理器時間總和、使用的時鍾數總和、時間限制等

  • 以上的這些元素都會放在一個叫做進程式控制制塊的數據結構中。進程式控制制塊是操作系統能夠支持多進程和提供多處理的結構。 當操作系統做進程切換時,它會執行兩步操作,一是中斷當前處理器中的進程,二是執行下一個進程。 不管是中斷還是執行,進程式控制制塊中的程序計數器、上下文數據和進程狀態都會發生變化。 當進程中斷時,操作系統會把程序計數器和處理器寄存器(對應進程式控制制塊中的上下文數據)保存到進程式控制制塊中的相應位置, 進程狀態也會有所變化,可能進入阻塞狀態,也有可能進入就緒態。 當執行下一個進程時,操作系統按規則將下一個進程設置為運行態,並載入即將要執行進程的程序上下文數據和程序計數器等。

    線程

    進程有兩個特性部分:資源所有權和調度執行。 資源所有權是指進程包括了進程運行所需要的內存空間、I/O等資源。 調度執行是指進程執行過程中間的執行路徑,或者說程序的指令執行流。 這兩個特性部分是可以分開的,分開後,擁有資料所有權的通常稱為進程,擁有執行代碼的可分派部分的被稱之為線程或輕量級進程。

    線程有「執行的線索」的意思在裡面,而進程在多線程環境中被定義為資源所有者,其還是會存儲進程的進程式控制制塊。 線程的結構與進程不同,每個線程包括:

  • 線程狀態: 線程當前的狀態。

  • 一個執行棧

  • 私有的數據區: 用於每個線程局部變數的靜態存儲空間

  • 寄存器集: 存儲處理器的一些狀態

  • 每個進程都有一個進程式控制制塊和用戶地址空間,每個線程都有一個獨立的棧和獨立的控制塊,都有自己一個獨立執行上下文。

熱點內容
如何找回網際網路帳號的密碼 發布:2025-02-09 05:20:05 瀏覽:373
樹莓派源碼 發布:2025-02-09 05:07:00 瀏覽:650
安卓手機為什麼搜不到懂球帝 發布:2025-02-09 05:04:42 瀏覽:817
生命密碼解讀走什麼 發布:2025-02-09 04:55:51 瀏覽:279
python常用正則表達式 發布:2025-02-09 04:42:53 瀏覽:179
機器人編程培訓哪家好 發布:2025-02-09 04:37:44 瀏覽:308
上海怎麼學習java 發布:2025-02-09 04:26:39 瀏覽:23
erp系統搭建備用伺服器 發布:2025-02-09 04:07:38 瀏覽:946
戴爾伺服器在bios怎麼配置管理ip 發布:2025-02-09 04:01:53 瀏覽:551
小魚易連雲存儲 發布:2025-02-09 03:59:47 瀏覽:92