[{"data":1,"prerenderedAt":1102},["ShallowReactive",2],{"content:\u002F2025\u002F08\u002Fgo-channel3":3,"surround:\u002F2025\u002F08\u002Fgo-channel3":1092},{"id":4,"title":5,"body":6,"categories":1070,"date":1072,"description":1073,"draft":1074,"extension":1075,"image":1076,"meta":1077,"navigation":80,"path":1079,"permalink":1076,"published":1076,"readingTime":1080,"recommend":1076,"references":1076,"seo":1085,"sitemap":1086,"stem":1087,"tags":1088,"type":1090,"updated":1072,"__hash__":1091},"content\u002Fposts\u002F2025\u002F08\u002Fgo-channel3.md","Go Channel 生产者消费者模型",{"type":7,"value":8,"toc":1063},"minimark",[9,13,17,20,33,36,48,52,569,572,583,586,989,992,1003,1006,1009,1059],[10,11,12],"h2",{"id":12},"生产者消费者模型",[14,15,16],"p",{},"什么是生产者和消费者模型，这是一种常见的并发设计模式，就是有一个模块在生产数据（数据是广义的，包含线程、进程、函数、协程、类、函数），另一个模块在处理数据，这两个模块分别称为生产者和消费者。单独抽象出生产者和消费者是不够的，还需要一个缓冲区连接起生产者和消费者。",[14,18,19],{},"为什么要这样设计，假如我们寄快递，生产者直接把快递交给收件人（消费者），一旦收件人没空、拒收，或者快递员下班了，整个流程就会中断。\n但如果引入快递驿站（缓冲区）中转，发件人只需投递到驿站，收件人随时都可以自取，这大大提升了灵活性和可靠性。",[21,22,23,27,30],"ul",{},[24,25,26],"li",{},"包装快递 - 生产数据",[24,28,29],{},"放入驿站 - 放入缓冲区",[24,31,32],{},"取快递并拆开 - 处理数据",[14,34,35],{},"这样做的优点是：",[37,38,39,42,45],"ol",{},[24,40,41],{},"解耦，生产者并不需要直接依赖于消费者，假如没有缓冲区，必不可免的需要考虑消费者的处理数据状态，才能继续的生产数据。如今有了缓冲区，生产者只需要把生产的数据放入缓冲区，消费者根据需要自取即可",[24,43,44],{},"并发，消费者处理时间不等，生产者只负责生产分发，不会因为某一个流程而阻塞",[24,46,47],{},"缓存，生产和消费速率不对等，生产者生产资源过快如果没有缓冲区，消费者资源利用率不足，有缓冲区可以把资源缓存起来",[49,50,51],"h3",{"id":51},"无缓冲区",[53,54,59],"pre",{"className":55,"code":56,"language":57,"meta":58,"style":58},"language-go shiki shiki-themes github-light github-dark","package main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\n\u002F\u002F 生产者\nfunc producer(ch chan\u003C- int) {\n\tfor i := 0; i \u003C 3; i++ {\n\t\tfmt.Printf(\"生产者%d发送\\n\", i+1)\n\t\tch \u003C- i + 1\n\t\ttime.Sleep(time.Millisecond * 500)\n\t}\n\t\u002F\u002F 关闭管道\n\tfmt.Println(\"关闭ch\")\n\tclose(ch)\n}\n\n\u002F\u002F 消费者\nfunc consumer(ch \u003C-chan int) {\n\tfor v := range ch {\n\t\tfmt.Println(\"消费者接收到值\")\n\t\tfmt.Println(\"\u003C-ch\", v)\n\t\ttime.Sleep(2 * time.Second)\n\t}\n}\n\nfunc main() {\n\tch := make(chan int)\n\tgo producer(ch)\n\tconsumer(ch)\n}\n","go","",[60,61,62,75,82,96,113,125,131,136,143,179,216,257,278,304,314,322,339,353,358,363,369,396,416,434,455,479,488,493,498,514,535,550,564],"code",{"__ignoreMap":58},[63,64,67,71],"span",{"class":65,"data-line":66,"line":66},"line",1,[63,68,70],{"class":69},"szBVR","package",[63,72,74],{"class":73},"sScJk"," main\n",[63,76,78],{"class":65,"data-line":77,"line":77},2,[63,79,81],{"emptyLinePlaceholder":80},true,"\n",[63,83,85,88,92],{"class":65,"data-line":84,"line":84},3,[63,86,87],{"class":69},"import",[63,89,91],{"class":90},"sVt8B"," ",[63,93,95],{"class":94},"sSDpw","(\n",[63,97,99,103,107,110],{"class":65,"data-line":98,"line":98},4,[63,100,102],{"class":101},"indent","\t",[63,104,106],{"class":105},"sZZnC","\"",[63,108,109],{"class":73},"fmt",[63,111,112],{"class":105},"\"\n",[63,114,116,118,120,123],{"class":65,"data-line":115,"line":115},5,[63,117,102],{"class":101},[63,119,106],{"class":105},[63,121,122],{"class":73},"time",[63,124,112],{"class":105},[63,126,128],{"class":65,"data-line":127,"line":127},6,[63,129,130],{"class":94},")\n",[63,132,134],{"class":65,"data-line":133,"line":133},7,[63,135,81],{"emptyLinePlaceholder":80},[63,137,139],{"class":65,"data-line":138,"line":138},8,[63,140,142],{"class":141},"sJ8bj","\u002F\u002F 生产者\n",[63,144,146,149,152,155,159,162,165,168,171,174,176],{"class":65,"data-line":145,"line":145},9,[63,147,148],{"class":69},"func",[63,150,151],{"class":73}," producer",[63,153,154],{"class":94},"(",[63,156,158],{"class":157},"s4XuR","ch",[63,160,161],{"class":69}," chan",[63,163,164],{"class":69},"\u003C",[63,166,167],{"class":69},"-",[63,169,170],{"class":69}," int",[63,172,173],{"class":94},")",[63,175,91],{"class":90},[63,177,178],{"class":94},"{\n",[63,180,182,184,187,190,193,197,200,202,205,208,211,213],{"class":65,"data-line":181,"line":181},10,[63,183,102],{"class":101},[63,185,186],{"class":69},"for",[63,188,189],{"class":90}," i ",[63,191,192],{"class":69},":=",[63,194,196],{"class":195},"sj4cs"," 0",[63,198,199],{"class":90},"; i ",[63,201,164],{"class":69},[63,203,204],{"class":195}," 3",[63,206,207],{"class":90},"; i",[63,209,210],{"class":69},"++",[63,212,91],{"class":90},[63,214,178],{"class":215},"sJX2D",[63,217,219,221,223,226,229,232,235,238,241,244,246,249,252,255],{"class":65,"data-line":218,"line":218},11,[63,220,102],{"class":101},[63,222,102],{"class":101},[63,224,225],{"class":90},"fmt.",[63,227,228],{"class":73},"Printf",[63,230,154],{"class":231},"sqkie",[63,233,234],{"class":105},"\"生产者",[63,236,237],{"class":195},"%d",[63,239,240],{"class":105},"发送",[63,242,243],{"class":195},"\\n",[63,245,106],{"class":105},[63,247,248],{"class":90},", i",[63,250,251],{"class":69},"+",[63,253,254],{"class":195},"1",[63,256,130],{"class":231},[63,258,260,262,264,267,269,271,273,275],{"class":65,"data-line":259,"line":259},12,[63,261,102],{"class":101},[63,263,102],{"class":101},[63,265,266],{"class":90},"ch ",[63,268,164],{"class":69},[63,270,167],{"class":69},[63,272,189],{"class":90},[63,274,251],{"class":69},[63,276,277],{"class":195}," 1\n",[63,279,281,283,285,288,291,293,296,299,302],{"class":65,"data-line":280,"line":280},13,[63,282,102],{"class":101},[63,284,102],{"class":101},[63,286,287],{"class":90},"time.",[63,289,290],{"class":73},"Sleep",[63,292,154],{"class":231},[63,294,295],{"class":90},"time.Millisecond ",[63,297,298],{"class":69},"*",[63,300,301],{"class":195}," 500",[63,303,130],{"class":231},[63,305,307,309,311],{"class":65,"data-line":306,"line":306},14,[63,308,102],{"class":101},[63,310,58],{"class":90},[63,312,313],{"class":215},"}\n",[63,315,317,319],{"class":65,"data-line":316,"line":316},15,[63,318,102],{"class":101},[63,320,321],{"class":141},"\u002F\u002F 关闭管道\n",[63,323,325,327,329,332,334,337],{"class":65,"data-line":324,"line":324},16,[63,326,102],{"class":101},[63,328,225],{"class":90},[63,330,331],{"class":73},"Println",[63,333,154],{"class":215},[63,335,336],{"class":105},"\"关闭ch\"",[63,338,130],{"class":215},[63,340,342,344,347,349,351],{"class":65,"data-line":341,"line":341},17,[63,343,102],{"class":101},[63,345,346],{"class":73},"close",[63,348,154],{"class":215},[63,350,158],{"class":90},[63,352,130],{"class":215},[63,354,356],{"class":65,"data-line":355,"line":355},18,[63,357,313],{"class":94},[63,359,361],{"class":65,"data-line":360,"line":360},19,[63,362,81],{"emptyLinePlaceholder":80},[63,364,366],{"class":65,"data-line":365,"line":365},20,[63,367,368],{"class":141},"\u002F\u002F 消费者\n",[63,370,372,374,377,379,381,383,385,388,390,392,394],{"class":65,"data-line":371,"line":371},21,[63,373,148],{"class":69},[63,375,376],{"class":73}," consumer",[63,378,154],{"class":94},[63,380,158],{"class":157},[63,382,91],{"class":69},[63,384,164],{"class":69},[63,386,387],{"class":69},"-chan",[63,389,170],{"class":69},[63,391,173],{"class":94},[63,393,91],{"class":90},[63,395,178],{"class":94},[63,397,399,401,403,406,408,411,414],{"class":65,"data-line":398,"line":398},22,[63,400,102],{"class":101},[63,402,186],{"class":69},[63,404,405],{"class":90}," v ",[63,407,192],{"class":69},[63,409,410],{"class":69}," range",[63,412,413],{"class":90}," ch ",[63,415,178],{"class":215},[63,417,419,421,423,425,427,429,432],{"class":65,"data-line":418,"line":418},23,[63,420,102],{"class":101},[63,422,102],{"class":101},[63,424,225],{"class":90},[63,426,331],{"class":73},[63,428,154],{"class":231},[63,430,431],{"class":105},"\"消费者接收到值\"",[63,433,130],{"class":231},[63,435,437,439,441,443,445,447,450,453],{"class":65,"data-line":436,"line":436},24,[63,438,102],{"class":101},[63,440,102],{"class":101},[63,442,225],{"class":90},[63,444,331],{"class":73},[63,446,154],{"class":231},[63,448,449],{"class":105},"\"\u003C-ch\"",[63,451,452],{"class":90},", v",[63,454,130],{"class":231},[63,456,458,460,462,464,466,468,471,474,477],{"class":65,"data-line":457,"line":457},25,[63,459,102],{"class":101},[63,461,102],{"class":101},[63,463,287],{"class":90},[63,465,290],{"class":73},[63,467,154],{"class":231},[63,469,470],{"class":195},"2",[63,472,473],{"class":69}," *",[63,475,476],{"class":90}," time.Second",[63,478,130],{"class":231},[63,480,482,484,486],{"class":65,"data-line":481,"line":481},26,[63,483,102],{"class":101},[63,485,58],{"class":90},[63,487,313],{"class":215},[63,489,491],{"class":65,"data-line":490,"line":490},27,[63,492,313],{"class":94},[63,494,496],{"class":65,"data-line":495,"line":495},28,[63,497,81],{"emptyLinePlaceholder":80},[63,499,501,503,506,508,510,512],{"class":65,"data-line":500,"line":500},29,[63,502,148],{"class":69},[63,504,505],{"class":73}," main",[63,507,154],{"class":94},[63,509,173],{"class":94},[63,511,91],{"class":90},[63,513,178],{"class":94},[63,515,517,519,521,523,526,528,531,533],{"class":65,"data-line":516,"line":516},30,[63,518,102],{"class":101},[63,520,266],{"class":90},[63,522,192],{"class":69},[63,524,525],{"class":73}," make",[63,527,154],{"class":215},[63,529,530],{"class":69},"chan",[63,532,170],{"class":69},[63,534,130],{"class":215},[63,536,538,540,542,544,546,548],{"class":65,"data-line":537,"line":537},31,[63,539,102],{"class":101},[63,541,57],{"class":69},[63,543,151],{"class":73},[63,545,154],{"class":215},[63,547,158],{"class":90},[63,549,130],{"class":215},[63,551,553,555,558,560,562],{"class":65,"data-line":552,"line":552},32,[63,554,102],{"class":101},[63,556,557],{"class":73},"consumer",[63,559,154],{"class":215},[63,561,158],{"class":90},[63,563,130],{"class":215},[63,565,567],{"class":65,"data-line":566,"line":566},33,[63,568,313],{"class":94},[14,570,571],{},"无缓冲区的 channel:",[37,573,574,577,580],{},[24,575,576],{},"生产者发送 1，消费者立即接到，生产者 sleep0.5 秒，此时消费者还需 1.5 秒才能继续接收值 （耗时 2 秒）",[24,578,579],{},"生产者发送 2，消费者在 1.5 秒后接到，生产者 sleep0.5 秒，此时消费者还需 1.5 秒才能继续接收值 （耗时 2 秒）",[24,581,582],{},"生产者发送 3，消费者在 1.5 秒后接到，生产者 sleep0.5 秒，此时消费者还需 1.5 秒才结束 （耗时 2 秒）",[49,584,585],{"id":585},"有缓冲区",[53,587,589],{"className":55,"code":588,"language":57,"meta":58,"style":58},"package main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\n\u002F\u002F 生产者\nfunc producer(ch chan\u003C- int) {\n\tfor i := 0; i \u003C 3; i++ {\n\t\tfmt.Printf(\"生产者%d发送\\n\", i+1)\n\t\tch \u003C- i + 1\n\t\ttime.Sleep(time.Millisecond * 500)\n\t}\n\t\u002F\u002F 关闭管道\n\tfmt.Println(\"关闭ch\")\n\tclose(ch)\n}\n\n\u002F\u002F 消费者\nfunc consumer(ch \u003C-chan int) {\n\tfor v := range ch {\n\t\tfmt.Println(\"消费者接收到值\")\n\t\tfmt.Println(\"\u003C-ch\", v)\n\t\ttime.Sleep(2 * time.Second)\n\t}\n}\n\nfunc main() {\n\tch := make(chan int, 3)\n\tgo producer(ch)\n\tconsumer(ch)\n}\n",[60,590,591,597,601,609,619,629,633,637,641,665,691,721,739,759,767,773,787,799,803,807,811,835,851,867,885,905,913,917,921,935,959,973,985],{"__ignoreMap":58},[63,592,593,595],{"class":65,"data-line":66,"line":66},[63,594,70],{"class":69},[63,596,74],{"class":73},[63,598,599],{"class":65,"data-line":77,"line":77},[63,600,81],{"emptyLinePlaceholder":80},[63,602,603,605,607],{"class":65,"data-line":84,"line":84},[63,604,87],{"class":69},[63,606,91],{"class":90},[63,608,95],{"class":94},[63,610,611,613,615,617],{"class":65,"data-line":98,"line":98},[63,612,102],{"class":101},[63,614,106],{"class":105},[63,616,109],{"class":73},[63,618,112],{"class":105},[63,620,621,623,625,627],{"class":65,"data-line":115,"line":115},[63,622,102],{"class":101},[63,624,106],{"class":105},[63,626,122],{"class":73},[63,628,112],{"class":105},[63,630,631],{"class":65,"data-line":127,"line":127},[63,632,130],{"class":94},[63,634,635],{"class":65,"data-line":133,"line":133},[63,636,81],{"emptyLinePlaceholder":80},[63,638,639],{"class":65,"data-line":138,"line":138},[63,640,142],{"class":141},[63,642,643,645,647,649,651,653,655,657,659,661,663],{"class":65,"data-line":145,"line":145},[63,644,148],{"class":69},[63,646,151],{"class":73},[63,648,154],{"class":94},[63,650,158],{"class":157},[63,652,161],{"class":69},[63,654,164],{"class":69},[63,656,167],{"class":69},[63,658,170],{"class":69},[63,660,173],{"class":94},[63,662,91],{"class":90},[63,664,178],{"class":94},[63,666,667,669,671,673,675,677,679,681,683,685,687,689],{"class":65,"data-line":181,"line":181},[63,668,102],{"class":101},[63,670,186],{"class":69},[63,672,189],{"class":90},[63,674,192],{"class":69},[63,676,196],{"class":195},[63,678,199],{"class":90},[63,680,164],{"class":69},[63,682,204],{"class":195},[63,684,207],{"class":90},[63,686,210],{"class":69},[63,688,91],{"class":90},[63,690,178],{"class":215},[63,692,693,695,697,699,701,703,705,707,709,711,713,715,717,719],{"class":65,"data-line":218,"line":218},[63,694,102],{"class":101},[63,696,102],{"class":101},[63,698,225],{"class":90},[63,700,228],{"class":73},[63,702,154],{"class":231},[63,704,234],{"class":105},[63,706,237],{"class":195},[63,708,240],{"class":105},[63,710,243],{"class":195},[63,712,106],{"class":105},[63,714,248],{"class":90},[63,716,251],{"class":69},[63,718,254],{"class":195},[63,720,130],{"class":231},[63,722,723,725,727,729,731,733,735,737],{"class":65,"data-line":259,"line":259},[63,724,102],{"class":101},[63,726,102],{"class":101},[63,728,266],{"class":90},[63,730,164],{"class":69},[63,732,167],{"class":69},[63,734,189],{"class":90},[63,736,251],{"class":69},[63,738,277],{"class":195},[63,740,741,743,745,747,749,751,753,755,757],{"class":65,"data-line":280,"line":280},[63,742,102],{"class":101},[63,744,102],{"class":101},[63,746,287],{"class":90},[63,748,290],{"class":73},[63,750,154],{"class":231},[63,752,295],{"class":90},[63,754,298],{"class":69},[63,756,301],{"class":195},[63,758,130],{"class":231},[63,760,761,763,765],{"class":65,"data-line":306,"line":306},[63,762,102],{"class":101},[63,764,58],{"class":90},[63,766,313],{"class":215},[63,768,769,771],{"class":65,"data-line":316,"line":316},[63,770,102],{"class":101},[63,772,321],{"class":141},[63,774,775,777,779,781,783,785],{"class":65,"data-line":324,"line":324},[63,776,102],{"class":101},[63,778,225],{"class":90},[63,780,331],{"class":73},[63,782,154],{"class":215},[63,784,336],{"class":105},[63,786,130],{"class":215},[63,788,789,791,793,795,797],{"class":65,"data-line":341,"line":341},[63,790,102],{"class":101},[63,792,346],{"class":73},[63,794,154],{"class":215},[63,796,158],{"class":90},[63,798,130],{"class":215},[63,800,801],{"class":65,"data-line":355,"line":355},[63,802,313],{"class":94},[63,804,805],{"class":65,"data-line":360,"line":360},[63,806,81],{"emptyLinePlaceholder":80},[63,808,809],{"class":65,"data-line":365,"line":365},[63,810,368],{"class":141},[63,812,813,815,817,819,821,823,825,827,829,831,833],{"class":65,"data-line":371,"line":371},[63,814,148],{"class":69},[63,816,376],{"class":73},[63,818,154],{"class":94},[63,820,158],{"class":157},[63,822,91],{"class":69},[63,824,164],{"class":69},[63,826,387],{"class":69},[63,828,170],{"class":69},[63,830,173],{"class":94},[63,832,91],{"class":90},[63,834,178],{"class":94},[63,836,837,839,841,843,845,847,849],{"class":65,"data-line":398,"line":398},[63,838,102],{"class":101},[63,840,186],{"class":69},[63,842,405],{"class":90},[63,844,192],{"class":69},[63,846,410],{"class":69},[63,848,413],{"class":90},[63,850,178],{"class":215},[63,852,853,855,857,859,861,863,865],{"class":65,"data-line":418,"line":418},[63,854,102],{"class":101},[63,856,102],{"class":101},[63,858,225],{"class":90},[63,860,331],{"class":73},[63,862,154],{"class":231},[63,864,431],{"class":105},[63,866,130],{"class":231},[63,868,869,871,873,875,877,879,881,883],{"class":65,"data-line":436,"line":436},[63,870,102],{"class":101},[63,872,102],{"class":101},[63,874,225],{"class":90},[63,876,331],{"class":73},[63,878,154],{"class":231},[63,880,449],{"class":105},[63,882,452],{"class":90},[63,884,130],{"class":231},[63,886,887,889,891,893,895,897,899,901,903],{"class":65,"data-line":457,"line":457},[63,888,102],{"class":101},[63,890,102],{"class":101},[63,892,287],{"class":90},[63,894,290],{"class":73},[63,896,154],{"class":231},[63,898,470],{"class":195},[63,900,473],{"class":69},[63,902,476],{"class":90},[63,904,130],{"class":231},[63,906,907,909,911],{"class":65,"data-line":481,"line":481},[63,908,102],{"class":101},[63,910,58],{"class":90},[63,912,313],{"class":215},[63,914,915],{"class":65,"data-line":490,"line":490},[63,916,313],{"class":94},[63,918,919],{"class":65,"data-line":495,"line":495},[63,920,81],{"emptyLinePlaceholder":80},[63,922,923,925,927,929,931,933],{"class":65,"data-line":500,"line":500},[63,924,148],{"class":69},[63,926,505],{"class":73},[63,928,154],{"class":94},[63,930,173],{"class":94},[63,932,91],{"class":90},[63,934,178],{"class":94},[63,936,937,939,941,943,945,947,949,951,954,957],{"class":65,"data-line":516,"line":516},[63,938,102],{"class":101},[63,940,266],{"class":90},[63,942,192],{"class":69},[63,944,525],{"class":73},[63,946,154],{"class":215},[63,948,530],{"class":69},[63,950,170],{"class":69},[63,952,953],{"class":90},", ",[63,955,956],{"class":195},"3",[63,958,130],{"class":215},[63,960,961,963,965,967,969,971],{"class":65,"data-line":537,"line":537},[63,962,102],{"class":101},[63,964,57],{"class":69},[63,966,151],{"class":73},[63,968,154],{"class":215},[63,970,158],{"class":90},[63,972,130],{"class":215},[63,974,975,977,979,981,983],{"class":65,"data-line":552,"line":552},[63,976,102],{"class":101},[63,978,557],{"class":73},[63,980,154],{"class":215},[63,982,158],{"class":90},[63,984,130],{"class":215},[63,986,987],{"class":65,"data-line":566,"line":566},[63,988,313],{"class":94},[14,990,991],{},"有缓冲区的 channel:",[37,993,994,997,1000],{},[24,995,996],{},"生产者发送 1，消费者立即接到，生产者 sleep0.5 秒，此时消费者还需 1.5 秒才能继续接收值 （生产者耗时 0.5 秒）",[24,998,999],{},"生产者发送 2，消费者在 1.5 秒后接到，生产者 sleep0.5 秒，此时消费者还需 1.5 秒才能继续接收值 （生产者耗时 0.5 秒）",[24,1001,1002],{},"生产者发送 3，消费者在 1.5 秒后接到，生产者 sleep0.5 秒，此时消费者还需 1.5 秒才结束 （生产者耗时 0.5 秒）",[14,1004,1005],{},"通过上述案例我们发现无缓冲区的 channel，在等待子任务处理并完成的时候会有 1.5 秒的空档期，在这个过程中，channel 是被阻塞的，无法进行新一轮的读入；\n而有缓冲区的 channel，是不阻塞生产者的，可以一次性分发完，不需要考虑消费者的完成时间",[10,1007,1008],{"id":1008},"小结",[1010,1011,1012,1031],"table",{},[1013,1014,1015],"thead",{},[1016,1017,1018,1022,1025,1028],"tr",{},[1019,1020,1021],"th",{},"模式",[1019,1023,1024],{},"是否阻塞生产者",[1019,1026,1027],{},"是否解耦",[1019,1029,1030],{},"适合场景",[1032,1033,1034,1048],"tbody",{},[1016,1035,1036,1039,1042,1045],{},[1037,1038,51],"td",{},[1037,1040,1041],{},"是",[1037,1043,1044],{},"否",[1037,1046,1047],{},"处理必须同步、顺序场景",[1016,1049,1050,1052,1054,1056],{},[1037,1051,585],{},[1037,1053,1044],{},[1037,1055,1041],{},[1037,1057,1058],{},"并发处理、解耦、异步场景",[1060,1061,1062],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sSDpw, html code.shiki .sSDpw{--shiki-default:#005cc5;--shiki-dark:#79b8ff}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJX2D, html code.shiki .sJX2D{--shiki-default:#e36209;--shiki-dark:#ffab70}html pre.shiki code .sqkie, html code.shiki .sqkie{--shiki-default:#5a32a3;--shiki-dark:#b392f0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":58,"searchDepth":98,"depth":98,"links":1064},[1065,1069],{"id":12,"depth":77,"text":12,"children":1066},[1067,1068],{"id":51,"depth":84,"text":51},{"id":585,"depth":84,"text":585},{"id":1008,"depth":77,"text":1008},[1071],"Go语言","2025-08-04","生产者消费者模型通过引入缓冲区，实现了生产与消费的解耦。无缓冲区的 channel 要求生产者与消费者同步配合，否则会阻塞，适合处理必须顺序执行的场景；而有缓冲区的 channel 则允许生产者先发送多个数据，无需等待消费者处理完成，适用于并发处理、异步任务等高性能场景。缓冲区提升了系统的灵活性、并发性和容错性。",false,"md",null,{"slots":1078},{},"\u002F2025\u002F08\u002Fgo-channel3",{"text":1081,"minutes":1082,"time":1083,"words":1084},"6 min read",5.135,308100,1027,{"title":5,"description":1073},{"loc":1079},"posts\u002F2025\u002F08\u002Fgo-channel3",[1089],"channel","tech","opL-6fqHt5AY-Qg-5Op_TEDV-rCMvCrbRhGT9JDfKQc",[1093,1097],{"title":1094,"path":1095,"stem":1096,"date":1072,"type":1090,"children":-1},"缓冲区为 1 和无缓冲区的 channel 有什么区别","\u002F2025\u002F08\u002Fgo-channel2","posts\u002F2025\u002F08\u002Fgo-channel2",{"title":1098,"path":1099,"stem":1100,"date":1101,"type":1090,"children":-1},"Go Channel 的 Select Case 用法","\u002F2025\u002F08\u002Fgo-channel4","posts\u002F2025\u002F08\u002Fgo-channel4","2025-08-05",1786555056505]