在LInux服務(wù)器上實(shí)現(xiàn)web服務(wù),常見無(wú)非也就是Apache、Nginx、Tomcat。
創(chuàng)新互聯(lián)建站是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號(hào)開發(fā),軟件開發(fā),小程序設(shè)計(jì),10余年建站對(duì)木托盤等多個(gè)行業(yè),擁有豐富的網(wǎng)站營(yíng)銷經(jīng)驗(yàn)。三者之間的區(qū)別:
- Apache:支持的模塊比較多,采用servlet處理模型,同步阻塞模型,工作模式多變,對(duì)于高并發(fā)的場(chǎng)景處理速度比較慢,運(yùn)行穩(wěn)定;
- Nginx :輕量級(jí)web服務(wù)器,自身支持模塊少,需要借助第三方模塊支持(Nginx官網(wǎng)就可以下載),采用epoll處理模式,異步非阻塞型,適合高并發(fā)場(chǎng)景,配置簡(jiǎn)單;
- Tomcat:apache軟件基金會(huì)下開源的子項(xiàng)目,也成為容器,主要處理java語(yǔ)言編寫的頁(yè)面,也可以處理html頁(yè)面,并發(fā)連接??;
今天這篇博文主要就是圍繞apache-2.4.23版本展開的:
對(duì)apache不太了解的朋友可以參考博文:基于Apache搭建Web服務(wù)器詳解
這里就不具體介紹apache究竟是什么、它的起因什么的了。
博文大綱:
一、httpd-2.4.23版本特性
二、編譯安裝httpd-2.4.23
三、apche的三種工作模式
四、進(jìn)程與線程的區(qū)別
新版本的httpd-2.4.23新增模塊:
- mod_proxy_fcgi(可提供fcgi代理);
- mod_ratelimit(限制用戶帶寬);
- mod_request(請(qǐng)求模塊,對(duì)請(qǐng)求進(jìn)行過濾);
- mod_remoteip(匹配客戶端的IP地址);
對(duì)于基于IP的訪問控制進(jìn)行了修改,不再支持allow、deny、order機(jī)制,而是統(tǒng)一使用require進(jìn)行!
新增的特性有:
- MPM支持在運(yùn)行時(shí)裝載;
- 支持envet工作模式;
- 支持異步讀寫功能;
- 每個(gè)模塊都可以指定輸出的日志級(jí)別;
- 增強(qiáng)版的表達(dá)式分析器;
- 請(qǐng)求配置:<if>,<elseif>;
- 毫秒級(jí)別的keepalive timeout;
- 支持FQDN的虛擬主機(jī);
- 支持自定義變量;
接下來(lái)開始安裝!
安裝環(huán)境:
[root@localhost ~]# rpm -q httpd
未安裝軟件包 httpd
//如果存在,使用“-e”選項(xiàng)進(jìn)行卸載
apr是Apache可移植運(yùn)行庫(kù),是一個(gè)對(duì)操作系統(tǒng)條用的抽象庫(kù),用于實(shí)現(xiàn)Apache內(nèi)部組件對(duì)操作系統(tǒng)的使用,提高系統(tǒng)的可移植性。
[root@localhost ~]# tar zxf apr-1.5.2.tar.gz -C /usr/src
[root@localhost ~]# cd /usr/src/apr-1.5.2/
[root@localhost apr-1.5.2]# ./configure --prefix=/usr/local/apr && make && make install
[root@localhost ~]# tar zxf apr-util-1.5.4.tar.gz -C /usr/src
[root@localhost ~]# cd /usr/src/apr-util-1.5.4/
[root@localhost apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install
[root@localhost ~]# tar zxf zlib-1.2.8.tar.gz -C /usr/src
[root@localhost ~]# cd /usr/src/zlib-1.2.8/
[root@localhost zlib-1.2.8]# ./configure --prefix=/usr/local/zlib && make && make install
[root@localhost ~]# tar zxf pcre-8.39.tar.gz -C /usr/src
[root@localhost ~]# cd /usr/src/pcre-8.39/
[root@localhost pcre-8.39]# ./configure -- prefix=/usr/local/pcre && make && make install
安裝apache-2.4.23版本時(shí),會(huì)提示openssl自帶的版本過低,需要自行手動(dòng)安裝新的版本。
[root@localhost ~]# tar zxf openssl-1.0.1u.tar.gz -C /usr/src
[root@localhost ~]# cd /usr/src/openssl-1.0.1u/
[root@localhost openssl-1.0.1u]# ./config -fPIC --prefix=/usr/local/openssl enable-shared && make && make install
//PIC使.so文件的代碼段變?yōu)檎嬲饬x上的共享
//如果不加-fPIC,則加載.so文件的代碼段時(shí),代碼段引用的數(shù)據(jù)對(duì)象需要重定位, 重定位會(huì)修改代碼段的內(nèi)容,這就造成每個(gè)使用這個(gè).so文件代碼段的進(jìn)程在內(nèi)核里都會(huì)生成這個(gè).so文件代碼段的copy.每個(gè)copy都不一樣,取決于 這個(gè).so文件代碼段和數(shù)據(jù)段內(nèi)存映射的位置.
[root@localhost ~]# tar zxf httpd-2.4.23.tar.gz -C /usr/src
[root@localhost ~]# cd /usr/src/httpd-2.4.23/
[root@localhost 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
各選項(xiàng)含義:
- --enable-so:支持動(dòng)態(tài)共享模塊;
- --enable-rewrite:支持url重寫;
- --enable-ssl:支持ssl;
- --with-ssl=/usr/local/openssl:指定ssl安裝位置;
- --enable-cgi:開啟cgi通用網(wǎng)管接口;
- --enable-cgid:開啟cig通用網(wǎng)管接口管理程序;
- --enable-modules=most:編譯成二進(jìn)制是安裝常用模塊;
- --enable-mpms-shared=all:安裝apache的所有工作模式;
- --with-mpm=event:指定默認(rèn)的運(yùn)行方式
- --with-pcre=/usr/local/pcre:支持 pcre ;
- --with-z=/usr/local/zlib:使用 zlib 壓縮庫(kù);
- --with-apr=/usr/local/apr:指定 apr 的安裝路徑;
- --with-apr-util=/usr/local/apr-util:指定 apr-util 的安裝路徑;
- --enable-expires:支持緩存;
- --enable-deflate:支持壓縮;
[root@localhost httpd-2.4.23]# ln -s /usr/local/http-2.4.23/bin/* /usr/local/bin/
[root@localhost httpd-2.4.23]# cp /usr/local/http-2.4.23/bin/apachectl /etc/init.d/httpd
[root@localhost httpd-2.4.23]# vim /etc/init.d/httpd
#!/bin/bash //修改
#chkconfig: 35 85 15 //添加
………… //省略以下內(nèi)容
[root@localhost httpd-2.4.23]# chkconfig --add httpd
[root@localhost httpd-2.4.23]# systemctl start httpd
[root@localhost httpd-2.4.23]# netstat -anpt | grep 80
tcp6 0 0 :::80 :::* LISTEN 108903/httpd
[root@localhost ~]# httpd -M //可以查看到httpd服務(wù)啟動(dòng)加載的模塊
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
//關(guān)于啟動(dòng)服務(wù)時(shí)提示以上的信息,可以省略,也可修改其配置文件(/usr/local/http-2.4.23/conf/httpd.conf)文件找到“ServerName ”一行,根據(jù)實(shí)際情況進(jìn)行修改
Loaded Modules:
core_module (static)
so_module (static)
http_module (static)
authn_file_module (shared)
authn_core_module (shared)
authz_host_module (shared)
authz_groupfile_module (shared)
authz_user_module (shared)
authz_core_module (shared)
access_compat_module (shared)
auth_basic_module (shared)
reqtimeout_module (shared)
filter_module (shared)
mime_module (shared)
log_config_module (shared)
env_module (shared)
headers_module (shared)
setenvif_module (shared)
version_module (shared)
mpm_prefork_module (shared)
unixd_module (shared)
status_module (shared)
autoindex_module (shared)
dir_module (shared)
alias_module (shared)
至此apache-2.4.23已經(jīng)安裝完成。
其工作方式:當(dāng)Apache服務(wù)啟動(dòng)后,mpm_prefork模塊會(huì)預(yù)先創(chuàng)建多個(gè)子進(jìn)程(默認(rèn)為5個(gè)),每個(gè)子進(jìn)程只有一個(gè)線程,當(dāng)接收到客戶端請(qǐng)求后,mpm_prefork模塊再將請(qǐng)求轉(zhuǎn)交給子進(jìn)程進(jìn)行處理,并且每個(gè)子進(jìn)程同時(shí)只能用于單個(gè)請(qǐng)求。如果當(dāng)前的請(qǐng)求數(shù)將超過預(yù)先創(chuàng)建的子進(jìn)程數(shù)時(shí),mpm_prefork模塊就會(huì)創(chuàng)建新的子進(jìn)程來(lái)處理額外的請(qǐng)求。
如圖:
Apache總是試圖保持一些備用或空閑的子進(jìn)程用于迎接即將到來(lái)的請(qǐng)求。這樣客戶端的請(qǐng)求就不需要在接收后等待子進(jìn)程的產(chǎn)生。
由于在 mpm_prefork 模塊中,每個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)子進(jìn)程,因此其占用的系統(tǒng)資源相對(duì)其他 兩種模塊而言較多。不過 mpm_prefork 模塊的優(yōu)點(diǎn)在于它的每個(gè)子進(jìn)程都會(huì)獨(dú)立處理對(duì)應(yīng) 的單個(gè)請(qǐng)求,這樣,如果其中一個(gè)請(qǐng)求出現(xiàn)問題就不會(huì)影響到其他請(qǐng)求。Prefork 在效率上 要比 Worker 要高,但是內(nèi)存使用大得多不擅長(zhǎng)處理高并發(fā)的場(chǎng)景。
開啟prefork模式的方法:
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf
//編寫httpd的主配置文件,修改一下內(nèi)容
Include conf/extra/httpd-mpm.conf //默認(rèn)存在刪除“#”號(hào)即可
#LoadModule mpm_event_module modules/mod_mpm_event.so
//添加#號(hào)
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
//默認(rèn)存在,刪除#號(hào)即可!
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
//這三行便是apache的三種工作模式,可根據(jù)實(shí)際情況進(jìn)行切換
[root@localhost ~]# systemctl restart httpd //重新啟動(dòng)httpd服務(wù)
[root@localhost ~]# systemctl start httpd //手動(dòng)再啟動(dòng)一下
[root@localhost ~]# httpd -V //查看httpd的工作模式
//找到這一行即可
Server MPM: prefork //可以看到現(xiàn)在Apache工作在prefork模式
與prefork模式有關(guān)的配置文件如下:
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/extra/httpd-mpm.conf
//設(shè)置prefork模式也就只有這幾個(gè)參數(shù),具體含義:
<IfModule mpm_prefork_module> //這就是prefork工作模式的參數(shù)-
StartServers 5 //apache啟動(dòng)時(shí)默認(rèn)開啟的子進(jìn)程數(shù)
MinSpareServers 5 //最小的閑置子進(jìn)程數(shù)
MaxSpareServers 10 //大的閑置子進(jìn)程數(shù)
MaxRequestWorkers 250 // 設(shè)置了允許同時(shí)的大接入請(qǐng)求數(shù)量
MaxConnectionsPerChild 0 //0表示每個(gè)子進(jìn)程處理完數(shù)據(jù)后進(jìn)程永不銷毀,設(shè)置成非0時(shí),可防止內(nèi)存泄漏,服務(wù)器在負(fù)載小時(shí)自動(dòng)減少自己進(jìn)程數(shù)
</IfModule>
關(guān)于其配置內(nèi)容可參考圖片:
//注 1:MaxRequestWorkers 是這些指令中最為重要的一個(gè),設(shè)定的是 Apache 可以同時(shí)處理 的請(qǐng)求,是對(duì) Apache 性能影響大的參數(shù)。如果請(qǐng)求總數(shù)已達(dá)到這個(gè)值(可通過 ps -ef|grep http|wc -l 來(lái)確認(rèn)),那么后面的請(qǐng)求就要排隊(duì),直到某個(gè)已處理請(qǐng)求完畢。這就是系統(tǒng)資源 還剩下很多而 HTTP 訪問卻很慢的主要原因。雖然理論上這個(gè)值越大,可以處理的請(qǐng)求就越 多,建議將初始值設(shè)為(以 Mb 為單位的大物理內(nèi)存/2),然后根據(jù)負(fù)載情況進(jìn)行動(dòng)態(tài)調(diào)整。 比如一臺(tái) 4G 內(nèi)存的機(jī)器,那么初始值就是 4000/2=2000
注 2:prefork 控制進(jìn)程在最初建立“StartServers”個(gè)子進(jìn)程后,為了滿足 MinSpareServers 設(shè)置的需要?jiǎng)?chuàng)建一個(gè)進(jìn)程,等待一秒鐘,繼續(xù)創(chuàng)建兩個(gè),再等待一秒鐘,繼續(xù)創(chuàng)建四個(gè)……如 此按指數(shù)級(jí)增加創(chuàng)建的進(jìn)程數(shù),最多達(dá)到每秒 32 個(gè),直到滿足 MinSpareServers 設(shè)置的值為止。這種模式 可以不必在請(qǐng)求到來(lái)時(shí)再產(chǎn)生新的進(jìn)程,從而減小了系統(tǒng)開銷以增加性能。 MaxSpareServers 設(shè)置了大的空閑進(jìn)程數(shù),如果空閑進(jìn)程數(shù)大于這個(gè) 值,Apache 會(huì)自動(dòng) kill 掉一些多余進(jìn)程。這個(gè)值不要設(shè)得過大,但如果設(shè)的值比 MinSpareServers 小,Apache 會(huì)自 動(dòng)把其調(diào)整為 MinSpareServers+1。如果站點(diǎn)負(fù)載較大,可考慮同時(shí)加大 MinSpareServers 和 MaxSpareServers。
注 3:ServerLimit 和 MaxClients(MaxRequestWorkers)有什么區(qū)別呢? 是因?yàn)樵?apache1 時(shí)代,控制大進(jìn)程數(shù)只有 MaxClients 這個(gè)參數(shù),并且這個(gè)參數(shù)大值為 256,并且是寫死了的,試圖設(shè)置為超過 256 是無(wú)效的,這是由于 apache1 時(shí)代的服務(wù)器硬 件限制的。但是 apache2 時(shí)代由于服務(wù)器硬件的升級(jí),硬件已經(jīng)不再是限制,所以使用 ServerLimit 這個(gè)參數(shù)來(lái)控制大進(jìn)程數(shù),ServerLimit 值>=MaxClient 值才有效。ServerLimit 要放在 MaxClients 之前,值要不小于 MaxClients
優(yōu)點(diǎn):成熟,兼容所有新老模塊。進(jìn)程之間完全獨(dú)立,使得它非常穩(wěn)定。同時(shí),不需要擔(dān)心線程安全的問題。(我們常用的mod_php,PHP的拓展不需要支持線程安全)
缺點(diǎn):一個(gè)進(jìn)程相對(duì)占用更多的系統(tǒng)資源,消耗更多的內(nèi)存。而且,它并不擅長(zhǎng)處理高并發(fā)請(qǐng)求,在這種場(chǎng)景下,它會(huì)將請(qǐng)求放進(jìn)隊(duì)列中,一直等到有可用進(jìn)程,請(qǐng)求才會(huì)被處理。
Worker 模式(多線程多進(jìn)程): 和 prefork 模式相比,worker 使用了多進(jìn)程和多線程的混合模式,worker 模式也同樣會(huì)先預(yù)派生一些子進(jìn)程,然后每個(gè)子進(jìn)程創(chuàng)建一些線程,同時(shí)包括一個(gè)監(jiān)聽線程,每個(gè)請(qǐng)求過來(lái)會(huì) 被分配到一個(gè)線程來(lái)服務(wù)。線程比起進(jìn)程會(huì)更輕量,因?yàn)榫€程是通過共享父進(jìn)程的內(nèi)存空間, 因此,內(nèi)存的占用會(huì)減少一些,在高并發(fā)的場(chǎng)景下會(huì)比 prefork 有更多可用的線程,表現(xiàn)會(huì) 更優(yōu)秀一些;另外,如果一個(gè)線程出現(xiàn)了問題也會(huì)導(dǎo)致同一進(jìn)程下的線程出現(xiàn)問題,如果是 多個(gè)線程出現(xiàn)問題,也只是影響 Apache 的一部分,而不是全部。由于用到多進(jìn)程多線程, 需要考慮到線程的安全了,在使用 keep-alive 長(zhǎng)連接的時(shí)候,某個(gè)線程會(huì)一直被占用,即使 中間沒有請(qǐng)求,需要等待到超時(shí)才會(huì)被釋放(該問題在 prefork 模式下也存在) 總的來(lái)說(shuō),prefork 方式速度要稍高于 worker,然而它需要的 cpu 和 memory 資源也稍多于 woker。如圖:
Apache總是試圖維持一個(gè)備用(spare)或是空閑的服務(wù)線程池。這樣,客戶端無(wú)須等待新線程或新進(jìn)程的建立即可得到處理。在Unix中,為了能夠綁定80端口,父進(jìn)程一般都是以root身份啟動(dòng),隨后,Apache以較低權(quán)限的用戶建立子進(jìn)程和線程。User和Group指令用于配置Apache子進(jìn)程的權(quán)限。雖然子進(jìn)程必須對(duì)其提供的內(nèi)容擁有讀權(quán)限,但應(yīng)該盡可能給予他較少的特權(quán)。另外,除非使用了suexec(負(fù)責(zé)處理CGI和SSI程序的請(qǐng)求,確保網(wǎng)頁(yè)使用者能以該目錄或程序的用戶ID來(lái)執(zhí)行遠(yuǎn)程程序。) ,否則,這些指令配置的權(quán)限將被CGI腳本所繼承。
線程比起進(jìn)程會(huì)更輕量,因?yàn)榫€程通常會(huì)共享父進(jìn)程的內(nèi)存空間,因此,內(nèi)存的占用會(huì)減少一些,在高并發(fā)的場(chǎng)景下,表現(xiàn)得比 prefork模式好。
有些人會(huì)覺得奇怪,那么這里為什么不直接使用多線程呢?主要是需要考慮穩(wěn)定性,如果一個(gè)線程異常掛了,會(huì)導(dǎo)致父進(jìn)程連同其他正常的子線程都掛了(它們都是同一個(gè)進(jìn)程下的)。多進(jìn)程+多線程模式中,各個(gè)進(jìn)程之間都是獨(dú)立的,如果某個(gè)線程出現(xiàn)異常,受影響的只是Apache的一部分服務(wù),而不是整個(gè)服務(wù)。其他進(jìn)程仍然可以工作。
有關(guān)work模式的配置:
//自行修改httpd主配置文件,切換模式并重啟服務(wù),接下來(lái)
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/extra/httpd-mpm.conf
<IfModule mpm_worker_module> //這是worker工作模式的參數(shù)
StartServers 3 //apache啟動(dòng)時(shí)默認(rèn)開始的子進(jìn)程數(shù)
MinSpareThreads 75 //最小空閑數(shù)量的工作線程-
MaxSpareThreads 250 //大空閑數(shù)量的工作線程-
ThreadsPerChild 25 //每個(gè)子進(jìn)程產(chǎn)生的線程數(shù)量
MaxRequestWorkers 400 //每個(gè)進(jìn)程大接受的請(qǐng)求數(shù)量
MaxConnectionsPerChild 0 //表示永不銷毀
</IfModule>
有關(guān)work模式的詳細(xì)介紹請(qǐng)參考圖片:
Worker模式下所能同時(shí)處理的請(qǐng)求總數(shù)是由子進(jìn)程總數(shù)乘以ThreadsPerChild 值決定的,應(yīng)該大于等于MaxRequestWorkers。如果負(fù)載很大,現(xiàn)有的子進(jìn)程數(shù)不能滿足時(shí),控制進(jìn)程會(huì)派生新的子進(jìn)程。默認(rèn)大的子進(jìn)程總數(shù)是16,加大時(shí) 也需要顯式聲明ServerLimit(大值是20000)。需要注意的是,如果顯式聲明了ServerLimit,那么它乘以 ThreadsPerChild的值必須大于等于MaxRequestWorkers,而且MaxRequestWorkers必須是ThreadsPerChild的整數(shù)倍,否則 Apache將會(huì)自動(dòng)調(diào)節(jié)到一個(gè)相應(yīng)值。
優(yōu)點(diǎn):占據(jù)更少的內(nèi)存,高并發(fā)下表現(xiàn)更優(yōu)秀。
缺點(diǎn):必須考慮線程安全的問題,因?yàn)槎鄠€(gè)子線程是共享父進(jìn)程的內(nèi)存地址的。如果使用keep-alive的長(zhǎng)連接方式,也許中間幾乎沒有請(qǐng)求,這時(shí)就會(huì)發(fā)生阻塞,線程被掛起,需要一直等待到超時(shí)才會(huì)被釋放。如果過多的線程,被這樣占據(jù),也會(huì)導(dǎo)致在高并發(fā)場(chǎng)景下的無(wú)服務(wù)線程可用。(該問題在prefork模式下,同樣會(huì)發(fā)生)。
這是Apache最新的工作模式,它和worker模式很像,不同的是在于它解決了keep-alive長(zhǎng)連接的時(shí)候占用線程資源被浪費(fèi)的問題,在event工作模式中,會(huì)有一些專門的線程用來(lái)管理這些keep-alive類型的線程,當(dāng)有真實(shí)請(qǐng)求過來(lái)的時(shí)候,將請(qǐng)求傳遞給服務(wù)器的線程,執(zhí)行完畢后,又允許它釋放。這增強(qiáng)了在高并發(fā)場(chǎng)景下的請(qǐng)求處理。如圖:
有關(guān)Event MPM模式的配置:
//自行修改httpd主配置文件,切換模式并重啟服務(wù),接下來(lái)
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/extra/httpd-mpm.conf
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
//其各項(xiàng)配置內(nèi)容與work模式十分相似,這里就不多說(shuō)了!
線程就是指進(jìn)程內(nèi)的一個(gè)執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)度實(shí)體。
線程與進(jìn)程的區(qū)別:
- 地址空間:進(jìn)程內(nèi)的一個(gè)執(zhí)行單元;進(jìn)程至少有一個(gè)線程;它們共享進(jìn)程的地址空間;而進(jìn)程有自己獨(dú)立的地址空間;
- 資源擁有:進(jìn)程是資源分配和擁有的單位,同一個(gè)進(jìn)程內(nèi)的線程共享進(jìn)程的資源;
- 線程是處理器調(diào)度的基本單位,但進(jìn)程不是;
- 二者均可并發(fā)執(zhí)行;
進(jìn)程和線程都是由操作系統(tǒng)所體會(huì)的程序運(yùn)行的基本單元,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對(duì)應(yīng)用的并發(fā)性。
進(jìn)程和線程的區(qū)別在于:
簡(jiǎn)而言之,一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程。
線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高。
另外,進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存,從而極大地提高了程
序的運(yùn)行效率。
———————— 本文至此結(jié)束,感謝閱讀 ————————
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
當(dāng)前標(biāo)題:Apache的安裝部署及工作模式詳解-創(chuàng)新互聯(lián)
瀏覽地址:http://www.muchs.cn/article28/ejhcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、用戶體驗(yàn)、網(wǎng)頁(yè)設(shè)計(jì)公司、定制網(wǎng)站、網(wǎng)站內(nèi)鏈、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容