前两天用go写了一个mapReduce的word count,https://github.com/madiks/goMapReuce,大概设这样设计的:
四个channel:mapIn(接受map任务输入数据),mapOut(写入map任务的结果),reduceIn(将mapOut中的数据取出做分类整合然后写入reduceIn),reduceOut(写入reduce任务的结果)。在两个goroutine分别监听mapIn和reduceIn,一旦收到数据就启一个goroutine去执行map/reduce任务。基于这个写了一个word count。
我的疑问是:
1.假设有海量数据需要处理,不断写入mapIn channel,就会不断启动goroutine去执行任务,可是机器的承载力是有限的,这个程序是否会崩掉?
2.其实我觉得会崩掉的,那么是否要控制写入mapIn时的速度?根据什么控制?
3.也许是我在设计的时候就错了?那么怎样设计才能在面对海量任务时最大地利用当前机器的性能?
不需要每个数据启动一个 goroutine 吧,若干个 mapper 的 routine 加上若干个 routine 做 reducer 就好了。
#1
更多评论