日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

jq执行2次同样的方法怎么让第一次执行的不触发_他们说,这段代码你能看得懂她的开始,却猜不中她的结尾。...

發(fā)布時(shí)間:2025/6/17 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jq执行2次同样的方法怎么让第一次执行的不触发_他们说,这段代码你能看得懂她的开始,却猜不中她的结尾。... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

看下小姐姐,舒緩下心情先。


好,現(xiàn)在回到我們的主題,看下下面這段代碼,你覺(jué)得它會(huì)輸出幾個(gè)#號(hào)呢?

這個(gè)問(wèn)題來(lái)自于我們技術(shù)群里的一位同學(xué)的提問(wèn),為了給大家一個(gè)思考時(shí)間,我們先不說(shuō)結(jié)果,先再看下另一位可愛(ài)的小妹妹。


啊,好可愛(ài)啊,為啥我選擇了技術(shù),而沒(méi)去學(xué)畫(huà)畫(huà)!


好,不知道你想得怎么樣了呢?

我們先來(lái)執(zhí)行下,看下其具體輸出。

看到?jīng)],8個(gè),不知道你有沒(méi)有猜對(duì)呢?

可為什么是8個(gè)呢,你要說(shuō)2個(gè)我能理解,3個(gè)我也能理解,為什么偏偏是這么夸張的8個(gè)?

其實(shí)這道題目主要考察兩個(gè)點(diǎn),第一個(gè)點(diǎn)就是fork的作用,如果你不理解fork,那你肯定認(rèn)為輸出的個(gè)數(shù)就是2個(gè)。

fork的作用其實(shí)就是拷貝當(dāng)前進(jìn)程,然后創(chuàng)建一個(gè)原樣的子進(jìn)程,子進(jìn)程開(kāi)始時(shí)執(zhí)行的代碼,就是父進(jìn)程調(diào)用fork之后的代碼。

對(duì)于我們上面的題目來(lái)說(shuō),子進(jìn)程就是進(jìn)入了下一次for循環(huán)。

詳細(xì)的fork文檔可以參考下面的鏈接:

https://man7.org/linux/man-pages/man2/fork.2.html

因?yàn)閒ork函數(shù)創(chuàng)建子進(jìn)程,進(jìn)而也會(huì)有#號(hào)輸出,把這個(gè)考慮在內(nèi)的話應(yīng)該是3個(gè)#號(hào),因?yàn)橹鬟M(jìn)程會(huì)輸出2個(gè),主進(jìn)程第一次for循環(huán)創(chuàng)建的子進(jìn)程,在其進(jìn)入到下一次循環(huán)時(shí)又會(huì)輸出一個(gè)。

其他的因?yàn)橹鬟M(jìn)程,或者是該子進(jìn)程調(diào)用fork方法,創(chuàng)建的進(jìn)一步的子進(jìn)程再進(jìn)入到for循環(huán)時(shí),因?yàn)椴粷M足 i < 2,會(huì)直接跳出循環(huán),也就是說(shuō)不會(huì)再輸出#號(hào)。

那這樣說(shuō)也應(yīng)該是3個(gè)#號(hào)啊,為什么是8個(gè)呢?

這里就涉及到了第二個(gè)知識(shí)點(diǎn),printf。

為了減少系統(tǒng)調(diào)用次數(shù),提高程序性能,我們每次調(diào)用printf時(shí),并不會(huì)立即觸發(fā)一次系統(tǒng)調(diào)用,而是會(huì)先寫(xiě)到printf的buffer區(qū),如果buffer區(qū)滿了,或者說(shuō)寫(xiě)入字符中有\(zhòng)n換行符,才會(huì)真正的觸發(fā)一次系統(tǒng)調(diào)用,將我們buffer中的printf的內(nèi)容輸出到控制臺(tái)。

這也是有時(shí)我們寫(xiě)程序時(shí),經(jīng)常會(huì)發(fā)現(xiàn)明明調(diào)用了輸出方法,但控制臺(tái)上就是沒(méi)有輸出的一個(gè)常見(jiàn)原因。

好,再次回到我們的題目。

由上圖我們可以看到,我們?cè)趂or循環(huán)里調(diào)用的printf,都是沒(méi)有加上\n換行符的,我們只有在進(jìn)程結(jié)束前的printf才加上,也就是說(shuō),for循環(huán)里的printf,只是把我們的內(nèi)容放到了它的buffer中,并沒(méi)有真正輸出。

那有意思的事就來(lái)了。

當(dāng)我們后面再調(diào)用fork時(shí),fork可是拷貝當(dāng)前進(jìn)程的全部?jī)?nèi)存的,這可是包括printf的buffer區(qū)的,舉例來(lái)說(shuō),當(dāng)我們主進(jìn)程執(zhí)行第二次for循環(huán),調(diào)用fork時(shí),此時(shí)的printf的buffer里已經(jīng)有兩個(gè)#號(hào)了,此時(shí)fork一個(gè)子進(jìn)程,子進(jìn)程中的相應(yīng)buffer區(qū)里也會(huì)有這兩個(gè)#號(hào)。

當(dāng)主進(jìn)程或子進(jìn)程退出之前,遇到最后一個(gè)帶有\(zhòng)n換行符的printf時(shí),就會(huì)把buffer中現(xiàn)有的那兩個(gè)#號(hào)輸出出來(lái),即每一個(gè)進(jìn)程都會(huì)因?yàn)橥瑯拥脑?#xff0c;最終輸出2個(gè)#號(hào)。

再看下我們的代碼,算上主進(jìn)程,一共創(chuàng)建了4個(gè)進(jìn)程,那最終輸出的可不就是8個(gè)#號(hào)嘛。

小知識(shí),大學(xué)問(wèn)!

不知道你有沒(méi)有猜中這樣的結(jié)尾呢?


寫(xiě)文章不易,如果可以的話,歡迎大家轉(zhuǎn)發(fā)或給個(gè)在看,沒(méi)關(guān)注的也可以關(guān)注下,希望以后能給大家?guī)?lái)更多的驚艷文章。

總結(jié)

以上是生活随笔為你收集整理的jq执行2次同样的方法怎么让第一次执行的不触发_他们说,这段代码你能看得懂她的开始,却猜不中她的结尾。...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。