練一練,嵌入式工程師操作系統(tǒng)面試題三道

題一,同步和異步有啥區(qū)別?
題二,TCP與UDP有啥區(qū)別?
題三,進(jìn)程和線程有啥區(qū)別?
題一答案:
同步(Sync):所有的操作都做完,才返回給用戶。這樣用戶在線等待的時間太長,給用戶一種卡死了的感覺(比如系統(tǒng)遷移中,點(diǎn)擊了遷移,界面就不動了,但是程序還在執(zhí)行,卡死了的感覺)。
這種情況下,用戶不能關(guān)閉界面,如果關(guān)閉,那么遷移程序也會中斷,用戶體驗(yàn)不好。
異步(Async):將用戶請求放入消息隊(duì)列,并反饋給用戶,比如系統(tǒng)遷移程序已經(jīng)啟動,提示你可以關(guān)閉瀏覽器了。然后程序再慢慢地寫入數(shù)據(jù)庫。但是用戶沒有卡死的感覺,用戶體驗(yàn)較好。
題二答案:
1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接
2、TCP提供可靠的服務(wù)。它通過校驗(yàn)和,丟包時的重傳控制,序號標(biāo)識,滑動窗口、確認(rèn)應(yīng)答,次序亂掉的分包進(jìn)行順序控制實(shí)現(xiàn)可靠傳輸。即通過TCP連接傳送的數(shù)據(jù),無差錯,不丟失,不重復(fù),且按序到達(dá); UDP盡最大努力交付,即不保證可靠交付。
3、UDP具有較好的實(shí)時性,工作效率比TCP高,適用于對高速傳輸和實(shí)時性有較高要求的通信或廣播通信場景。
4、每一條TCP連接只能是點(diǎn)到點(diǎn)的; UDP支持一對一,一對多,多對一和多對多的交互通信方式。
5、TCP對系統(tǒng)資源要求較多,UDP對系統(tǒng)資源要求較少。
UDP有時比TCP更有優(yōu)勢:
UDP以其簡單、傳輸快的優(yōu)勢,在越來越多場景下取代了TCP, 如實(shí)時游戲。
(1)網(wǎng)速的提升給UDP的穩(wěn)定性提供可靠網(wǎng)絡(luò)保障,丟包率很低,如果使用應(yīng)用層重傳,能夠確保傳輸?shù)目煽啃浴?/p>
(2)TCP為了實(shí)現(xiàn)網(wǎng)絡(luò)通信的可靠性,使用了復(fù)雜的擁塞控制算法,建立了繁瑣的握手過程,由于TCP在內(nèi)置的系統(tǒng)協(xié)議棧中,極難對其進(jìn)行改進(jìn)。
采用TCP,一旦發(fā)生丟包,TCP會將后續(xù)的包緩存起來,等前面的包重傳并接收到后再繼續(xù)發(fā)送,延時會越來越大。
基于UDP對實(shí)時性要求較為嚴(yán)格的情況下,采用自定義重傳機(jī)制,能夠把丟包產(chǎn)生的延遲降到最低,盡量減少網(wǎng)絡(luò)問題造成的影響。
題三答案:
1. 進(jìn)程是資源分配的最小單位。
2. 線程是程序執(zhí)行的最小單位,也是處理器調(diào)度的基本單位,但進(jìn)程不是,兩者均可并發(fā)執(zhí)行。
3. 進(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)程小很多。
4. 線程之間的通信更方便,同一進(jìn)程下的線程共享全局變量、靜態(tài)變量等數(shù)據(jù),而進(jìn)程之間的通信需要以通信的方式(IPC)進(jìn)行。不過如何處理好同步與互斥是編寫多線程程序的難點(diǎn)。但是多進(jìn)程程序更健壯,多線程程序只要有一個線程死掉,整個進(jìn)程也跟著死掉了,而一個進(jìn)程死掉并不會對另外一個進(jìn)程造成影響,因?yàn)檫M(jìn)程有自己獨(dú)立的地址空間。
5. 進(jìn)程切換時,消耗的資源大,效率高。所以涉及到頻繁的切換時,使用線程要好于進(jìn)程。同樣如果要求同時進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線程不能用進(jìn)程。
6. 執(zhí)行過程:每個獨(dú)立的進(jìn)程有一個程序運(yùn)行的入口、順序執(zhí)行序列和程序入口。但是線程不能獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個線程執(zhí)行控制。
優(yōu)缺點(diǎn):
線程執(zhí)行開銷小,但是不利于資源的管理和保護(hù)。線程適合在SMP機(jī)器(雙CPU系統(tǒng))上運(yùn)行。
進(jìn)程執(zhí)行開銷大,但是能夠很好的進(jìn)行資源管理和保護(hù),可以跨機(jī)器遷移。
何時使用多進(jìn)程,何時使用多線程?
對資源的管理和保護(hù)要求高,不限制開銷和效率時,使用多進(jìn)程。
要求效率高,頻繁切換時,資源的保護(hù)管理要求不是很高時,使用多線程。