goroutine,channel,デッドロック
1116 ワード
goroutine,チャネル(channel),デッドロックのいくつかの重点の総括
チャネル(channel)はgoroutine間で互いに通信するものであり、goroutine間のメモリ共有を行い、デフォルトのチャネルのメモリメッセージとメッセージの取得がブロックされている.これをバッファレスチャネルと呼ぶ.すなわち、バッファレスチャネルは、メッセージとメッセージの保存時に現在のgoroutineを保留し、他端が準備されていない限りである.
バッファリングされていないチャネルは永遠にデータを格納せず、データの流通だけを担当し、バッファリングされていないチャネルからデータを取得するには、データストリームが必要である.そうしないと、現在のコヒーレンスがブロックされ、データがバッファリングされていないチャネルに流入し、他のgoroutineがこのデータを持って行かなければ、現在のコヒーレンスがブロックされ、バッファリングされていないチャネルのサイズは0である(len(channel))
チャネルにデータが流れている場合、データが追加されている場合、またはチャネルが乾燥している場合、データが流入していない空のチャネルにデータを取得し続けると、デッドロックが発生します.
デッドロックの例
閉じられたチャネルはデータの流入を禁止し、読み取り専用であり、閉じたチャネルからデータを取得することはできますが、データを書き込むことはできません.rangeを使用してチャネルデータを読み取るときは注意してください.
バッファレスチャネルは、データのバッチが1つ1つ流出し、バッファチャネルが1つ1つ記憶され、一緒に流出する
コミュニティの名言:共有メモリを通じて通信しないで、通信を通じてメモリを共有するべきです
参照先:http://blog.csdn.net/sb___itfk/article/details/79045906
チャネル(channel)はgoroutine間で互いに通信するものであり、goroutine間のメモリ共有を行い、デフォルトのチャネルのメモリメッセージとメッセージの取得がブロックされている.これをバッファレスチャネルと呼ぶ.すなわち、バッファレスチャネルは、メッセージとメッセージの保存時に現在のgoroutineを保留し、他端が準備されていない限りである.
var ch chan int = make(chan int)
func foo(){
ch
注:メインgoroutine実行完了、プログラム終了、その他のgoroutine実行停止バッファリングされていないチャネルは永遠にデータを格納せず、データの流通だけを担当し、バッファリングされていないチャネルからデータを取得するには、データストリームが必要である.そうしないと、現在のコヒーレンスがブロックされ、データがバッファリングされていないチャネルに流入し、他のgoroutineがこのデータを持って行かなければ、現在のコヒーレンスがブロックされ、バッファリングされていないチャネルのサイズは0である(len(channel))
チャネルにデータが流れている場合、データが追加されている場合、またはチャネルが乾燥している場合、データが流入していない空のチャネルにデータを取得し続けると、デッドロックが発生します.
デッドロックの例
func main(){
ch := make(chan int)
ch:=make(chan int,1)/1個のみキャッシュでき、1個目のデータを書き込むとブロックされず、1個目のデータを取り出さなかった場合、2個目を書き込むとブロックされます閉じられたチャネルはデータの流入を禁止し、読み取り専用であり、閉じたチャネルからデータを取得することはできますが、データを書き込むことはできません.rangeを使用してチャネルデータを読み取るときは注意してください.
バッファレスチャネルは、データのバッチが1つ1つ流出し、バッファチャネルが1つ1つ記憶され、一緒に流出する
コミュニティの名言:共有メモリを通じて通信しないで、通信を通じてメモリを共有するべきです
参照先:http://blog.csdn.net/sb___itfk/article/details/79045906