題一: 操作系統(tǒng)中的同步和異步有什么區(qū)別?分別應(yīng)用在什么場(chǎng)合? 思考過(guò)后,再到下方尋找答案 題二: TCP與UDP的區(qū)別。 思考過(guò)后,再到下方尋找答案 題三: 指針和引用的區(qū)別? 思考過(guò)后,再到下方尋找答案 題一答案: 同步,就是說(shuō)你的程序在執(zhí)行某一個(gè)操作時(shí)一直等待直到操作完成。 最常見(jiàn)的例子就是 SendMessage。該函數(shù)發(fā)送一個(gè)消息給某個(gè)窗口,在對(duì)方處理完消息之前,這個(gè)函數(shù)不返回。當(dāng)對(duì)方處理完畢以后,該函數(shù)才把消息處理函數(shù)所返回的 LRESULT值返回給調(diào)用者。 異步,就是說(shuō)程序在執(zhí)行某一個(gè)操作時(shí),只是發(fā)出開(kāi)始的指令;由另外的并行程序執(zhí)行這段代碼,當(dāng)完成時(shí)再通知調(diào)用者。 當(dāng)一個(gè)客戶(hù)端通過(guò)調(diào)用 Connect函數(shù)發(fā)出一個(gè)連接請(qǐng)求后,調(diào)用者線(xiàn)程立刻可以朝下運(yùn)行。當(dāng)連接真正建立起來(lái)以后,socket底層會(huì)發(fā)送一個(gè)消息通知該對(duì)象。 打個(gè)比喻: 有一個(gè)男的 看上了兩個(gè)漂亮MM 想通過(guò)寫(xiě)信的方式跟他們交流感情 這兩個(gè)MM分別是 A女、B女 同步:他先給A女寫(xiě)了封信 然后發(fā)了出去。等了好幾天 A女給他回了信,之后他才給B女寫(xiě)信。就是說(shuō)等到一個(gè)任務(wù)返回或者結(jié)束 他才繼續(xù)往下做他想做的任務(wù)。 異步:他先給A女寫(xiě)了封信,然后發(fā)了出去,馬上又給B女寫(xiě)了封信 也發(fā)了出去。 就是說(shuō)不用等到一個(gè)任務(wù)結(jié)束就去做下一個(gè)任務(wù)。 但是如果第一個(gè)任務(wù)需要第二個(gè)任務(wù)的返回值 那就得用同步讓第一個(gè)任務(wù)等待第二個(gè)任務(wù)結(jié)束后,獲取第二個(gè)任務(wù)的返回值,在繼續(xù)往下做。 并行:兩個(gè)帥哥同時(shí)給這兩個(gè)妹妹寫(xiě)信。 同步和異步的簡(jiǎn)單區(qū)別: 舉個(gè)例子:普通B/S模式(同步)AJAX技術(shù)(異步) 同步:提交請(qǐng)求->等待服務(wù)器處理->處理完畢返回 這個(gè)期間客戶(hù)端瀏覽器不能干任何事 異步: 請(qǐng)求通過(guò)事件觸發(fā)->服務(wù)器處理(這是瀏覽器仍然可以作其他事情)->處理完畢 ----------------------------------------------------------------- 同步就是你叫我去吃飯,我聽(tīng)到了就和你去吃飯;如果沒(méi)有聽(tīng)到,你就不停的叫,直到我告訴你聽(tīng)到了,才一起去吃飯。 異步就是你叫我,然后自己去吃飯,我得到消息后可能立即走,也可能等到下班才去吃飯。 所以,要我請(qǐng)你吃飯就用同步的方法,要請(qǐng)我吃飯就用異步的方法,這樣你可以省錢(qián)。 ----------------------------------------------------------------- 舉個(gè)例子:打電話(huà)是同步,發(fā)消息是異步。 題二答案: TCP---傳輸控制協(xié)議,提供的是面向連接、可靠的字節(jié)流服務(wù)。當(dāng)客戶(hù)和服務(wù)器彼此交換數(shù)據(jù)前,必須先在雙方之間建立一個(gè)TCP連接,之后才能傳輸數(shù)據(jù)。TCP提供超時(shí)重發(fā),丟棄重復(fù)數(shù)據(jù),檢驗(yàn)數(shù)據(jù),流量控制等功能,保證數(shù)據(jù)能從一端傳到另一端。 UDP---用戶(hù)數(shù)據(jù)報(bào)協(xié)議,是一個(gè)簡(jiǎn)單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議。UDP不提供可靠性,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報(bào)發(fā)送出去,但是并不能保證它們能到達(dá)目的地。由于UDP在傳輸數(shù)據(jù)報(bào)前不用在客戶(hù)和服務(wù)器之間建立一個(gè)連接,且沒(méi)有超時(shí)重發(fā)等機(jī)制,故而傳輸速度很快。 UDP 與 TCP 的主要區(qū)別在于 UDP 不一定提供可靠的數(shù)據(jù)傳輸。事實(shí)上,該協(xié)議不能保證數(shù)據(jù)準(zhǔn)確無(wú)誤地到達(dá)目的地。UDP 在許多方面非常有效。當(dāng)某個(gè)程序的目標(biāo)是盡快地傳輸盡可能多的信息時(shí)(其中任意給定數(shù)據(jù)的重要性相對(duì)較低),可使用 UDP。ICQ 短消息使用 UDP 協(xié)議發(fā)送消息。 許多程序?qū)⑹褂脝为?dú)的TCP連接和單獨(dú)的UDP連接。重要的狀態(tài)信息隨可靠的TCP連接發(fā)送,而主數(shù)據(jù)流通過(guò)UDP發(fā)送。 題三答案: 1、從現(xiàn)象上看:指針在運(yùn)行時(shí)可以改變其所指向的值,而引用一旦和某個(gè)對(duì)象綁定后就不再改變。 2、從內(nèi)存分配上看:程序?yàn)橹羔樧兞糠峙鋬?nèi)存區(qū)域,而引用不分配內(nèi)存區(qū)域。 3、從編譯上看:程序在編譯時(shí)分別將指針和引用添加到符號(hào)表上,符號(hào)表上記錄的是變量名及變量所對(duì)應(yīng)地址。指針變量在符號(hào)表上對(duì)應(yīng)的地址值為指針變量的地址值,而引用在符號(hào)表上對(duì)應(yīng)的地址值為引用對(duì)象的地址值。符號(hào)表生成后就不會(huì)再改,因此指針可以改變指向的對(duì)象(指針變量中的值可以改),而引用對(duì)象不能改。 引用:一個(gè)變量的別名,為什么引入別名呢?原因是我們想定義一個(gè)變量,使他共享另一個(gè)變量的內(nèi)存空間,使用別名無(wú)疑是一個(gè)好的選擇。變量是什么?是一個(gè)內(nèi)存空間的名字,如果我們給這個(gè)內(nèi)存空間在起另外一個(gè)名字,那就是能夠共享這個(gè)內(nèi)存了,引用(別名)的由此而來(lái)。 指針:指向另一個(gè)內(nèi)存空間的變量,我們可以通過(guò)它來(lái)索引另一個(gè)內(nèi)存空間的內(nèi)容,本身有自己的內(nèi)存空間。 二者區(qū)別:(1)引用訪問(wèn)一個(gè)變量是直接訪問(wèn),而指針是間接訪問(wèn)。 (2)引用是一個(gè)變量的別名,本身不單獨(dú)分配自己的內(nèi)存空間,而指針有自己的內(nèi)存空間,指針是一個(gè)實(shí)體,而引用不是。 (3)引用在開(kāi)始的時(shí)候就綁定到了一個(gè)內(nèi)存空間(開(kāi)始必須賦初值),所以他只能是這個(gè)內(nèi)存空間的名字,而不能改成其他的,當(dāng)然可以改變這個(gè)內(nèi)存空間的值。 例如 int i = 3,j = 4; int &x = i; //成為i的別名 x = j; //不能否認(rèn)x仍然引用i,并沒(méi)有成為j的別名,只是修改了x和i共享的內(nèi)存空間的值為4 免費(fèi)試聽(tīng)C語(yǔ)言、電子、PCB、STM32、Linux、FPGA、Python等。 想學(xué)習(xí)的你和我聯(lián)系預(yù)約就可以免費(fèi)聽(tīng)課了。宋工Q35--24-65--90-88 Tel/WX:173--17--95--19--08 |