Goruntine是否有必要做个pool? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
blahnice
V2EX    Go 编程语言

Goruntine是否有必要做个pool?

 
  •   blahnice 2013-01-29 13:01:16 +08:00 3210 次点击
    这是一个创建于 4640 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为有个百万级别个数的分批i/o任务,通常一般都是自己做个thread或者process pool去做worker。而如果改用go去做,自己对golang的go协程也不是特别了解,因此不太了解如果用go程做并行最优化、切换上下文短的并行模型,该如何去做。各位对此有什么建议?
    能有个example代码最好了,thx
    3 条回复    1970-01-01 08:00:00 +08:00
    clowwindy
        1
    clowwindy  
       2013-01-30 14:26:36 +08:00 via iPhone
    cyfdecyf
        2
    cyfdecyf  
       2013-02-01 11:33:40 +08:00   1
    Go runtime 启动时会预先创建一些线程,如果存在 ready-to-run goroutine 找不到空闲的线程来执行,runtime 会创建新的线程。

    目前的 runtime 不会限制创建线程的数量,所以如果有很多 block I/O 操作可能会导致创建出非常多的线程。如果遇到这样的问题可能需要用 goroutine pool 来限制。

    Effective Go 里用 channel 实现 semaphore 的代码是个不错的例子,注意看最后一个例子 http://golang.org/doc/effective_go.html#channels

    Go 1.1 可能加入让用户指定创建的线程数上限的功能,但如果所有的线程都 block 在 I/O 上,整个程序就可能 block 住。用 goroutine pool 可以显示的只让执行 I/O 的 goroutine block,其他 goroutine 可以并发执行。

    另外单独创建一个 goroutine 的内存占用大概在 4K,好像记得可以通过修改 go 代码来减小这个大小。
    ryanking8215
        3
    ryanking8215  
       2013-10-30 10:45:31 +08:00
    go net.TcpConn已经是Nonblock了,如果有block,应该也是filesystem的吧。
    另外goroutine要比线程轻量吧,从现象上说goroutine和线程是n对m的关系(n>m),是这样吧?那怎么了解goroutine的消耗呢?有的goroutine切换上下文在一个线程,有的是多个线程切换,时间和空间开销都是不一样的。这个怎么计算呢?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5495 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 153ms UTC 09:04 PVG 17:04 LAX 02:04 JFK 05:04
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86