1)進(jìn)程和線程的區(qū)別?
a1. 在理解進(jìn)程和線程概念之前首選要對并發(fā)有一定的感性認(rèn)識梯投,如果服務(wù)器同一時間內(nèi)只能服務(wù)于一個客戶端命辖,其他客戶端都再那里傻等的話,可見其性能的低下估計(jì)會被客戶罵出翔來分蓖,因此并發(fā)編程應(yīng)運(yùn)而生尔艇,并發(fā)是網(wǎng)絡(luò)編程中必須考慮的問題溺森。實(shí)現(xiàn)并發(fā)的方式有多種:比如多進(jìn)程蜈彼、多線程、IO多路復(fù)用延都。
a2. 進(jìn)程是資源分配的最小單位蒸甜,線程是程序執(zhí)行的最小單位棠耕。
b. 進(jìn)程有自己的獨(dú)立地址空間,每啟動一個進(jìn)程柠新,系統(tǒng)就會為它分配地址空間昧辽,建立數(shù)據(jù)表來維護(hù)代碼段、堆棧段和數(shù)據(jù)段登颓,這種操作非常昂貴搅荞。而線程是共享進(jìn)程中的數(shù)據(jù)的,使用相同的地址空間,因此CPU切換一個線程的花費(fèi)遠(yuǎn)比進(jìn)程要小很多咕痛,同時創(chuàng)建一個線程的開銷也比進(jìn)程要小很多痢甘。
c. 線程之間的通信更方便,同一進(jìn)程下的線程共享全局變量茉贡、靜態(tài)變量等數(shù)據(jù)塞栅,而進(jìn)程之間的通信需要以通信的方式(IPC)進(jìn)行。不過如何處理好同步與互斥是編寫多線程程序的難點(diǎn)腔丧。
d. 但是多進(jìn)程程序更健壯放椰,多線程程序只要有一個線程死掉,整個進(jìn)程也死掉了愉粤,而一個進(jìn)程死掉并不會對另外一個進(jìn)程造成影響砾医,因?yàn)檫M(jìn)程有自己獨(dú)立的地址空間。
e. 線程是程序執(zhí)行時的最小單位衣厘,它是進(jìn)程的一個執(zhí)行流如蚜,是CPU調(diào)度和分派的基本單位,一個進(jìn)程可以由很多個線程組成影暴,線程間共享進(jìn)程的所有資源错邦,每個線程有自己的堆棧和局部變量。線程由CPU獨(dú)立調(diào)度執(zhí)行型宙,在多CPU環(huán)境下就允許多個線程同時運(yùn)行撬呢。同樣多線程也可以實(shí)現(xiàn)并發(fā)操作,每個請求分配一個線程來處理妆兑。