对于某些类型的用户生成的事件,通道缓冲区大小是否必须大于 0?

Is having a channel buffer size greater than 0 essential for certain types of user generated events?

如果您查看 async webinar 的代码,您会发现一些频道是用 1 号创建的,但大多数是 0 号。

大小 1 似乎用于两个事件可以完全同时到达(其中有多个源)或事件可以非常迅速地到达的情况。例如,对于 EventType.KEYDOWN 事件,用户可以按住按键以快速生成事件,而对于来自一个按钮的 EventType.CLICK 事件,当按键向上和向下时,事件之间会有一个明确的暂停又下来了。

(chan 1)而不是(chan)的目的是为了让演示'less clunky',效果更流畅吗?如果所有通道的缓冲区大小都为 0,他所演示的内容是否仍然有效?推理机速度是否依赖 - 即 (chan 1) 主要是为了机器慢的人的利益吗?

如果您使用没有缓冲区的通道,则对该通道的任何放置都将停止,直到有相应的通道为止。使用带有缓冲区 1 的 chan 让 'putter' 继续 运行ning 直到它进行第二次放置。届时它将停放,直到有人从缓冲区取走。

举一个具体的例子,如果放置状态机(go block 或 thread)需要 运行 在一个值被放入通道之后但在它可能被接收方处理之前的一些副作用状态机,那么你应该使用一个缓冲区。

使用缓冲区 1 或 0 或 not 之间的选择不应该依赖于机器(我认为?),这将取决于您创建的 core.async 状态机的逻辑性质,并且两个状态机是否需要在某个点同步 ((chan 0)),或者它们是否可以更独立地工作 ((chan 1))。