我该如何确定走频道的哪一边在另一边等待?如何确定走频道的哪一边正在等待?
我想知道这个,所以我可以找出我的处理正在受到限制,并通过分配更多资源进行响应。
一些选项
2种方法我认为双方都需要的东西所以测量不太吵做记录值的移动平均值,但是这不是一个bigproblem。
- 使用一个定时器来检查的时间%的消费者
等待在单个消费者的情况下,我可以从通道消耗后,我停止计时器之前启动一个定时器得到一个记录。我可以跟踪每个获取周期中等待和响应的时间百分比。
-
缓冲信道的
- 试样长度
如果信道经常是0,这意味着我们正在消耗比发送速度更快。同样,如果缓冲区已满,我们发送速度比我们可以接收的速度快。我们可以随时检查我们频道的长度,以确定运行缓慢的情况。
出于性能原因或其他原因,是否有充分的理由选择其中一个到另一个?有一个更简单的解决方案来解决这个问题吗?
例
我正在执行N
HTTP请求抓住在同一时间在多达W
够程内容,并在单个的goroutine运行发送所有内容的信道到一个processor
,服务,其在将数据反馈给客户端。
每个工作任务将导致通道上发送大量消息。每个worker
的任务可能需要几分钟才能完成。
下图总结了3名并发工作人员(W=3
)的数据流。
[worker: task 1] -
\
[worker: task 2] - | --- [ channel ] --- [ processor ] -> [ client ]
/
[worker: task 3] -
我想知道我是否应该请求过程中运行更多的工人(增加W
)或更少的工人(减少W
)。由于客户端通过非常不同的速度进行连接,因此每个请求可能会有所不同。
您是否尝试过仅运行阻止配置文件? – JimB
你可以使用'len()'和'cap()'作为频道 –
@JimB我不清楚你的意思是“阻止配置文件”。 – turtlemonvh