1. 程式人生 > 其它 >Apache服務的安裝及工作模式介紹 (轉)

Apache服務的安裝及工作模式介紹 (轉)

Apache服務的安裝及工作模式介紹

https://blog.51cto.com/u_14154700/2441374

Apache服務的安裝及工作模式介紹

原創

warrent2019-10-10 22:58:54博主文章分類:企業架構©著作權

文章標籤apache服務的安裝apache的三種工作模式apache的工作模式優化文章分類其他伺服器閱讀數1480

博文大綱:

  • 一、apache伺服器的安裝及功能介紹;
  • 二、Apache服務的三種工作模式詳解;
  • 三、修改apache的工作模式;
  • 四、apache工作模式的優化與修改;
  • 五、程序與執行緒的區別。

前言


我們都知道Linux上常見的web伺服器有:apache、nginx、tomcat!

其區別如下:

  • apache:模組化伺服器,支援模組較多、採用servlet處理模型,同步阻塞模型,工作模式多變,對於高併發的場景處理速度會比較慢,執行穩定。
  • nginx:輕量級web伺服器,自身支援模組較少,需要藉助第三方模組支援,採用epoll處理模型,非同步非阻塞型,適合高併發場景,配置簡單。
  • tomcat:apache軟體基金會下開源的子專案,也稱為容器,主要處理java語言編寫的頁面,也可以處理html頁面,併發連線小。

那麼,這篇博文是來圍繞著apache伺服器來進行的。

一、apache伺服器的安裝及功能介紹

apache服務2.4版本功能介紹:

  • MPM支援在執行時裝載,支援envet工作模式;
  • 支援非同步讀寫;
  • 每個模組可以指定輸出的日誌級別 ;
  • 增強版的表示式分析器,通過正則匹配表示式,做動靜分離 .html .php;
  • 請求配置:<if> <Elseif>;
  • 毫秒級別的keep alive timeout;
  • 支援FQDN的虛擬主機 FQDN:全球限定域名,可以通過host主機名來定義虛擬主機;
  • 支援自定義變數;

相關概念,有所瞭解即可,下面開始安裝。

安裝前準備:

  • 下載我提供的依賴包,並上傳至web伺服器。
  • web伺服器為centos 7.X版本

1、開始安裝:

