成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

go語言的接口堵塞問題 go語言寫api接口

【接口測試】Go語言進行簡單的接口測試

在正常的測試中,當我們需要進行接口測試時,通常使用接口調(diào)試工具,如postman進行接口測試

創(chuàng)新互聯(lián)建站是一家專業(yè)提供嘉禾企業(yè)網(wǎng)站建設,專注與成都網(wǎng)站制作、成都網(wǎng)站建設、HTML5建站、小程序制作等業(yè)務。10年已為嘉禾眾多企業(yè)、政府機構(gòu)等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設公司優(yōu)惠進行中。

目前我在嘗試使用Go語言進行接口測試,使用的庫均為Go自帶的庫。

注:當前采用的接口為時事新聞接口,每天可以請求100次,需要的同學,可以自行使用。

Go 語言 channel 的阻塞問題

Hello,大家好,又見面了!上一遍我們將 channel 相關(guān)基礎(chǔ)以及使用場景。這一篇,還需要再次進階理解channel 阻塞問題。以下創(chuàng)建一個chan類型為int,cap 為3。

channel 內(nèi)部其實是一個環(huán)形buf數(shù)據(jù)結(jié)構(gòu) ,是一種滑動窗口機制,當make完后,就分配在 Heap 上。

上面,向 chan 發(fā)送一條“hello”數(shù)據(jù):

如果 G1 發(fā)送數(shù)據(jù)超過指定cap時,會出現(xiàn)什么情況?

看下面實例:

以上會出現(xiàn)什么,chan 緩沖區(qū)允許大小為1,如果再往chan仍數(shù)據(jù),滿了就會被阻塞,那么是如何實現(xiàn)阻塞的呢?當 chan 滿時,會進入 gopark,此時 G1 進入一個 waiting 狀態(tài),然后會創(chuàng)建一個 sudog 對象,其實就sendq隊列,把 200放進去。等 buf 不滿的時候,再喚醒放入buf里面。

通過如下源碼,你會更加清晰:

上面,從 chan 獲取數(shù)據(jù):

Go 語言核心思想:“Do not communicate by sharing memory; instead, share memory by communicating.” 你可以看看這本書名叫:Effective Go

如果接收者,接收一個空對象,也會發(fā)生什么情況?

代碼示例 :

也會報錯如下:

上面,從 chan 取出數(shù)據(jù),可是沒有數(shù)據(jù)了。此時,它會把 接收者 G2 阻塞掉,也是和G1發(fā)送者一樣,也會執(zhí)行 gopark 將狀態(tài)改為 waiting,不一樣的點就是。

正常情況下,接收者G2作為取出數(shù)據(jù)是去 buf 讀取數(shù)據(jù)的,但現(xiàn)在,buf 為空了,此時,接收者G2會將sudog導出來,因為現(xiàn)在G2已經(jīng)被阻塞了嘛,會把G2給G,然后將 t := -ch 中變量 t 是在棧上的地址,放進去 elem ,也就是說,只存它的地址指針在sudog里面。

最后, ch - 200 當G1往 chan 添加200這個數(shù)據(jù),正常情況是將數(shù)據(jù)添加到buf里面,然后喚醒 G2 是吧,而現(xiàn)在是將 G1 的添加200數(shù)據(jù)直接干到剛才G2阻塞的t這里變量里面。

你會認為,這樣真的可以嗎?想一想,G2 本來就是已經(jīng)阻塞了,然后我們直接這么干肯定沒有什么毛病,而且效率提高了,不需要再次放入buf再取出,這個過程也是需要時間。不然,不得往chan添加數(shù)據(jù)需要加鎖、拷貝、解鎖一序列操作,那肯定就慢了,我想Go語言是為了高效及內(nèi)存使用率的考慮這樣設計的。(注意,一般都是在runtime里面完成,不然會出現(xiàn)象安全問題。)

總結(jié) :

chan 類型的特點:chan 如果為空,receiver 接收數(shù)據(jù)的時候就會阻塞等待,直到 chan 被關(guān)閉或者有新的數(shù)據(jù)到來。有這種個機制,就可以實現(xiàn) wait/notify 的設計模式。

相關(guān)面試題:

go語言中的tcpconn是阻塞還是非阻塞的

阻塞socket和非阻塞socket的區(qū)別: 1、讀操作 對于阻塞的socket,當socket的接收緩沖區(qū)中沒有數(shù)據(jù)時,read調(diào)用會一直阻塞住,直到有數(shù)據(jù)到來才返回。當socket緩沖區(qū)中的數(shù)據(jù)量小于期望讀取的數(shù)據(jù)量時,返回實際讀取的字節(jié)數(shù)。

分享文章:go語言的接口堵塞問題 go語言寫api接口
鏈接URL:http://jinyejixie.com/article46/dopsohg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名網(wǎng)站設計、微信小程序、搜索引擎優(yōu)化、電子商務、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設
绍兴市| 福建省| 瑞金市| 乐东| 融水| 竹北市| 新疆| 清原| 满洲里市| 朝阳县| 张家口市| 藁城市| 正宁县| 龙山县| 汉阴县| 华阴市| 绥芬河市| 榆林市| 潞城市| 同德县| 宁蒗| 城口县| 石河子市| 金平| 榆树市| 当涂县| 孝昌县| 尚志市| 吴旗县| 达州市| 济源市| 岳池县| 晋江市| 呼和浩特市| 岳阳县| 新津县| 无锡市| 镇沅| 贞丰县| 鄢陵县| 秦皇岛市|