C#網(wǎng)絡(luò)編程學(xué)習(xí)
--多線程編程技術(shù)
對(duì)于 掛起 、 睡眠 與 阻塞 的理解
我用三個(gè)既生動(dòng)形象,又貼近生活的例子來表達(dá)我對(duì)于這三個(gè)概念的理解:
掛起:
“寫作業(yè)寫累了,需要休息一會(huì)兒,便上床睡覺,但并沒有定鬧鐘,直到老媽把我叫醒,我才起床,繼續(xù)寫作業(yè)”
其中“寫作業(yè)”就是指我們線程中的程序執(zhí)行,“沒有定鬧鐘的睡覺”在C#中使用Suspend()函數(shù)來將線程暫時(shí)暫停,“被老媽叫醒”在C#中使用Resume()函數(shù)來喚醒線程,讓線程接著執(zhí)行程序。
睡眠:
“寫作業(yè)寫累了,需要休息一會(huì)兒,便上床睡覺,定了個(gè)鬧鐘,被鬧鐘叫醒之后,起床繼續(xù)寫作業(yè)”
其中“定了鬧鐘的休息”在C#中使用Sleep(x)函數(shù)來將線程暫停 x ms ,當(dāng)定時(shí)的時(shí)間到了之后,再繼續(xù)執(zhí)行線程里的程序。
阻塞:
“本想去寫作業(yè),無奈發(fā)現(xiàn)桌子被弟弟給占用了,只能等弟弟用完之后再寫作業(yè)”
其中“桌子”指的是一些共用的系統(tǒng)資源或者是被上鎖的一段共用代碼,“弟弟”指的是另外一個(gè)線程,有些資源和代碼同時(shí)只能供一個(gè)線程使用,當(dāng)一個(gè)線程正在使用的時(shí)候,另外一個(gè)代碼就不能使用,只能等待之前的線程使用完畢才能使用,這就造成了一種被動(dòng)的“掛起”,而喚醒方式就是之前的線程釋放資源或釋放代碼。
遇到一些比較容易混淆的問題時(shí),我們要多看看別人的理解,然后再思考一下如何將自己的思想和別人的思想融合,從而產(chǎn)生一個(gè)更好的思想。
浙公網(wǎng)安備 33010602011771號(hào)