## 一、怎么查看Goroutine的數量
GOMAXPROCS中控制的是未被阻塞的所有Goroutine,可以被Multiplex到多少個線程上運行,通過GOMAXPROCS可以查看Goroutine的數量。
## 二、讀寫鎖或者互斥鎖讀的時候能寫嗎?
Go中讀寫鎖包括讀鎖和寫鎖,多個讀線程可以同時訪問共享數據;寫線程必須等待所有讀線程都釋放鎖以后,才能取得鎖;同樣的,讀線程必須等待寫線程釋放鎖后,才能取得鎖,也就是說讀寫鎖要確保的是如下互斥關系,可以同時讀,但是讀-寫,寫-寫都是互斥的。
## 三、Channel是同步的還是異步的
Channel是異步進行的。
channel存在3種狀態:
* nil,未初始化的狀態,只進行了聲明,或者手動賦值為nil
* active,正常的channel,可讀或者可寫
* closed,已關閉,千萬不要誤認為關閉channel后,channel的值是nil
## 四、說一下異步和非阻塞的區別?
## 1、 異步和非阻塞的區別:
* 異步:調用在發出之后,這個調用就直接返回,不管有無結果;異步是過程。
* 非阻塞:關注的是程序在等待調用結果(消息,返回值)時的狀態,指在不能立刻得到結果之前,該調用不會阻塞當前線程。
## 2、同步和異步的區別:
* 同步:一個服務的完成需要依賴其他服務時,只有等待被依賴的服務完成后,才算完成,這是一種可靠的服務序列。要么成功都成功,失敗都失敗,服務的狀態可以保持一致。
* 異步:一個服務的完成需要依賴其他服務時,只通知其他依賴服務開始執行,而不需要等待被依賴的服務完成,此時該服務就算完成了。被依賴的服務是否最終完成無法確定,一次它是一個不可靠的服務序列。
## 3、 消息通知中的同步和異步:
* 同步:當一個同步調用發出后,調用者要一直等待返回消息(或者調用結果)通知后,才能進行后續的執行。
* 異步:當一個異步過程調用發出后,調用者不能立刻得到返回消息(結果)。在調用結束之后,通過消息回調來通知調用者是否調用成功。
## 4、阻塞與非阻塞的區別:
* 阻塞:阻塞調用是指調用結果返回之前,當前線程會被掛起,一直處于等待消息通知,不能夠執行其他業務,函數只有在得到結果之后才會返回。
* 非阻塞:非阻塞和阻塞的概念相對應,指在不能立刻得到結果之前,該函數不會阻塞當前線程,而會立刻返回。
同步與異步是對應的,它們是線程之間的關系,兩個線程之間要么是同步的,要么是異步的。
阻塞與非阻塞是對同一個線程來說的,在某個時刻,線程要么處于阻塞,要么處于非阻塞。
阻塞是使用同步機制的結果,非阻塞則是使用異步機制的結果。
- 一、經典(一)
- 二、經典(二)
- 三、經典(三)
- 四、經典(四)
- 五、經典(五)
- 六、經典(六)
- 七、經典(七)
- 八、經典(八)
- 九、經典(九)
- 十、經典(十)
- 十一、經典(十一)
- 十二、經典(十二)
- 其他
- 1、知識點一
- 2、面試集
- 3、負載均衡原理
- 4、LVS相關了解
- 5、微服務架構
- 6、分布式鎖實現原理
- 7、Etcd怎么實現分布式鎖
- 8、Redis的數據結構有哪些,以及實現場景
- 9、Mysql高可用方案有哪些
- 10、Go語言的棧空間管理是怎么樣的
- 11、Goroutine和Channel的作用分別是什么
- 12、Go中的鎖有哪些?三種鎖,讀寫鎖,互斥鎖,還有map的安全的鎖?
- 13、怎么限制Goroutine的數量
- 14、Goroutine和線程的區別?
- 15、中間件原理