[root@apache ~]# rz           #xshell中,使用rz命令將下載的tar包上傳至web伺服器
#以下是將所有原始碼包解壓縮
[root@apache ~]# tar zxf openssl-1.0.1u.tar.gz -C /usr/src
[root@apache ~]# tar zxf pcre-8.39.tar.gz -C /usr/src
[root@apache ~]# tar zxf zlib-1.2.8.tar.gz -C /usr/src
[root@apache ~]# tar zxf httpd-2.4.23.tar.gz -C /usr/src
[root@apache ~]# tar zxf apr-1.5.2.tar.gz -C /usr/src
[root@apache ~]# tar zxf apr-util-1.5.4.tar.gz -C /usr/src
#以下開始安裝apache所需依賴包
[root@apache ~]# cd /usr/src/apr-1.5.2/
[root@apache apr-1.5.2]# ./configure --prefix=/usr/local/apr && make && make install
[root@apache apr-1.5.2]# cd ../apr-util-1.5.4/
[root@apache apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install
[root@apache zlib-1.2.8]# cd ../zlib-1.2.8/
[root@apache zlib-1.2.8]# ./configure --prefix=/usr/local/zlib && make && make install
[root@apache pcre-8.39]# cd ../pcre-8.39/
[root@apache pcre-8.39]# ./configure --prefix=/usr/local/pcre && make && make install
[root@apache pcre-8.39]# cd ../openssl-1.0.1u/
[root@apache openssl-1.0.1u]# ./config -fPIC --prefix=/usr/local/openssl enable-shared && make && make install
#依賴安裝完成後,開始安裝http服務
[root@apache openssl-1.0.1u]# cd ../httpd-2.4.23/
[root@apache httpd-2.4.23]# ./configure --prefix=/usr/local/http-2.4.23 --enable-so --enable-cgi --enable-cgid --enable-ssl --with-ssl=/usr/local/openssl --enable-rewrite --with-pcre=/usr/local/pcre --with-z=/usr/local/zlib --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util -enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-mpm=event --enable-proxy --enable-proxy-fcgi --enable-expires --enable-deflate && make && make install
[root@apache httpd-2.4.23]# cd /usr/local/http-2.4.23/bin/
[root@apache bin]# ln -sf /usr/local/http-2.4.23/bin/* /usr/local/bin/    #將apache的命令做軟連結
[root@apache bin]# apachectl start            #啟動apache服務,會提示以下資訊,無所謂的。
#若想解決,只需在apache的主配置檔案中新增域名即可
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::c94:cd92:5c18:a1. Set the 'ServerName' directive globally to suppress this message
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

至此,apache的網頁就可以訪問了。

關於安裝apache服務時的配置項,相關解釋如下:

  • –enable-so:開啟dos支援,可以在編譯完成後新增額外功能
  • –enable-cgi:開啟cgi通用網管介面
  • –enable-cgid:開啟cig通用網管介面管理程式
  • –enable-ssl:http加密傳輸協議,支援https協議。
  • –enable-rewrite:開啟地址重寫功能,用來實現防盜鏈
  • –with-服務名稱=/PATH路徑:指定安裝時依賴服務的路徑
  • –enable-mods-shared=most:在安裝的過程中安裝常用模組
  • –enable-mpms-shared=all:安裝apache的所有工作模式
  • –enable-proxy:開啟http代理功能
  • –enable-proxy-fcgi:支援fastcgi快速通用閘道器介面的fcgi協議
  • –enable-expires:支援快取功能
  • –enable-deflate:支援壓縮功能

安裝至此就完成了,下面來談談apache服務的三種工作模式。

二、Apache服務的三種工作模式詳解

apache服務的三種工作模式為:

  • prefork:預派生子程序;
  • worker:多程序+多執行緒;
  • event:多程序+多執行緒+epoll處理模型;

1、prefork工作模式:

prefork模式可以算是很古老但是很穩定的模式。apache在剛啟動時,就預派生fork一些子程序(預設為5個),每個子程序只有一個執行緒,然後等待請求進來,並且總是試圖保持一些空閒的子程序,之所以這樣做,是為了減少頻繁建立和銷燬程序的開銷。每個子程序中只有一個執行緒,在一個時間點內,一個執行緒只能處理一個請求。

在Unix系統中,父程序通常以root身份執行以便繫結80埠,而apache產生的子程序通常以一個低特權的使用者執行。執行子程序的使用者必須要對它服務的內容有讀取的許可權,但是對服務內容之外的其他資源必須擁有儘可能少的許可權。

prefork模式的優缺點比較:

  • 優點:成熟,相容所有新老模組。程序之間完全獨立,使得它非常穩定。同時,不需要擔心執行緒安全的問題。(我們常用的mod_php,PHP的拓展不需要支援執行緒安全,prefork這個模式非常安全)。
  • 缺點:一個程序相對佔用更多的系統資源,消耗更多的記憶體。而且,它並不擅長處理高併發請求,在這種場景下,它會將請求放進佇列中,一直等到有可用程序,請求才會被處理。
    總結:prefork工作模式,效率最高,但是記憶體使用較大,不擅長處理高併發的場景。

2、worker工作模式

worker模式比起prefork模式,是使用了多程序+多執行緒的模式。它也預先fork了幾個子程序(數量比較少),每個子程序能夠生成一些服務執行緒和一個監聽執行緒,該監聽執行緒接入請求並將其傳遞給服務執行緒處理和應答。

執行緒比起程序會更輕量,因為執行緒通常會共享父程序的記憶體空間,因此,記憶體的佔用會減少一些,在高併發的場景下,表現得比 prefork模式好。

worker模式的多程序+多執行緒模式中,各個程序之間都是獨立的,如果某個執行緒出現異常,受影響的只是Apache的一部分服務,而不是整個服務。其他程序仍然可以工作。

worker模式的優缺點比較:

  • 優點:佔據更少的記憶體,高併發下表現更優秀。
  • 缺點:必須考慮執行緒安全的問題,因為多個子執行緒是共享父程序的記憶體地址的。如果使用keep-alive的長連線方式,也許中間幾乎沒有請求,這時就會發生阻塞,執行緒被掛起,需要一直等待到超時才會被釋放。如果過多的執行緒,被這樣佔據,也會導致在高併發場景下的無服務執行緒可用。(該問題在prefork模式下,同樣會發生)

3、event工作模式

這個是 Apache中最新的模式,在現在版本里的已經是穩定可用的模式。它和 worker模式很像,最大的區別在於,它解決了 keep-alive 場景下 ,長期被佔用的執行緒的資源浪費問題(某些執行緒因為被keep-alive,掛在那裡等待,中間幾乎沒有請求過來,一直等到超時)。

event工作模式中,會有一個專門的執行緒來管理這些keep-alive型別的執行緒,當有真實請求過來的時候,將請求傳遞給服務執行緒,執行完畢後,又允許它釋放。這樣,一個執行緒就能處理幾個請求了,實現了非同步非阻塞。

event 工作模式在遇到某些不相容的模組時,會失效,將會回退到worker模式,一個工作執行緒處理一個請求。官方自帶的模組,全部是支援event 的。

注意一點,event MPM需要Linux系統(Linux 2.6+)對Epoll的支援,才能啟用。

還有,需要補充的是HTTPS的連線(SSL),它的執行模式仍然是類似worker的方式,執行緒會被一直佔用,直到連線關閉。

三、修改apache的工作模式

[root@apache bin]# /etc/init.d/httpd -M      #檢視apache載入的模組
[root@apache bin]# /etc/init.d/httpd -V         #檢視apache的工作模式
            ..............#省略部分內容
Server's Module Magic Number: 20120211:61
Server loaded:  APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture:   64-bit
Server MPM:     event             #這行便是它的工作模式
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
            ..............#省略部分內容
[root@apache bin]# cd /usr/local/http-2.4.23/conf/     #切換至指定目錄
[root@apache conf]# vim httpd.conf
            ..............#省略部分內容
Include conf/extra/httpd-mpm.conf     #定位httpd-mpm到此,去除開頭的註釋符號
            ..............#省略部分內容
LoadModule mpm_event_module modules/mod_mpm_event.so
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so    #定位worker至此行
#上面三行就是就是apache服務的三種工作模式,需要那種工作模式,只需要將原來的工作模式註釋掉
#然後將所需要的工作模式那行去掉註釋符號,然後再啟動服務即可(注意是啟動,不是重啟)

            ..............#省略部分內容
#如,我現在將其改為worker工作模式,那麼,配置如下:
Include conf/extra/httpd-mpm.conf     #定位httpd-mpm到此,去除開頭的註釋符號
            ..............#省略部分內容
#LoadModule mpm_event_module modules/mod_mpm_event.so
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule mpm_worker_module modules/mod_mpm_worker.so
[root@apache conf]# /etc/init.d/httpd restart     #重啟時,可能會提示以下資訊,是因為域名的原因,不礙事
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::c94:cd92:5c18:a1. Set the 'ServerName' directive globally to suppress this message
#若想要解決那些提示資訊,可以開啟apache的主配置檔案進行更改:
[root@apache conf]# pwd        #確定當前路徑
/usr/local/http-2.4.23/conf
[root@apache conf]# vim httpd.conf      #開啟檔案,更改下面的那行,其為本機IP,若有域名,可以直接寫域名
ServerName 192.168.20.4        #去掉開頭的註釋符號
[root@apache conf]# /etc/init.d/httpd -V            #再次檢視apache的工作模式
Server version: Apache/2.4.23 (Unix)
Server built:   Oct 10 2019 20:52:01
Server's Module Magic Number: 20120211:61
Server loaded:  APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture:   64-bit
Server MPM:     worker           #可以發現更改生效了
            ..............#省略部分內容
					
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.

四、apache工作模式的優化與修改

在上面改工作模式,其實是呼叫了別的地方的配置檔案,其呼叫的配置檔案就是conf/extra/httpd-mpm.conf,這也就是為什麼在上面更改工作模式時,需要先去掉Include conf/extra/httpd-mpm.conf 這行的註釋了,就是為了呼叫這個配置檔案。

[root@apache conf]# cat extra/httpd-mpm.conf | egrep -v '^#|^$'   #檢視其檔案內容,並且過濾掉註釋及空行
<IfModule !mpm_netware_module>
    PidFile "logs/httpd.pid"
</IfModule>                 
<IfModule mpm_prefork_module>       <!--這就是prefork工作模式的引數-->
    StartServers             5        <!--apache啟動時預設開啟的子程序數-->
    MinSpareServers          5    <!--最小的閒置子程序數-->
    MaxSpareServers         10  <!--最大的閒置子程序數-->
    MaxRequestWorkers      250
		 <!-- 
		 MaxRequestWorkers最為重要,它設定了允許同時的最大接入請求數量。任何超過
		 MaxRequestWorkers限制的請求將進入等候佇列,在apache2.3.1版本
		 MaxRequestWorkers被稱為MaxClients,現在仍支援此名字
		 -->
    MaxConnectionsPerChild   0
	 <!--
	 MaxConnectionsPerChild設定的是每個子程序可處理的請求數,每個子程序在處理了
	 “MaxConnectionsPerChild”個請求後將自動銷燬。0表示無限制,即子程序永不銷燬。
	 雖然預設設為 0 可以使每個子程序處理更多的請求,但如果設成非零值也有兩點重要的好處:
	 1、可防止意外的記憶體洩漏。
	 2、在伺服器負載下降的時侯會自動減少子程序數。因此,可根據伺服器的負載來調整這個值。
	 在 Apache2.3.9 之前稱之為 MaxRequestsPerChild。
	 -->
	 <!--prefork控制程序在最初建立“StartServers”個子程序後,為了滿足“MinSpareServers”
	 設定的需要建立一個程序,等待一秒鐘,繼續建立兩個,再等待一秒鐘,繼續建立四個....
	 如此按照此等級增加建立的程序數,最多達每秒鐘32個,直到滿足MinSpareServers設定
	 的值為止。這種模式 可以不必在請求到來時再產生新的程序,從而減小了系統開銷以增加效能。
MaxSpareServers 設定了最大的空閒程序數,如果空閒程序數大於這個 值,Apache 會自動 
kill掉一些多餘程序。這個值不要設得過大,但如果設的值比 MinSpareServers 小,Apache 
會自動把其調整為 MinSpareServers+1。如果站點負載較大,
可考慮同時加大MinSpareServers 和MaxSpareServers。-->
</IfModule>
<IfModule mpm_worker_module>    <!--這是worker工作模式的引數-->
    StartServers             3   <!--apache啟動時預設開始的子程序數-->
    MinSpareThreads         75   <!--最小空閒數量的工作執行緒-->
    MaxSpareThreads        250    <!--最大空閒數量的工作執行緒-->
    ThreadsPerChild         25  <!--每個子程序產生的執行緒數量-->
    MaxRequestWorkers      400   <!--與prefork模式相同-->
    MaxConnectionsPerChild   0   <!--與prefork模式相同-->
</IfModule>
<IfModule mpm_event_module>    
<!--這是event工作模式的引數,每個配置項的含義與worker基本相似-->
    StartServers             3
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>
<!--以下內容暫時不用看-->
<IfModule mpm_netware_module>
    ThreadStackSize      65536
    StartThreads           250
    MinSpareThreads         25
    MaxSpareThreads        250
    MaxThreads            1000
    MaxConnectionsPerChild   0
</IfModule>
<IfModule mpm_mpmt_os2_module>
    StartServers             2
    MinSpareThreads          5
    MaxSpareThreads         10
    MaxConnectionsPerChild   0
</IfModule>
<IfModule mpm_winnt_module>
    ThreadsPerChild        150
    MaxConnectionsPerChild   0
</IfModule>
<IfModule !mpm_netware_module>
    MaxMemFree            2048
</IfModule>
<IfModule mpm_netware_module>
    MaxMemFree             100
</IfModule>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.

由於上述配置檔案解釋起來過於繁瑣,這裡附加一張圖,可以參考此圖來更改上述配置:

現在我這裡的工作模式為worker,可以更改其上述的配置項,以便優化其效能,更改如下(我會故意更改的值超出其範圍,製造錯誤,並且寫出其錯誤解決方案):

[root@apache extra]# pwd     <!--確定當前路徑-->
/usr/local/http-2.4.23/conf/extra
[root@apache extra]# vim httpd-mpm.conf    <!--編輯該檔案,更改如下-->
<IfModule mpm_worker_module>     <!--就更改worker模組-->
    StartServers             5
    MinSpareThreads         150
    MaxSpareThreads        200001
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>
[root@apache extra]# /etc/init.d/httpd restart         <!--重啟服務-->
[root@apache extra]# ps -ef | grep httpd | wc -l   
8    <!--共8行,其中一個是主程序,還有一個是不相干的,所以要減2,就是說,有6個子程序,
而配置檔案中定義的每個子程序有25個執行緒,也就滿足了最小空閒執行緒150,若將最小空閒
子程序項改為200,那麼重啟後,等待1秒左右,就會發現又多了兩個子程序,以便滿足最小空閒子程序-->
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

在上面的配置中雖然MaxSpareThreads的值為200001(肯定超過了它的最大範圍),但重啟時還是沒有報錯,原因就是MaxRequestWorkers的值還是400,這個值生效了,攔截了MaxSpareThreads的值,所以沒有報錯,那麼接下來再將其更改如下:

[root@apache extra]# vim httpd-mpm.conf      <!--編輯配置檔案,將值都修改的大些-->
<IfModule mpm_worker_module>
    StartServers             300
    MinSpareThreads         200
    MaxSpareThreads        2000001
    ThreadsPerChild         25
    MaxRequestWorkers      200001      <!--將此處的值也修改的大點-->
    MaxConnectionsPerChild   0
</IfModule>
[root@apache extra]# /etc/init.d/httpd restart     <!--重啟服務,會提示以下資訊-->
AH00316: WARNING: MaxRequestWorkers of 200001 is not an integer multiple of ThreadsPerChild of 25, decreasing to nearest multiple 200000, for a maximum of 8000 servers.
AH00318: WARNING: MaxRequestWorkers of 200000 would require 8000 servers and would exceed ServerLimit of 16, decreasing to 400. To increase, please see the ServerLimit directive.
<!--翻譯如下:AH00316:警告:MaxRequestWorkers的200001不是ThreadsPerChild的25的整數倍,減少到最近的200000的倍數,最多8000個伺服器。
AH00318:警告:MaxRequestWorkers的200000將需要8000個伺服器,將超過伺服器限制16,減少到400。要增加,請參閱ServerLimit指令。-->
<!--根據提示資訊,需要進行以下更改-->
[root@apache extra]# vim httpd-mpm.conf       <!--編輯配置檔案,更改如下-->
<IfModule mpm_worker_module>
    ServerLimit             2000
    StartServers             80
    MinSpareThreads         200
    MaxSpareThreads        2000
    ThreadsPerChild         25
    MaxRequestWorkers      2000
    MaxConnectionsPerChild   0
</IfModule>
[root@apache extra]# /etc/init.d/httpd restart      <!--再次重啟,就沒有那些提示資訊了-->
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.

在上面的配置項中,各個配置項的值都是有預設的限制的,若想改變其限制,則需要在配置項的上一行增加ServerLimit配置項,而且ServerLimit配置項也是有最大限制的,若要修改各種值,建議仔細閱讀下面的內容,再進行更改。

  • worker 由主控制程序生成“StartServers”個子程序,每個子程序中包含固定的ThreadsPerChild 執行緒數,各個執行緒獨立地處理請求。同樣, 為了不在請求到來時再生成執行緒,MinSpareThreads 和 MaxSpareThreads 設定了最少和最多的空閒執行緒數。而 MaxRequestWorkers 設定了同時連入的 clients 最大總數。如果現有子程序中的執行緒總數不能滿足負載,控制程序將派生新的子程序MinSpareThreads 和 MaxSpareThreads 的最大預設值分別是 75 和 250。這兩個引數對 Apache的效能影響並不大,可以按照實際情況相應調節 。
  • ThreadsPerChild 是 worker MPM 中與效能相關最密切的指令。ThreadsPerChild 的最大預設值是 64,如果負載較大,64 也是不夠的。這時要顯式使用 ThreadLimit 指令,它的最大預設值是 20000。
  • Worker 模式下所能同時處理的請求總數是由子程序總數乘以 ThreadsPerChild 值決定的,應該大於等MaxRequestWorkers。如果負載很大,現有的子程序數不能滿足時,控制程序會派生新的子程序。預設最大的子程序總數是 16,加大時 也需要顯式宣告 ServerLimit(系統配置的最大程序數量,最大值是20000)。需要注意的是,如果顯式聲明瞭 ServerLimit,那麼它乘以 ThreadsPerChild的值必須大於等於MaxRequestWorkers,而且MaxRequestWorkers必須是 ThreadsPerChild 的整數倍,否則 Apache 將會自動調節到一個相應值。

五、程序與執行緒的區別

執行緒就是指程序內的一個執行單元,也是程序內的可排程實體。

與程序的區別:

  • 地址空間:程序內的一個執行單元;程序至少有一個執行緒;它們共享程序的地址空間;而程序有自己獨立的地址空間;
  • 資源擁有:程序是資源分配和擁有的單位,同一個程序內的執行緒共享程序的資源;
  • 執行緒是處理器排程的基本單位,但程序不是;
  • 二者均可併發執行;

程序和執行緒都是由作業系統所體會的程式執行的基本單元,系統利用該基本單元實現系統對應用的併發性。
程序和執行緒的區別在於:
簡而言之,一個程式至少有一個程序,一個程序至少有一個執行緒。
執行緒的劃分尺度小於程序,使得多執行緒程式的併發性高。
另外,程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大地提高了程
序的執行效率。

———————— 本文至此結束,感謝閱讀 ————————