1、進(jìn)程和線程的區(qū)別?
進(jìn)程和線程都是操作系統(tǒng)中進(jìn)行任務(wù)調(diào)度的基本單位,二者之間的主要區(qū)別如下:
- 資源占用:進(jìn)程是操作系統(tǒng)資源分配的基本單位,一個(gè)進(jìn)程可以擁有多個(gè)線程,而線程是進(jìn)程中的執(zhí)行單元,是CPU調(diào)度的基本單位。每個(gè)線程共享所屬進(jìn)程的資源,如代碼段、數(shù)據(jù)段、打開的文件等。而進(jìn)程之間互相獨(dú)立,互不干擾,每個(gè)進(jìn)程有自己獨(dú)立的資源空間,不同進(jìn)程之間需要通過IPC(進(jìn)程間通信)來進(jìn)行通信和數(shù)據(jù)共享。
- 調(diào)度和切換:操作系統(tǒng)在調(diào)度和分配CPU時(shí),將進(jìn)程作為基本的調(diào)度和分配單位,即進(jìn)程擁有自己的調(diào)度隊(duì)列。而線程是依附于進(jìn)程而存在的,一個(gè)進(jìn)程中的多個(gè)線程共享進(jìn)程的時(shí)間片和資源,因此在調(diào)度和切換時(shí),線程切換比進(jìn)程切換更快,也更加輕量級。
- 創(chuàng)建和銷毀:進(jìn)程的創(chuàng)建和銷毀比線程更加復(fù)雜,創(chuàng)建一個(gè)進(jìn)程需要為其分配資源、建立PCB(進(jìn)程控制塊)、建立內(nèi)核對象等,而銷毀進(jìn)程需要回收資源、關(guān)閉打開的文件等。而線程的創(chuàng)建和銷毀相對簡單,只需要為其分配線程棧、建立TCB(線程控制塊)等即可。
- 通信和同步:進(jìn)程之間通過IPC(管道、套接字、消息隊(duì)列等)進(jìn)行通信和數(shù)據(jù)共享,而線程之間可以直接訪問同一進(jìn)程的共享數(shù)據(jù)區(qū),也可以通過鎖機(jī)制實(shí)現(xiàn)同步。
綜上所述,進(jìn)程和線程在資源占用、調(diào)度和切換、創(chuàng)建和銷毀、通信和同步等方面有著不同的特點(diǎn),開發(fā)者在實(shí)際編程時(shí)需要根據(jù)具體的情況選擇使用進(jìn)程還是線程來完成任務(wù)。
2、協(xié)程與線程的區(qū)別?
協(xié)程和線程都是用于實(shí)現(xiàn)多任務(wù)的技術(shù),但是它們的實(shí)現(xiàn)方式有所不同,具體區(qū)別如下:
- 調(diào)度方式不同:線程由操作系統(tǒng)內(nèi)核進(jìn)行調(diào)度,而協(xié)程則是在用戶空間中進(jìn)行調(diào)度,不需要切換到內(nèi)核態(tài)。
- 并發(fā)性不同:線程是操作系統(tǒng)調(diào)度的最小單位,多個(gè)線程可以并行執(zhí)行;協(xié)程則是在單線程內(nèi)部通過協(xié)作式調(diào)度實(shí)現(xiàn)并發(fā)。
- 內(nèi)存使用不同:線程是由操作系統(tǒng)內(nèi)核創(chuàng)建的,需要占用一定的系統(tǒng)資源,而協(xié)程則是由用戶程序創(chuàng)建,不需要占用額外的系統(tǒng)資源。
- 上下文切換開銷不同:線程在切換時(shí)需要保存和恢復(fù)所有的寄存器狀態(tài)和內(nèi)核堆棧,而協(xié)程只需要保存和恢復(fù)少量的寄存器狀態(tài),開銷較小。
- 編程難度不同:線程的編程難度相對較大,因?yàn)槎嗑€程之間需要共享資源并進(jìn)行同步,而協(xié)程則是在單線程內(nèi)部調(diào)度,因此編程難度相對較小。
總之,線程是操作系統(tǒng)內(nèi)核的調(diào)度對象,具有獨(dú)立的系統(tǒng)資源,可以并行執(zhí)行多個(gè)任務(wù);而協(xié)程是用戶程序的調(diào)度對象,不需要占用額外的系統(tǒng)資源,通過協(xié)作式調(diào)度實(shí)現(xiàn)任務(wù)之間的切換。
3、并發(fā)和并行的區(qū)別?
并發(fā)和并行都是指同時(shí)處理多個(gè)任務(wù)的方式,但是它們有不同的含義。
并發(fā)是指一個(gè)處理器同時(shí)處理多個(gè)任務(wù),這些任務(wù)通常是通過在不同的時(shí)間間隔內(nèi)交替進(jìn)行的,這樣在同一時(shí)刻可以看到有多個(gè)任務(wù)在運(yùn)行。這些任務(wù)可以是在同一個(gè)程序內(nèi)的不同線程,也可以是在不同程序之間的交互,例如客戶端與服務(wù)器之間的通信。
并行是指使用多個(gè)處理器同時(shí)處理多個(gè)任務(wù),這些任務(wù)在同一時(shí)刻可以看到有多個(gè)任務(wù)在同時(shí)運(yùn)行。與并發(fā)不同的是,并行需要多個(gè)處理器或多個(gè)計(jì)算核心,而并發(fā)則可以在單個(gè)處理器上執(zhí)行多個(gè)任務(wù)。
簡單來說,并發(fā)是在一個(gè)處理器上同時(shí)執(zhí)行多個(gè)任務(wù),而并行是在多個(gè)處理器或計(jì)算核心上同時(shí)執(zhí)行多個(gè)任務(wù)。
4、進(jìn)程與線程的切換流程?
進(jìn)程與線程的切換流程如下:
- 當(dāng)前進(jìn)程或線程執(zhí)行到阻塞狀態(tài)(如等待I/O完成)時(shí),觸發(fā)切換操作。
- 操作系統(tǒng)內(nèi)核保存當(dāng)前進(jìn)程或線程的上下文(即當(dāng)前的寄存器值和程序計(jì)數(shù)器等信息),并將處理器分配給另一個(gè)進(jìn)程或線程。
- 內(nèi)核從調(diào)度隊(duì)列中選擇另一個(gè)進(jìn)程或線程,并恢復(fù)其保存的上下文信息。
- 處理器開始執(zhí)行新的進(jìn)程或線程,從之前保存的狀態(tài)恢復(fù)執(zhí)行。
在進(jìn)程切換時(shí),需要將整個(gè)進(jìn)程的上下文信息保存下來,包括進(jìn)程的虛擬內(nèi)存、全局變量等,切換時(shí)還需要進(jìn)行內(nèi)存映射,開銷比較大。
在線程切換時(shí),只需要保存當(dāng)前線程的上下文信息即可,線程共享進(jìn)程的虛擬內(nèi)存,切換時(shí)不需要進(jìn)行內(nèi)存映射,開銷較小。
5、為什么虛擬地址空間切換比較耗時(shí)?
虛擬地址空間切換的耗時(shí)是因?yàn)樗婕暗搅擞布筒僮飨到y(tǒng)的復(fù)雜操作。當(dāng)進(jìn)程或線程切換時(shí),需要保存當(dāng)前的程序狀態(tài)(寄存器值、堆棧指針等)和上下文信息(當(dāng)前指令位置、程序計(jì)數(shù)器等)。然后,內(nèi)核必須選擇另一個(gè)進(jìn)程或線程,并將它的狀態(tài)和上下文信息裝入內(nèi)存,這樣才能保證程序能夠繼續(xù)運(yùn)行。這個(gè)過程涉及到多個(gè)操作系統(tǒng)的內(nèi)核和硬件機(jī)制,例如上下文切換、內(nèi)存管理和硬件中斷等。
在這個(gè)過程中,為了切換到另一個(gè)進(jìn)程或線程,需要保存和恢復(fù)大量的狀態(tài)信息,包括內(nèi)核上下文和硬件寄存器等。這些操作需要耗費(fèi)大量的CPU時(shí)間和內(nèi)存帶寬,因此切換過程通常是相對比較耗時(shí)的。
6、進(jìn)程間通信方式有哪些?
進(jìn)程間通信(IPC,Inter-process Communication)指的是在不同進(jìn)程之間交換信息的機(jī)制和方法。常見的進(jìn)程間通信方式有以下幾種:
- 管道(Pipe):管道是一種半雙工的通信方式,只能在具有公共祖先的進(jìn)程之間使用。管道可以實(shí)現(xiàn)進(jìn)程之間的通信,但只能在父子進(jìn)程或兄弟進(jìn)程之間使用,因?yàn)楣艿朗菃蜗虻模抑荒茉诰哂泄沧嫦鹊倪M(jìn)程之間使用。
- 命名管道(Named Pipe):命名管道是一種有名的通信方式,可以實(shí)現(xiàn)無關(guān)進(jìn)程之間的通信。它可以在不具有親緣關(guān)系的進(jìn)程之間傳遞數(shù)據(jù),并且可以實(shí)現(xiàn)雙向通信。
- 信號量(Semaphore):信號量是一種計(jì)數(shù)器,用于控制多個(gè)進(jìn)程對共享資源的訪問。它可以用來解決進(jìn)程間的同步和互斥問題。
- 信號(Signal):信號是一種軟件中斷,用于通知進(jìn)程發(fā)生了某個(gè)事件。它可以用于進(jìn)程間的通信和同步。
- 共享內(nèi)存(Shared Memory):共享內(nèi)存是一種高效的進(jìn)程間通信方式,它可以在多個(gè)進(jìn)程之間共享內(nèi)存區(qū)域,從而實(shí)現(xiàn)數(shù)據(jù)的快速交換。
- 消息隊(duì)列(Message Queue):消息隊(duì)列是一種進(jìn)程間通信方式,可以實(shí)現(xiàn)不同進(jìn)程之間的異步通信。
- 套接字(Socket):套接字是一種網(wǎng)絡(luò)通信方式,可以實(shí)現(xiàn)不同主機(jī)之間的進(jìn)程間通信。
每種進(jìn)程間通信方式都有其優(yōu)缺點(diǎn)和適用場景,需要根據(jù)具體的需求進(jìn)行選擇。
7、進(jìn)程間同步的方式有哪些?
進(jìn)程間同步是指在多個(gè)進(jìn)程之間進(jìn)行數(shù)據(jù)交換或共享資源的操作時(shí),為了避免出現(xiàn)競爭和沖突,需要采用某種機(jī)制保證操作的正確性和一致性。常見的進(jìn)程間同步方式有以下幾種:
- 信號量:使用信號量作為鎖,控制進(jìn)程對共享資源的訪問。當(dāng)一個(gè)進(jìn)程要訪問共享資源時(shí),先檢查信號量的值,如果為正,則進(jìn)程可以訪問資源,并將信號量的值減1;否則,進(jìn)程必須等待,直到信號量的值為正。當(dāng)一個(gè)進(jìn)程完成訪問后,需要將信號量的值加1,以便其他進(jìn)程可以訪問資源。
- 互斥鎖:使用互斥鎖保護(hù)共享資源,同一時(shí)刻只能有一個(gè)進(jìn)程訪問資源。當(dāng)一個(gè)進(jìn)程要訪問共享資源時(shí),需要先獲得互斥鎖,如果鎖已經(jīng)被其他進(jìn)程持有,則進(jìn)程需要等待,直到鎖被釋放為止。當(dāng)進(jìn)程完成訪問后,需要釋放互斥鎖,以便其他進(jìn)程可以訪問資源。
- 條件變量:使用條件變量實(shí)現(xiàn)進(jìn)程間的通信和同步。當(dāng)一個(gè)進(jìn)程要訪問共享資源時(shí),如果發(fā)現(xiàn)資源不可用,則進(jìn)程可以通過條件變量等待,直到資源可用為止。當(dāng)另一個(gè)進(jìn)程釋放資源時(shí),可以通過條件變量通知等待的進(jìn)程,以便它們可以訪問資源。
- 讀寫鎖:讀寫鎖是一種特殊的鎖,可以在多個(gè)進(jìn)程之間共享資源,但是只允許讀操作同時(shí)進(jìn)行,寫操作必須獨(dú)占資源。當(dāng)一個(gè)進(jìn)程要進(jìn)行讀操作時(shí),需要獲得讀鎖,如果沒有其他進(jìn)程持有寫鎖,則進(jìn)程可以獲得鎖并進(jìn)行讀操作;否則,進(jìn)程需要等待,直到寫鎖被釋放為止。當(dāng)一個(gè)進(jìn)程要進(jìn)行寫操作時(shí),需要獲得寫鎖,此時(shí)必須獨(dú)占資源,其他進(jìn)程無法進(jìn)行讀或?qū)懖僮鳎钡綄戞i被釋放為止。
- 信號:進(jìn)程可以通過信號來通知其他進(jìn)程發(fā)生了某些事件。當(dāng)一個(gè)進(jìn)程需要通知其他進(jìn)程時(shí),可以向目標(biāo)進(jìn)程發(fā)送信號,目標(biāo)進(jìn)程可以根據(jù)信號進(jìn)行相應(yīng)的處理。常見的信號包括中斷信號、終止信號、用戶自定義信號等。
- 共享內(nèi)存:使用共享內(nèi)存實(shí)現(xiàn)進(jìn)程間的數(shù)據(jù)共享。多個(gè)進(jìn)程可以共享同一塊內(nèi)存區(qū)域,可以通過讀寫內(nèi)存區(qū)域來進(jìn)行數(shù)據(jù)交換。
8、線程同步的方式有哪些?
線程同步的方式有以下幾種:
- 互斥量(Mutex):用于保護(hù)共享資源,只有一個(gè)線程可以獲取到互斥量,其他線程需要等待該線程釋放互斥量后才能繼續(xù)執(zhí)行。
- 信號量(Semaphore):用于控制訪問一定數(shù)量的共享資源,通過計(jì)數(shù)器實(shí)現(xiàn)。
- 事件(Event):用于線程間的通信,一個(gè)線程發(fā)起事件后等待其他線程響應(yīng)該事件。
- 條件變量(Condition Variable):用于線程間的協(xié)作,允許一個(gè)線程等待另一個(gè)線程滿足某個(gè)條件。
- 屏障(Barrier):用于多個(gè)線程并發(fā)執(zhí)行時(shí),在特定點(diǎn)將線程阻塞,等待所有線程都達(dá)到這個(gè)點(diǎn)后再一起繼續(xù)執(zhí)行。
- 讀寫鎖(Reader-Writer Lock):用于在多個(gè)線程中共享某些數(shù)據(jù),讀寫鎖允許多個(gè)線程同時(shí)讀取共享數(shù)據(jù),但只允許一個(gè)線程寫入共享數(shù)據(jù)。
在實(shí)際的多線程應(yīng)用中,不同的同步方式有不同的使用場景,需要根據(jù)具體情況選擇合適的方式。
9、線程的分類?
線程可以分為用戶線程和內(nèi)核線程。
用戶線程是由用戶空間的線程庫(如pthread庫)實(shí)現(xiàn)的線程,也稱為輕量級線程。用戶線程的調(diào)度和管理由線程庫完成,內(nèi)核對它們一無所知,因此創(chuàng)建、切換和銷毀用戶線程的開銷很小,但是由于不能直接調(diào)用系統(tǒng)調(diào)用,當(dāng)用戶線程被阻塞時(shí),整個(gè)進(jìn)程就會(huì)被阻塞,因此用戶線程通常用于不需要頻繁阻塞的場合。
內(nèi)核線程是由操作系統(tǒng)內(nèi)核實(shí)現(xiàn)的線程,也稱為重量級線程。內(nèi)核線程的調(diào)度和管理由操作系統(tǒng)完成,可以直接調(diào)用系統(tǒng)調(diào)用,因此可以處理更加復(fù)雜的任務(wù)。內(nèi)核線程的創(chuàng)建、切換和銷毀開銷較大,但是由于可以使用多核,可以提高系統(tǒng)的并發(fā)度和吞吐量。
在實(shí)際應(yīng)用中,用戶線程和內(nèi)核線程的使用是根據(jù)具體的情況而定,需要根據(jù)應(yīng)用的特點(diǎn)進(jìn)行權(quán)衡。
10、什么是臨界區(qū)?怎么解決沖突?
臨界區(qū)是指一段代碼區(qū)域,在并發(fā)情況下被多個(gè)線程訪問時(shí),會(huì)導(dǎo)致共享數(shù)據(jù)出現(xiàn)沖突的區(qū)域。為了避免并發(fā)訪問帶來的問題,需要采用同步機(jī)制來對臨界區(qū)進(jìn)行保護(hù)。
解決臨界區(qū)問題的常用方式有以下幾種:
- 互斥鎖:利用互斥鎖來保護(hù)臨界區(qū)。在進(jìn)入臨界區(qū)之前,線程必須先獲得互斥鎖的鎖,進(jìn)入臨界區(qū)后執(zhí)行代碼操作,然后釋放鎖。只有獲得鎖的線程才能進(jìn)入臨界區(qū)執(zhí)行操作。
- 讀寫鎖:在多讀少寫的場景中,采用讀寫鎖可以提高并發(fā)效率。讀寫鎖允許多個(gè)線程同時(shí)讀取共享數(shù)據(jù),但只允許一個(gè)線程寫入共享數(shù)據(jù)。在寫入共享數(shù)據(jù)之前,線程必須獲得寫鎖,進(jìn)入臨界區(qū)后執(zhí)行代碼操作,然后釋放鎖。在讀取共享數(shù)據(jù)之前,線程必須獲得讀鎖,讀取完成后釋放鎖。
- 條件變量:條件變量是一種線程間的通信機(jī)制,用于協(xié)調(diào)線程的執(zhí)行。它的使用需要和互斥鎖配合。當(dāng)一個(gè)線程進(jìn)入臨界區(qū)后,發(fā)現(xiàn)條件不滿足時(shí),會(huì)進(jìn)入等待狀態(tài)。此時(shí),它會(huì)釋放互斥鎖并進(jìn)入等待狀態(tài),等待條件變量被其它線程滿足。當(dāng)其它線程滿足條件變量后,會(huì)通過喚醒等待線程的方式來使其從等待狀態(tài)返回。
- 原子操作:原子操作是指不能被中斷的操作,可以保證在并發(fā)情況下的數(shù)據(jù)一致性。在需要修改共享數(shù)據(jù)的場景中,可以使用原子操作來保護(hù)臨界區(qū)。原子操作的執(zhí)行過程中不會(huì)被其它線程中斷,保證了線程安全。
11、什么是死鎖?死鎖產(chǎn)生的條件?
死鎖(Deadlock)指的是在多個(gè)進(jìn)程(線程)中,每個(gè)進(jìn)程(線程)由于等待其他進(jìn)程(線程)釋放資源而被阻塞,進(jìn)而導(dǎo)致整個(gè)進(jìn)程(線程)系統(tǒng)無法前進(jìn)的一種狀態(tài)。
死鎖產(chǎn)生的條件通常有以下四個(gè)必要條件:
- 互斥條件(Mutual exclusion):一個(gè)資源每次只能被一個(gè)進(jìn)程(線程)使用,即在一段時(shí)間內(nèi)只有一個(gè)進(jìn)程(線程)能訪問該資源。
- 請求與保持條件(Hold and wait):一個(gè)進(jìn)程(線程)因請求資源而阻塞時(shí),持有已獲得的資源不放。
- 不剝奪條件(No preemption):一個(gè)進(jìn)程(線程)已經(jīng)獲得的資源,在未使用完之前,不能被剝奪,只能在使用完后自己釋放。
- 環(huán)路等待條件(Circular wait):若干進(jìn)程(線程)之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。
解決死鎖的方法有以下幾種:
- 預(yù)防死鎖:通過破壞死鎖產(chǎn)生的四個(gè)必要條件之一,來避免死鎖的產(chǎn)生。
- 避免死鎖:通過動(dòng)態(tài)地分配資源來避免死鎖的產(chǎn)生,需要預(yù)知每個(gè)進(jìn)程對資源的最大需求量和系統(tǒng)可用資源數(shù)。
- 檢測死鎖:通過檢測系統(tǒng)中是否存在死鎖,以及哪些進(jìn)程或線程陷入了死鎖狀態(tài),然后采取相應(yīng)的措施來解除死鎖。
- 解除死鎖:通過剝奪進(jìn)程或線程的某些資源來解除死鎖,以恢復(fù)進(jìn)程或線程的正常執(zhí)行。
12、進(jìn)程調(diào)度策略有哪幾種?
在操作系統(tǒng)中,進(jìn)程調(diào)度是指操作系統(tǒng)通過一定的調(diào)度策略來選擇下一個(gè)需要執(zhí)行的進(jìn)程。下面是常見的進(jìn)程調(diào)度策略:
- 先來先服務(wù)調(diào)度(First-Come, First-Served,F(xiàn)CFS):按照進(jìn)程到達(dá)的先后順序進(jìn)行調(diào)度,先到先服務(wù),無法解決短作業(yè)等待時(shí)間長的問題。
- 短作業(yè)優(yōu)先調(diào)度(Shortest-Job-First,SJF):按照進(jìn)程需要執(zhí)行的時(shí)間長短進(jìn)行排序,優(yōu)先選擇執(zhí)行時(shí)間最短的進(jìn)程,可以減少平均等待時(shí)間,但是需要預(yù)知每個(gè)進(jìn)程的執(zhí)行時(shí)間。
- 優(yōu)先級調(diào)度(Priority Scheduling):按照進(jìn)程的優(yōu)先級進(jìn)行調(diào)度,高優(yōu)先級進(jìn)程先執(zhí)行,可以根據(jù)進(jìn)程的重要程度進(jìn)行調(diào)度,但是可能會(huì)導(dǎo)致低優(yōu)先級進(jìn)程長時(shí)間等待。
- 時(shí)間片輪轉(zhuǎn)調(diào)度(Round-Robin,RR):每個(gè)進(jìn)程被分配一個(gè)時(shí)間片,當(dāng)時(shí)間片用完時(shí),操作系統(tǒng)會(huì)調(diào)度下一個(gè)進(jìn)程,并把當(dāng)前進(jìn)程加入到隊(duì)列的末尾,可以保證公平性,但是當(dāng)時(shí)間片過長或過短時(shí),可能會(huì)影響進(jìn)程的響應(yīng)時(shí)間和吞吐量。
- 多級反饋隊(duì)列調(diào)度(Multilevel Feedback Queue,MLFQ):將進(jìn)程隊(duì)列分成多個(gè)級別,每個(gè)級別都有不同的優(yōu)先級和時(shí)間片大小,根據(jù)進(jìn)程的運(yùn)行情況動(dòng)態(tài)調(diào)整進(jìn)程的優(yōu)先級和時(shí)間片大小,可以兼顧短進(jìn)程和長進(jìn)程的執(zhí)行,但是需要復(fù)雜的算法和參數(shù)調(diào)整。
13、什么是緩沖區(qū)溢出?有什么危害?原因是什么?
緩沖區(qū)溢出(Buffer Overflow)是指程序嘗試將數(shù)據(jù)寫入超出預(yù)先分配的緩沖區(qū)的范圍之外,導(dǎo)致數(shù)據(jù)覆蓋了相鄰的內(nèi)存空間,可能會(huì)導(dǎo)致程序崩潰、數(shù)據(jù)損壞、系統(tǒng)崩潰、安全漏洞等問題。
緩沖區(qū)溢出通常是由于編程錯(cuò)誤、缺陷或惡意攻擊者利用程序漏洞而引起的。程序在處理輸入數(shù)據(jù)時(shí),如果沒有對輸入進(jìn)行充分的檢查和驗(yàn)證,就容易發(fā)生緩沖區(qū)溢出漏洞。攻擊者可以通過利用這種漏洞,將有害代碼注入程序,執(zhí)行惡意操作,例如竊取敏感信息、執(zhí)行未授權(quán)的操作或者引起拒絕服務(wù)攻擊等。
緩沖區(qū)溢出是計(jì)算機(jī)系統(tǒng)中最常見的安全漏洞之一,因此在軟件開發(fā)過程中,應(yīng)該采取預(yù)防措施,例如輸入驗(yàn)證、使用安全的編程語言和庫、限制輸入大小、使用防御性編程技術(shù)等,以減少緩沖區(qū)溢出的發(fā)生。同時(shí),定期進(jìn)行安全評估和測試,發(fā)現(xiàn)和修復(fù)漏洞,也是保障系統(tǒng)安全的重要措施。
-
處理器
+關(guān)注
關(guān)注
68文章
19312瀏覽量
230034 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9203瀏覽量
85528 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6838瀏覽量
123380 -
并發(fā)
+關(guān)注
關(guān)注
0文章
7瀏覽量
2506
發(fā)布評論請先 登錄
相關(guān)推薦
評論