Golang Go语言中的管道是调用系统的管道,还是编译器又实现了一遍?
null
Golang Go语言中的管道是调用系统的管道,还是编译器又实现了一遍?
13 回复
src/runtime/chan.c
更多关于Golang Go语言中的管道是调用系统的管道,还是编译器又实现了一遍?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
完全不一样的东西,,就是一个阻塞队列。
https://golang.org/src/runtime/chan.go ,channel 实现源码
你对管道的理解有问题。go 的管道应该是基于系统的线程封装的。
按我的理解,和 java 中的阻塞队列原理差不多吧
感觉楼主既不懂 go,也不懂系统=,=
赞同楼上的 就是 java 的有界和无界阻塞队列
google 条件变量 消费者 消费者,你也可以实现一个“ go 管道”。
楼主你是找几个 demo 就上手写的嘛?建议你多看看书,你这个问题在许式伟的《 Go 语言编程》里面有说明
你可以看看 /price/$pid/fd 看看有么有管道被打开
price -> proc
iOS 拼写检查?
呃呃呃呃呃,确实是自动给我改成 price 了
在Golang(Go语言)中,管道(Pipeline或channel)是一个核心概念,但你所提到的“管道”似乎涉及两个不同的层面:一是Unix系统中的管道技术,二是Go语言内置的管道机制。以下是对这两个层面的专业解答:
- Unix系统管道:这是Unix Shell命令行中的概念,用于将多个命令通过管道符(|)连接起来,实现数据的流式处理。例如,
ps -ef | grep nginx
命令通过管道连接了ps
和grep
,筛选出nginx进程。这种管道技术并非Go语言特有,而是Unix/Linux系统提供的功能。 - Go语言管道:在Go语言中,管道通常指的是通过
make
函数创建的channel。channel是Go语言并发编程的核心机制之一,它允许在不同的goroutine之间进行数据通信和同步。Go语言的channel与Unix系统管道在概念上有相似之处,即都实现了数据的流式处理,但两者在实现方式、应用场景和性能特性等方面存在显著差异。
综上所述,Golang中的管道并非直接调用系统的管道,而是Go编译器和语言规范中实现的一种并发通信机制。