啥意思?
啥意思?
--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛上的“Golang-China”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到golang-china...@googlegroups.com。
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/golang-china/CAFK4q9ytF871OgMg3QmzDUL8QMRcfAV%2B2pvFnX6s24E12DFOOg%40mail.gmail.com。
要查看更多选项,请访问https://groups.google.com/d/optout。
估计是指 https://golang.org/pkg/runtime/debug/#SetMaxThreads 这里提到的thread吧
在 2015年9月16日 上午2:31,minux <mi...@golang.org>写道:
啥意思?
--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛上的“Golang-China”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到golang-china+unsubscribe@googlegroups.com。
--Thanks,Phil Yang
是的,cgo调用C函数不是简单的压栈call,而是它将当前的goroutine附加到一个操作系统线程来运行,这样的话,如果这个C函数是正则表达式等cpu密集型(且调用时间很短)的函数,那么启新的线程的做法就得不偿失了。我有没有说错?
在 2015年9月16日星期三 UTC+8下午6:35:16,Phil Yang写道:
估计是指 https://golang.org/pkg/runtime/debug/#SetMaxThreads 这里提到的thread吧
在 2015年9月16日 上午2:31,minux <mi...@golang.org>写道:
啥意思?
--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛上的“Golang-China”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到golang-china...@googlegroups.com。
--Thanks,Phil Yang
--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛上的“Golang-China”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到golang-china...@googlegroups.com。
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/golang-china/9b635b3f-1ada-4ce4-a956-2132ac70ea1d%40googlegroups.com。
要查看更多选项,请访问https://groups.google.com/d/optout。
是的,cgo调用C函数不是简单的压栈call,而是它将当前的goroutine附加到一个操作系统线程来运行,这样的话,如果这个C函数是正则表达式等cpu密集型(且调用时间很短)的函数,那么启新的线程的做法就得不偿失了。我有没有说错?
2015-09-16 23:29 GMT-04:00 Phil Yang <ud1...@gmail.com>:
> 个人感觉其实还好?因为系统调用也是这样干的,网络读写啥的也都会这样。反而是如果调用cgo函数执行的时间很长&&开的goroutine很多,会导致thread很多甚至crash
非阻塞模式(默认情况)的网络读写不会造成浪费操作系统线程,因为 runtime 会自动用 epoll 来等待网络 I/O 就绪。
--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛上的“Golang-China”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到golang-china...@googlegroups.com。
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/golang-china/CAFK4q9w_2xWYJYH9yHdznPqAk9JDqcMM%3D2tapEFW8p%2B9kUDsYw%40mail.gmail.com。
要查看更多选项,请访问https://groups.google.com/d/optout。
在我们这里,主要的调用线程开销在文件IO上。因为文件IO量很大,最后就很容易因为抖动而阻塞,进而引发load升高。其实这也没有办法,并发式IO似乎只有aio和多上下文两个办法,而前者谁和我说过有个什么大坑来着。
--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛上的“Golang-China”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到golang-china...@googlegroups.com。
其实有。linux在内核中导出了很多aio函数,但是libc没封装。但是坑很多,不要用。。。
On Sep 17, 2015 11:46 AM, "guagua" <bette...@gmail.com> wrote:
> 正如你所说的,“cgo 调用会占用一个操作系统线程,此时 runtime 会创建一个新的操作系统线程来运行
> 已有的 goroutine” 也就是说cgo的调用始终会创建一个新的操作系统线程,那么频繁调用cgo岂不是很耗费系统资源?
> 对于一些短暂的cgo调用,是否可以像普通函数调用一样呢?
唉,写那么多白写了。
我说的是,如果可用(来运行goroutine的)线程不够GOMAXPROCS了,才创建新线程。不一定每次cgo调用都创建新线程的。
你要限制__并发__的cgo调用的数量,就能保证总线程数不上升。
另外,短暂的 cgo 调用极不划算,要么用 Go 重写要么 batching。