新聞中心
Linux 是一種開(kāi)源操作系統(tǒng),具有許多優(yōu)秀的特性,其中最顯眼的就是其出色的并發(fā)處理能力。在 Linux 中,進(jìn)程是并發(fā)執(zhí)行的基本單位。Linux 能夠同時(shí)處理多個(gè)進(jìn)程,具有響應(yīng)迅速、高效利用 CPU 和內(nèi)存等優(yōu)點(diǎn)。本文將探討 Linux 如何處理進(jìn)程并發(fā),以及如何了解它是如何同時(shí)執(zhí)行任務(wù)的。

創(chuàng)新互聯(lián)-云計(jì)算及IDC服務(wù)提供商,涵蓋公有云、IDC機(jī)房租用、雅安服務(wù)器托管、等保安全、私有云建設(shè)等企業(yè)級(jí)互聯(lián)網(wǎng)基礎(chǔ)服務(wù),聯(lián)系電話:18982081108
一、進(jìn)程調(diào)度
在 Linux 中,進(jìn)程調(diào)度分為兩種類型:時(shí)間片輪轉(zhuǎn)調(diào)度和優(yōu)先級(jí)調(diào)度。
1.時(shí)間片輪轉(zhuǎn)調(diào)度
時(shí)間片輪轉(zhuǎn)調(diào)度是指在多個(gè)進(jìn)程之間分配時(shí)間片,依次輪流執(zhí)行,使每個(gè)進(jìn)程都能夠得到公平的 CPU 時(shí)間。在 Linux 中,時(shí)間片的長(zhǎng)度通常是 10 毫秒,經(jīng)過(guò)該時(shí)間后,進(jìn)程被暫停并放入等待隊(duì)列,然后運(yùn)行下一個(gè)進(jìn)程。經(jīng)過(guò)一段時(shí)間后,該進(jìn)程又被喚醒并獲得 CPU,如此周而復(fù)始。
2. 優(yōu)先級(jí)調(diào)度
優(yōu)先級(jí)調(diào)度是指將所有進(jìn)程按照優(yōu)先級(jí)從高到低排序,優(yōu)先級(jí)高的進(jìn)程優(yōu)先被執(zhí)行。在 Linux 中,進(jìn)程的優(yōu)先級(jí)范圍從 -20 到 +19,其中 -20 是更高優(yōu)先級(jí),+19 是更低優(yōu)先級(jí)。可以使用 nice 命令來(lái)調(diào)整進(jìn)程的優(yōu)先級(jí)。
二、進(jìn)程狀態(tài)
在 Linux 中,每個(gè)進(jìn)程都有其所處的狀態(tài),進(jìn)程狀態(tài)分為五種類型:運(yùn)行、等待、停止、僵尸和睡眠狀態(tài)。
1. 運(yùn)行狀態(tài)
進(jìn)程在運(yùn)行時(shí),處于該狀態(tài)。在調(diào)度器中,進(jìn)程的狀態(tài)是可運(yùn)行或正在運(yùn)行。
2. 等待狀態(tài)
進(jìn)程在等待某些事件時(shí),處于該狀態(tài)。在內(nèi)核中,進(jìn)程的狀態(tài)通常是不可運(yùn)行的,直到等待事件發(fā)生后才能被喚醒。
3. 停止?fàn)顟B(tài)
進(jìn)程在遇到致命錯(cuò)誤或被用戶強(qiáng)制停止時(shí),處于該狀態(tài)。已經(jīng)停止的進(jìn)程不再進(jìn)行 CPU 執(zhí)行。
4. 僵尸狀態(tài)
進(jìn)程在終止后,等待父進(jìn)程調(diào)用 wt 或 wtpid 函數(shù),處于該狀態(tài)。在該狀態(tài)下,內(nèi)核仍然保留進(jìn)程的一些信息,以便父進(jìn)程可以對(duì)其進(jìn)行處理。
5. 睡眠狀態(tài)
進(jìn)程在等待一些條件滿足時(shí),處于該狀態(tài)。睡眠狀態(tài)可以是可中斷的或不可中斷的??芍袛嗟臓顟B(tài)表明進(jìn)程一旦滿足條件就會(huì)醒來(lái),而不可中斷的狀態(tài)表明進(jìn)程將一直等待條件滿足。
三、進(jìn)程間通信
在 Linux 中,進(jìn)程之間可以通過(guò)多種方式進(jìn)行通信,例如信號(hào)、管道、共享內(nèi)存、消息隊(duì)列和套接字等。這些通信方式允許進(jìn)程之間共享數(shù)據(jù)和信息,實(shí)現(xiàn)協(xié)作和同步等。
1. 信號(hào)
信號(hào)是一種通信機(jī)制,允許進(jìn)程之間進(jìn)行異步通信。以一個(gè)進(jìn)程向另一個(gè)進(jìn)程發(fā)送信號(hào)為例,發(fā)送進(jìn)程使用 kill 命令發(fā)送信號(hào),接受進(jìn)程可以使用 signal 函數(shù)來(lái)處理收到的信號(hào)。
2. 管道
管道是一種單向通信方式,允許兩個(gè)相關(guān)進(jìn)程之間進(jìn)行有序通信。Linux 中的管道分為匿名管道和命名管道。匿名管道只能用于父子進(jìn)程之間的通信,而命名管道允許無(wú)關(guān)進(jìn)程之間的通信。
3. 共享內(nèi)存
共享內(nèi)存允許多個(gè)進(jìn)程訪問(wèn)同一段物理內(nèi)存區(qū)域。訪問(wèn)共享內(nèi)存的進(jìn)程可以使用指針直接訪問(wèn)內(nèi)存空間,從而在進(jìn)程之間共享數(shù)據(jù)。
4. 消息隊(duì)列
消息隊(duì)列是一種由內(nèi)核維護(hù)的緩沖區(qū),允許一個(gè)進(jìn)程向另一個(gè)進(jìn)程發(fā)送消息。Linux 中的消息隊(duì)列分為消息隊(duì)列和 POSIX 消息隊(duì)列。這兩種消息隊(duì)列都允許進(jìn)程發(fā)送消息,但 POSIX 消息隊(duì)列允許發(fā)送消息的大小和數(shù)量更多。
5. 套接字
套接字是一種通用的進(jìn)程間通信方式,可以在不同主機(jī)和進(jìn)程之間進(jìn)行通信。套接字是一種網(wǎng)絡(luò)編程的核心組件。
Linux 是一種出色的操作系統(tǒng),具有許多優(yōu)秀的特性,最顯著的是其出色的并發(fā)處理能力。在 Linux 中,進(jìn)程是并發(fā)執(zhí)行的基本單位。Linux 能夠同時(shí)處理多個(gè)進(jìn)程,具有響應(yīng)迅速,高效利用 CPU 和內(nèi)存等優(yōu)點(diǎn)。對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),了解 Linux 進(jìn)程的調(diào)度、狀態(tài)和通信機(jī)制是非常重要的,可以幫助他們編寫更高效,更可靠的應(yīng)用程序。
相關(guān)問(wèn)題拓展閱讀:
- 請(qǐng)教一個(gè)Linux多進(jìn)程訪問(wèn)動(dòng)態(tài)庫(kù)的互斥問(wèn)題
- Linux系統(tǒng)的進(jìn)程調(diào)度
請(qǐng)教一個(gè)Linux多進(jìn)程訪問(wèn)動(dòng)態(tài)庫(kù)的互斥問(wèn)題
請(qǐng)教一個(gè)Linux多進(jìn)程訪洞虧世問(wèn)動(dòng)態(tài)庫(kù)的互斥問(wèn)題
首先要了解并發(fā)。
并發(fā)進(jìn)程間的關(guān)系可以是無(wú)關(guān)的,也可以是有交往的。并發(fā)進(jìn)程間無(wú)關(guān)是指它們是各自獨(dú)立的,即如果一個(gè)空猜進(jìn)程的執(zhí)行不影響其他進(jìn)程的執(zhí)行,且與其他進(jìn)程的進(jìn)展情況無(wú)關(guān),不需要特別的控制;并發(fā)進(jìn)程間有交往是指一個(gè)進(jìn)程的執(zhí)行可能影響其他進(jìn)程的執(zhí)行結(jié)果,即一個(gè)進(jìn)程的執(zhí)行依賴其他進(jìn)程的進(jìn)展情況。有交往的并發(fā)進(jìn)程一定共享某些資源。
進(jìn)程之間互相競(jìng)爭(zhēng)某一個(gè)資源,這種關(guān)系就稱為進(jìn)程的互斥,也就是說(shuō)對(duì)于某個(gè)系統(tǒng)資源,如果一個(gè)進(jìn)程正在使用,其他的進(jìn)程就必須等待其用完,不能同時(shí)使用。例如,A,B兩個(gè)進(jìn)程共享一臺(tái)打印機(jī),如果系統(tǒng)已經(jīng)將打印機(jī)分配給了A進(jìn)程,當(dāng)B進(jìn)程需要打印時(shí)因得不到打印機(jī)而阻塞,只有A進(jìn)程將打印機(jī)釋放后,系統(tǒng)才將B進(jìn)程喚醒,B進(jìn)程才有可能獲得打印機(jī)。
并發(fā)進(jìn)程使用共享資源時(shí),納肢除了競(jìng)爭(zhēng)之外有協(xié)作,要利用互通消息的辦法來(lái)控制執(zhí)行速度,使相互協(xié)作的進(jìn)程正確工作。進(jìn)程之間的相互合作來(lái)完成某一任務(wù),把這種關(guān)系稱為進(jìn)程的同步。例如(生產(chǎn)者和消費(fèi)者)A,B兩個(gè)進(jìn)程通過(guò)一個(gè)緩沖區(qū)合作完成一項(xiàng)任務(wù),A進(jìn)程將數(shù)據(jù)送入緩沖區(qū)后通知B進(jìn)程緩沖區(qū)中有數(shù)據(jù),B進(jìn)程從緩沖區(qū)中取走數(shù)據(jù)再通知A進(jìn)程緩沖區(qū)現(xiàn)為空。
Linux系統(tǒng)的進(jìn)程調(diào)度
Linux進(jìn)程調(diào)度
1.調(diào)度方式
Linux系統(tǒng)的調(diào)度方式基本上采用“
搶占式優(yōu)先級(jí)
”方式,當(dāng)進(jìn)程在用戶模式下運(yùn)行時(shí),不管它是否自愿,核心在一定條件下(如該進(jìn)程的時(shí)間片用完或等待I/O)可以暫時(shí)中止其運(yùn)行,而調(diào)度其他進(jìn)程運(yùn)行。一旦進(jìn)程切換到內(nèi)核模式下運(yùn)行時(shí),就不受以上限制,而一直運(yùn)行下去,僅在重新回到用戶模式之前才會(huì)發(fā)生進(jìn)程調(diào)度。
Linux系統(tǒng)中的調(diào)度基本上繼承了UNIX系統(tǒng)的
以優(yōu)先級(jí)為基礎(chǔ)
的調(diào)度。也就是說(shuō),兆答核心為系統(tǒng)中每個(gè)進(jìn)程計(jì)算出一個(gè)優(yōu)先級(jí),該優(yōu)先級(jí)反映了一個(gè)進(jìn)程獲得CPU使用權(quán)的資格,即高優(yōu)先級(jí)的進(jìn)程優(yōu)先得到運(yùn)行。核心從進(jìn)程就緒隊(duì)列中挑選一個(gè)優(yōu)先級(jí)更高的進(jìn)程,為其分配一個(gè)CPU時(shí)間片,令其投入運(yùn)行。在運(yùn)行過(guò)程中,當(dāng)前進(jìn)程的優(yōu)先級(jí)隨時(shí)間喊悄遞減,這樣就實(shí)現(xiàn)了“負(fù)反饋”作用,即經(jīng)過(guò)一段時(shí)間之后,原來(lái)級(jí)別較低的進(jìn)程就相對(duì)“提升”了級(jí)別,從而有機(jī)會(huì)得到運(yùn)行。當(dāng)所有進(jìn)程的優(yōu)先級(jí)都變?yōu)?(更低)時(shí),就重新計(jì)算一次所有進(jìn)程的優(yōu)先級(jí)。
2.調(diào)度策略
Linux系統(tǒng)針對(duì)不同類別的進(jìn)程提供了3種不同的調(diào)度策略,即SCHED_FIFO、SCHED_RR及SCHED_OTHER。其中,SCHED_FIFO適合于
短實(shí)時(shí)進(jìn)程
,它們對(duì)時(shí)間性要求比較強(qiáng),而每次運(yùn)行所需的時(shí)間比較短。一旦這種進(jìn)程被調(diào)度且開(kāi)始運(yùn)行,就一直運(yùn)行到自愿讓出CPU或被優(yōu)先級(jí)更高的進(jìn)程搶占其執(zhí)行權(quán)為止。
SCHED_RR對(duì)應(yīng)“時(shí)間片輪轉(zhuǎn)法”,適合于每次運(yùn)行需要
較長(zhǎng)時(shí)間的實(shí)時(shí)進(jìn)程
。一個(gè)運(yùn)行進(jìn)程分配一個(gè)時(shí)間片(200 ms),當(dāng)時(shí)間片用完后,CPU被另外進(jìn)程搶占,而該進(jìn)程被送回相同優(yōu)先級(jí)隊(duì)列的末尾,核心動(dòng)態(tài)調(diào)整用戶態(tài)進(jìn)程的優(yōu)先級(jí)。這樣,一個(gè)進(jìn)程從創(chuàng)建到完成任務(wù)后終止,需要經(jīng)歷多次反饋循環(huán)。當(dāng)進(jìn)程再次被調(diào)度運(yùn)行時(shí),它就從上次斷點(diǎn)處開(kāi)始繼續(xù)執(zhí)行。
SCHED_OTHER是傳統(tǒng)的UNIX調(diào)度策略,適合于交互式的
分時(shí)進(jìn)程
。這類進(jìn)程的優(yōu)先級(jí)取決于兩個(gè)因素:一個(gè)是進(jìn)程剩余時(shí)間配額,如果進(jìn)程用完了配給的時(shí)間,則相應(yīng)優(yōu)先級(jí)降到0;另一個(gè)是進(jìn)程的優(yōu)先數(shù)nice,這是從UNIX系統(tǒng)沿襲下來(lái)的方法,優(yōu)先數(shù)越小,其優(yōu)先級(jí)越高。nice的取值范圍是-20 19。用戶可以利用nice命令設(shè)定進(jìn)程的nice值。但一般用戶只能設(shè)定正值,從而主動(dòng)降低其優(yōu)先級(jí);只有特權(quán)用戶才能把nice的值設(shè)置為負(fù)數(shù)。進(jìn)程的優(yōu)先級(jí)就是以上二者之和。
后臺(tái)命令對(duì)應(yīng)后臺(tái)進(jìn)程(又稱后臺(tái)作業(yè))。后臺(tái)進(jìn)程的優(yōu)先級(jí)低于任何交互(前臺(tái))進(jìn)程的優(yōu)先級(jí)。所以,只有當(dāng)系統(tǒng)中當(dāng)前不存在可運(yùn)行的交互進(jìn)程時(shí),才調(diào)度后臺(tái)進(jìn)程運(yùn)行。后臺(tái)進(jìn)程往往按批處理方式調(diào)鄭猜渣度運(yùn)行。
3.調(diào)度時(shí)機(jī)
核心進(jìn)行進(jìn)程調(diào)度的時(shí)機(jī)有以下5種情況:
(1)當(dāng)前進(jìn)程調(diào)用系統(tǒng)調(diào)用nanosleep( )或者pause( ),使自己進(jìn)入睡眠狀態(tài),主動(dòng)讓出一段時(shí)間的CPU的使用權(quán)。
(2)進(jìn)程終止,永久地放棄對(duì)CPU的使用。
(3)在時(shí)鐘中斷處理程序執(zhí)行過(guò)程中,發(fā)現(xiàn)當(dāng)前進(jìn)程連續(xù)運(yùn)行的時(shí)間過(guò)長(zhǎng)。
(4)當(dāng)喚醒一個(gè)睡眠進(jìn)程時(shí),發(fā)現(xiàn)被喚醒的進(jìn)程比當(dāng)前進(jìn)程更有資格運(yùn)行。
(5)一個(gè)進(jìn)程通過(guò)執(zhí)行系統(tǒng)調(diào)用來(lái)改變調(diào)度策略或者降低自身的優(yōu)先級(jí)(如nice命令),從而引起立即調(diào)度。
4.調(diào)度算法
進(jìn)程調(diào)度的算法應(yīng)該比較簡(jiǎn)單,以便減少頻繁調(diào)度時(shí)的系統(tǒng)開(kāi)銷。Linux執(zhí)行進(jìn)程調(diào)度時(shí),首先查找所有在就緒隊(duì)列中的進(jìn)程,從中選出優(yōu)先級(jí)更高且在內(nèi)存的一個(gè)進(jìn)程。如果隊(duì)列中有實(shí)時(shí)進(jìn)程,那么實(shí)時(shí)進(jìn)程將優(yōu)先運(yùn)行。如果最需要運(yùn)行的進(jìn)程不是當(dāng)前進(jìn)程,那么當(dāng)前進(jìn)程就被掛起,并且保存它的現(xiàn)場(chǎng)—— 所涉及的一切機(jī)器狀態(tài),包括程序計(jì)數(shù)器和CPU寄存器等,然后為選中的進(jìn)程恢復(fù)運(yùn)行現(xiàn)場(chǎng)。
(二)Linux常用調(diào)度命令
· nohup命令
nohup命令的功能是以忽略掛起和退出的方式執(zhí)行指定的命令。其命令格式是:
nohup command?。踑rguments]
其中,command是所要執(zhí)行的命令,arguments是指定命令的參數(shù)。
nohup命令告訴系統(tǒng),command所代表的命令在執(zhí)行過(guò)程中不受任何結(jié)束運(yùn)行的信號(hào)(hangup和quit)的影響。例如,
$ nohup find / -name exam.txt -print>f1 &
find命令在后臺(tái)運(yùn)行。在用戶注銷后,它會(huì)繼續(xù)運(yùn)行:從根目錄開(kāi)始,查找名字是exam.txt的文件,結(jié)果被定向到文件f1中。
如果用戶沒(méi)有對(duì)輸出進(jìn)行重定向,則輸出被附加到當(dāng)前目錄的nohup.out文件中。如果用戶在當(dāng)前目錄中不具備寫權(quán)限,則輸出被定向到$HOME/nohup.out 中。
· at命令
at命令允許指定命令執(zhí)行的時(shí)間。at命令的常用形式是:
at time command
其中,time是指定命令command在將來(lái)執(zhí)行時(shí)的時(shí)間和日期。時(shí)間的指定方法有多種,用戶可以使用絕對(duì)時(shí)間,也可以用相對(duì)時(shí)間。該指定命令將以作業(yè)形式在后臺(tái)運(yùn)行。例如:
$ at 15:00 Oct 20
回車后進(jìn)入接收方式,接著鍵入以下命令:
mail -s “Happy Birthday!” liuzheny
按下D鍵,屏幕顯示:
job.a at Wed Oct 20 15:00:00 CST
$
表明建立了一個(gè)作業(yè),其作業(yè)ID號(hào)是.a,運(yùn)行作業(yè)的時(shí)間是1999年10月20日下午3:00,給liuzheny發(fā)一條標(biāo)題為“Happy Birthday!”(生日快樂(lè))的空白郵件。
利用 at -l 可以列出當(dāng)前at隊(duì)列中所有的作業(yè)。
利用 at -r 可以刪除指定的作業(yè)。這些作業(yè)以前由at或batch命令調(diào)度。例如,
at -r.a
將刪除作業(yè)ID號(hào)是.a的作業(yè)。其一般使用形式是:
at -r job_id
注意,結(jié)尾是.a的作業(yè)ID號(hào),表示這個(gè)作業(yè)是由at命令提交的;結(jié)尾是.b的作業(yè)ID號(hào),表示這個(gè)作業(yè)是由batch命令提交的。
· batch命令
batch命令不帶任何參數(shù),它提交的作業(yè)的優(yōu)先級(jí)比at命令提交的作業(yè)的優(yōu)先級(jí)低。batch無(wú)法指定作業(yè)運(yùn)行的時(shí)間。實(shí)際運(yùn)行時(shí)間要看系統(tǒng)中已經(jīng)提交的作業(yè)數(shù)量。如果系統(tǒng)中優(yōu)先級(jí)較高的作業(yè)比較多,那么,batch提交的作業(yè)則需要等待;如果系統(tǒng)空閑,則運(yùn)行batch提交的作業(yè)。例如,
$ batch
回車后進(jìn)入接收方式,接著鍵入命令:
find / -name exam.txt -print
按下D。退出接收方式,屏幕顯示:
job.b at Thu Nov 18 14:30:00 CST
表示find命令被batch作為一個(gè)作業(yè)提交給系統(tǒng),作業(yè)ID號(hào)是.b。如果系統(tǒng)當(dāng)前空閑,這個(gè)作業(yè)被立即執(zhí)行,其結(jié)果同樣作為郵件發(fā)送給用戶。
· jobs命令
jobs命令用來(lái)顯示當(dāng)前shell下正在運(yùn)行哪些作業(yè)(即后臺(tái)作業(yè))。例如:
$ jobs
+ Running tar tv3 *&
– Running find / -name README -print > logfile &
$
其中,之一列方括號(hào)中的數(shù)字表示作業(yè)序號(hào),它是由當(dāng)前運(yùn)行的shell分配的,而不是由操作系統(tǒng)統(tǒng)一分配的。在當(dāng)前shell環(huán)境下,之一個(gè)后臺(tái)作業(yè)的作業(yè)號(hào)為1,第二個(gè)作業(yè)的作業(yè)號(hào)為2,等等。
第二列中的“ ”號(hào)表示相應(yīng)作業(yè)的優(yōu)先級(jí)比“-”號(hào)對(duì)應(yīng)作業(yè)的優(yōu)先級(jí)高。
第三列表明作業(yè)狀態(tài),是否為運(yùn)行、中斷、等待輸入或停止等。
最后列出的是創(chuàng)建當(dāng)前這個(gè)作業(yè)所對(duì)應(yīng)的命令行。
利用 jobs -l 形式,可以在作業(yè)號(hào)后顯示出相應(yīng)進(jìn)程的PID。如果想只顯示相應(yīng)進(jìn)程的PID,不顯示其它信息,則使用 jobs -p 形式。
· fg命令
fg命令把指定的后臺(tái)作業(yè)移到前臺(tái)。其使用格式是:
fg
其中,參數(shù)job是一個(gè)或多個(gè)進(jìn)程的PID,或者是命令名稱或者作業(yè)號(hào)(前面要帶有一個(gè)“%”號(hào))。例如:
$ jobs
+ Running tar tv3 *&
– Running find / -name README -print > logfile&
$ fg %find
find / -name README -print > logfile
注意,顯示的命令行末尾沒(méi)有“&”符號(hào)。下面命令能產(chǎn)生同樣的效果:
$ fg %1
這樣,find命令對(duì)應(yīng)的進(jìn)程就在前臺(tái)執(zhí)行。當(dāng)后臺(tái)只有一個(gè)作業(yè)時(shí),鍵入不帶參數(shù)的fg命令,就能使相應(yīng)進(jìn)程移到前臺(tái)。當(dāng)有兩個(gè)或更多的后臺(tái)作業(yè)時(shí),鍵入不帶參數(shù)的fg,就把最后進(jìn)入后臺(tái)的進(jìn)程首先移到前臺(tái)。
· bg命令
bg命令可以把前臺(tái)進(jìn)程換到后臺(tái)執(zhí)行。其使用格式是:
bg
其中,job是一個(gè)或多個(gè)進(jìn)程的PID、命令名稱或者作業(yè)號(hào),在參數(shù)前要帶“%”號(hào)。例如,在cc(C編譯命令)命令執(zhí)行過(guò)程中,按下Z鍵,使這個(gè)作業(yè)掛起。然后鍵入以下命令:
$ bg %cc
關(guān)于linux 進(jìn)程并發(fā)執(zhí)行的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都服務(wù)器租用選創(chuàng)新互聯(lián),先試用再開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡(jiǎn)單好用,價(jià)格厚道的香港/美國(guó)云服務(wù)器和獨(dú)立服務(wù)器。物理服務(wù)器托管租用:四川成都、綿陽(yáng)、重慶、貴陽(yáng)機(jī)房服務(wù)器托管租用。
新聞名稱:Linux 處理進(jìn)程并發(fā):了解它是如何同時(shí)執(zhí)行任務(wù)的 (linux 進(jìn)程并發(fā)執(zhí)行)
網(wǎng)頁(yè)URL:http://www.5511xx.com/article/codjgij.html


咨詢
建站咨詢
