Go提供了一种称为通道的机制,用于在goroutine之间共享数据。当您作为goroutine执行并发活动时,需要在goroutine之间共享资源或数据,通道充当goroutine之间的管道(管道)并提供一种机制来保证同步交换。
创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、网站制作、外贸营销网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的天柱网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
根据数据交换的行为,有两种类型的通道:无缓冲通道和缓冲通道。无缓冲通道用于执行goroutine之间的同步通信,而缓冲通道用于执行异步通信。无缓冲通道保证在发送和接收发生的瞬间两个goroutine之间的交换。缓冲通道没有这样的保证。
通道由make函数创建,该函数指定chan关键字和通道的元素类型。
这是创建无缓冲和缓冲通道的代码块:
语法
使用内置函数make创建无缓冲和缓冲通道。make的第一个参数需要关键字chan,然后是通道允许交换的数据类型。
这是将值发送到通道的代码块需要使用-运算符:
语法
一个包含5个值的缓冲区的字符串类型的goroutine1通道。然后我们通过通道发送字符串“Australia”。
这是从通道接收值的代码块:
语法
- 运算符附加到通道变量(goroutine1)的左侧,以接收来自通道的值。
在无缓冲通道中,在接收到任何值之前没有能力保存它。在这种类型的通道中,发送和接收goroutine在任何发送或接收操作完成之前的同一时刻都准备就绪。如果两个goroutine没有在同一时刻准备好,则通道会让执行其各自发送或接收操作的goroutine首先等待。同步是通道上发送和接收之间交互的基础。没有另一个就不可能发生。
在缓冲通道中,有能力在接收到一个或多个值之前保存它们。在这种类型的通道中,不要强制goroutine在同一时刻准备好执行发送和接收。当发送和接收阻塞时也有不同的条件。只有当通道中没有要接收的值时,接收才会阻塞。仅当没有可用缓冲区来放置正在发送的值时,发送才会阻塞。
实例
运行结果
golang父进程通过管道向子进程传递数据
这里例子里面父进程launch一个子进程,然后通过管道(stdin)向子进程传递文本串。
父进程:
子进程:
go 是不及物的。
go
vi.
(goes[^Euz]; went[went]; gone[^Cn])
去, 离去, 走, 驶; 旅行; 前往(做某事); 前进 通到, 到达; 延伸至 死; 垮; 坏; 停止存在; 断开; 废弃, 放弃; 消失; 衰退 (时间)消逝, 过去; (距离)走[经] 过 (机器等)运转[行]; 起作用; 行得通, 走[活]动; 工作 处于...状态; 习惯于; 倾向于, 有助于; 变成[为]; 就...而论 发生, 进行[展] 流传[行]; (货币)流通, 通行 发出响声, 发音; (钟)报点 放置; 装[纳]入; 被包容 (算术的)除得, (除)得整数商 归属于..., 落...手中 诉诸[求助]于; 查阅 合起来构成 花费; 消费; 卖, 卖得(...价) 相配, 协调; (诗、歌词)有节奏; (与曲调)相配(to) 迎合; 赶上 称为, 叫做 [只用现在分词]备有; 提供, 获得 ⑵⑽招惹, 惹来 ⑵ 判决, 裁定; 起[控]诉 ⑵ [用不定式作定语]剩下 ⑵ [美方]想; [用进行时态, 后接不定式]将要, 打算
go abroad
出国
go for a walk
去散步
go by train [car, air, water]
乘火车[汽车, 飞机, 轮船] 去
go on foot
走路去
go on a journey
去旅行
ten days to go before Easter
还有十天到复活节
go by one's own decision
照自己的决定行事
go armed
携带武器
go mad
发狂[疯]
go blind
变瞎
go hungry
挨饿
go to court
诉诸法庭
go to a dictionary for a word
翻字典查一个词
The story goes that ...
据说...
I must be going now.
我现在必须走了。
Where does the road go?
这条路通到哪里?
This pipe goes to [into] the next room.
这条管道引伸[通往]隔壁房间。
He is gone.
他死了。
The company goes any day.
这公司随时会倒闭的。
His eyesight is going.
他的视力在减退。
The meat is going.
肉要坏了。
The pain had gone.
疼痛止住了。
The bulb has gone.
电灯泡坏了。
The engine in the old car finally went.
这辆旧汽车的发动机终于损坏了。
The evening went pleasantly enough.
晚上过得很愉快。
There are eight miles to go.
还有八英里(的路程)。
Spring has gone and summer is here.
春天已逝去, 夏天已经来临。
The watch won't go.
表不走了。
This machine goes by electricity.
这机器是由电推动的。
Her tongue goes nineteen to the dozen.
她喋喋不休说个没完。
Refugees often go hungry.
难民时常挨饿。
She has gone six months with child.
她怀孕六个月了。
My hair is going grey .
我的头发渐变花白了。
She is not a bad singer, as singers go.
照一般歌星的水准而言, 她还不错。
How goes it in your work?
你的工作进展情况如何?
What's going on?
发生了什么事?
A rumor went through the town .
谣言传遍全镇。
American bank notes go anywhere.
美钞到处都通用。
The clock goes 'tick -tock, tick-tock'.
时钟发出滴答滴答的声音。
It has just gone six.
时钟刚刚敲过六点钟。
Where does this teapot go?
这茶壶放在哪儿?
The knives go in this drawer.
刀子放在这个抽屉里。
One thousand metres go to the kilometre.
一千米为一公里。
Two goes into eight four times.
二除八得四。
Six into twelve goes twice.
六除十二得二.
All credit goes to the Party.
一切归功于党。
Victory always goes to the strong.
胜利永远属于强者。
All his money goes on books.
他所有的钱都花在买书上。
Don't let your house go too cheap.
不要把你的房子卖得太便宜。
These words don't go to that tune.
词不合曲。
We must go with the times.
我们必须赶上时代。
He goes by a name of Tom.
他名叫汤姆。
She went under a false name.
她用假名。
Are there any jobs going?
有什么工作机会吗?
There's sure to be some sort of dinner going.
一定会有一顿饭吃的。
Don't go to any trouble.
不要招惹麻烦。
The case went against him .
他官司打输了(这案件判决他败诉)。
The case went in his favor.
他官司打赢了(这案件判决他胜诉)。
There are five minutes to go.
还有五分钟。
It's going to rain .
快要下雨了。
There's going to be a meeting here this evening.
今晚这儿将召开一个会议。
【习惯用语】
a capital go [口]妙极了, 太好了 a pretty go [口]难办的事; 怪事 all the go [美]非常流行, 风行一时 as far as it goes 就其本身而言, 就目前的情况而论 so far as it goes 就其本身而言, 就目前的情况而论 as ... go 从通常情况来说, 就...而论 at one go 一口气 in one go 一口气 be full of go 精力充沛 be on the go 在活动, 在忙碌; 准备离开; 有醉意; 衰败, 濒于死亡 call it a go 就这样决定, 一言为定 could go 巴不得吃(或喝) fair go 公平对待, 机会均等; 公道的比赛 from the word go [美口]从一开头; 始终, 完全, 彻头彻尾 get sb. going [美俚]使某人发怒[激动] Here goes! 瞧, 开始了! How goes it? [口]近况如何? leave go of 松[放]开 let go 松手, 放开 释放 解雇 放弃; 忘记 随它去吧 let go with 尽情地说[叫喊等] let oneself go 发脾气; 尽情地谈 make a go of it [美]使获得成功, 干好 near go [口]差点儿送命 no go [口]不行, 办不到; 不成功 on the go [口]在进行活动, 忙碌; 刚要动身 衰败 有醉意 upon the go [口]在进行活动, 忙碌; 刚要动身 衰败 有醉意 quite the go 非常流行 There you go again. 你这一套又来了。 Where do we go from here? 下一步该怎么办? Where do we go from there? 下一步该怎么办? You may go farther and fare worse. [谚]往前走情形可能更坏(劝人适可而止)。 go about 走来走去, 四处走动 着手或忙于(工作) (谣言等)流传 转身[向] (与...)来往密切 go after 追求, 设法得到; 追捕 go against 反对, 违背, 不利于 go ahead 先走, 走在前面; 继续前进 进步[展]; 成功 干吧, 说吧, 开始干 go all out 全力以赴, 鼓足干劲 go along 前进 go along with 陪伴 赞成, 同意 Go along with you! [口]去你的! go and [口]去..., 竟然糊涂到... go and do sth. [口]去..., 竟然糊涂到... go around [美]=go round go astray 迷途 go at 攻击; 冲向 精力充沛地开始工作 go away 离去, 带走, 拐逃(with) go back 回去 追溯到(to), 回顾 走下坡路 go back of [美口]调查, 研究 go back on 违背(诺言), 背弃; 食言 go back from 违背(诺言), 背弃; 食言 go back upon 违背(诺言), 背弃; 食言 go before 走在前面; 居先 go behind 调查, 摸底 亏本 进一步斟酌 go between 作中间人, 调停 go beyond 超出[过] go by 走过, 过去 遵照, 依循, 以...为根据 称为, 名叫 受...所控制 [美]顺道访问 go down 下去, 降下 (船)沉没, (飞机)坠落, (日、月)落下, (价格)下跌 (风、海浪)平息 吞下, 接受 受欢迎[赞许](with) 被记下[载入](in) 延续到(to) 倒下, 垮台, 破产 (英牛津与剑桥两大学用语)退学, 离校 go easy [口]慢慢来, 从容不迫 go easy with 节省..., 爱惜... 对...从宽处理, 小心处置... go far 价值大, 效力大; 成功, 大有前途 go far toward(s) 大大有助于 go for 去拿[喊, 找, 请], 尽力得到 拥护, 支持, 赞助 被认为; 适用于 [口]猛烈攻击, 袭击,【戏】批评 go for much 被认为大有用处[毫无用处] go for nothing 被认为大有用处[毫无用处] go forth 出发 发布[表], 宣布 go forward 前进 发生 go hard with sb. 使某人为难 go home 回家 击中, 命中 腐败, 用坏 go home to 打动(某人的心) 使...理解 go in 进入, 放得进 参加, 参加比赛; (纸牌赌博中)开价 (日、月、星辰等)被云遮盖 (钱)用于 (板球戏等)开始一局比赛 被理解 go in at [口]痛打, 猛烈攻击 go in for 从事于 爱好, 追求, 沉迷于 参加, 加入 主张, 赞成, 支持 go in with 参加, 加入; 入股, 联合 Going! Going! Gone! (拍卖时用语)要卖了!要卖了!卖掉了! go into 进[加, 参, 纳]入, 通向 考虑, 研究讨论, 详细阐述 从事, 参加(某一行业) 调查, 查究 穿着 变为, 进入...状态; 发作 go it 拼命干, 莽撞 放荡; 挥霍 go it alone 单干 go off 离去, 走掉,【戏】(角色)下、退场 经过, 进行得 爆炸; (枪、爆竹)响起; (话等)突然冒出 (电流等)停掉, 消失; 死 (货物)销售; 售出 (食物等)变坏 睡着, 昏过去 [口](女儿)出嫁; 渐渐忘怀, 变得淡薄 对...失掉兴趣 go off with 拿[抢, 拐]走, 同(某人)私奔 go on 往前走, 继续下去(with, doing); 日子过得(well, badly) 发生, 进行, 进展[行](情况) 接着做某事(go to do sth.); [口]接近 升学; 穿[戴]进 (时间)过去; 消逝 (运动员, 演员)上场, 登台 责骂(at) 受救济[支持, 资助] 依据 (板球)投球 Go on! [口]接下去! [反]别胡说啦! go on about 唠唠叨叨地谈... go on for 接[将]近(...岁)(常用 -ing形式) go out 出去[国]; (妇女)离家工作 辞职; 退职; 下台 (灯, 炉火)熄灭 不再流行; (衣服样式等)过时 参加社交活动, 交际 出版 (时间)过去 罢工 [美]垮下, 倒塌 [美]参加?? (心)向往(to) 失去知觉; 入睡 对...充满同情 go over 越[渡]过; 走完; 转向(to); 改变立场; 车(翻倒) 复习; (仔细)检查; 审阅; 研究 [美]受欢迎; 成功 (提案等)延期讨论 goround 四处走动; 绕道走 顺便或非正式去拜访 (消息等)流传 够用, 够分配 (带子)长得够绕一圈 go slow 慢慢走; 怠工 go so far as (to do) 竟然到(做...)的地步 go some [美口]做[得]了不少; (事情、工作等)迅速地、顺利地、有成效地进行 go somewhere [口](大、?愕奈裼?出去一下, 出去有点事 go steady (with) [美口](同异性交朋友, 婚前)经常约会外出 go straight 笔直地走 老老实实地做人; 改过自新 go swimmingly 进行顺利, 获得成功 go through 通过(考试等); 经过 审阅; 检查 经历(困难、痛苦等), 忍受 做完(工作); 耗尽 举[履]行; 参加 (提案等)被通过; 被接纳[认可] (书)销售突破(第...版) (生意等)成交 修毕(课程等); 参加(考试等) go through with 完成(工作计划等); 实现, 贯彻(诺言等) Go to! [古]去你的! 等一等! go to 总共 相当[有助]于; 促成 付出 求助于, 诉诸(法律等) go to it 加油干, 努力干; 干起来 go together 陪同; 相配 [口]经常作伴; 形影不离; 恋爱 go too far 过火, 走极端 go under 沉没; 没落, 破产; 失败; 屈服; [美俚]死 被称为...; 装扮成... go up 上升; 攀登; 增长 被烧[炸]毁, [美]破产; 死, [美]失败 [英]上大学, 上城市去 go upon 据...来判断(行动) 着手 go with 陪...同行, 同...一致[协调]; 同...谈恋爱 带有 领会, 了解 go without 没有...也忍受过去 gone on sb. [口]迷恋某人, 倾心于
实现指定个核心最大化使用,比如核心总数减一。
必要的库。
要使用的cpu数量,建议不全使用。
建立管道。
声明使用的cpu数。
建立互斥关系,本例中主要为了实现所有线程执行完后再执行后续程序。
创建cpu数减1个线程
后面每个任务结束时要done一个wg,这里根据具体情况加,是循环就在每个循环里加,保证后面能全部done即可
没有缓冲的、阻塞式的往管道传递字符串。
Wait是等所有线程都执行完,即增加的数字被全done掉。
关闭管道。
假设已有的函数是ReadLogs,在它的基础上加个Wg加函数名的新函数,我觉得这种方式不改变原有的,比较舒服。
大意是:循环从管道读取字符串,读不到了就跳出循环。
每个ReadLogs()之后加一个wg.Done(),相当于计数减一。
ReadLogs()就是要执行的任务,不再解释。
就是开指定个线程。
管道阻塞传值。
wg同步。
WgReadLogs循环接收。
网站题目:go语言管道用法 go语言 gin
浏览路径:https://www.cdcxhl.com/article38/ddicppp.html
成都网站建设公司_创新互联,为您提供外贸网站建设、网站设计、ChatGPT、App设计、做网站、服务器托管
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联