searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

go的changel存在的问题

2024-11-27 09:37:29
0
0

gochangel编程模式是类似于actor的一种编程模型,这个模型也存在一些问题:

1、如果多个actor存在同生共死的依赖关系,在析构过程中,父actor通知子actor关闭,由于协程actor模型处理信息延迟响应的处理,在资源释放过程中有延后,这样会出现在释放的过程可能持续好几秒的时间,过程中就有可能有新请求接入。

2、协程的运行是顺序执行的,虽然可以通过select同时监听多个管道,但是如果在接收到一个管道,在处理过程中阻塞(sleepio阻塞),会导致这个协程被阻塞,这样的设计是有导致的,是为了不破损执行的栈等上下文,比如接收到管道a,处理进行阻塞,在阻塞过程中又接收到管道a,如果进行处理的话,就会破坏到之前阻塞的栈,导致阻塞恢复后运行混乱。

正因为这样又会加剧1的问题,具体子actor在阻塞过程中,就不会处理父actor通过管道发过来的退出信号。

3、协程是没有强制退出的机制的,设计哲学是通过协作而不是强制来管理并发。这是为了避免潜在的资源泄漏和不确定的状态。

0条评论
0 / 1000
何****毅
5文章数
0粉丝数
何****毅
5 文章 | 0 粉丝
何****毅
5文章数
0粉丝数
何****毅
5 文章 | 0 粉丝
原创

go的changel存在的问题

2024-11-27 09:37:29
0
0

gochangel编程模式是类似于actor的一种编程模型,这个模型也存在一些问题:

1、如果多个actor存在同生共死的依赖关系,在析构过程中,父actor通知子actor关闭,由于协程actor模型处理信息延迟响应的处理,在资源释放过程中有延后,这样会出现在释放的过程可能持续好几秒的时间,过程中就有可能有新请求接入。

2、协程的运行是顺序执行的,虽然可以通过select同时监听多个管道,但是如果在接收到一个管道,在处理过程中阻塞(sleepio阻塞),会导致这个协程被阻塞,这样的设计是有导致的,是为了不破损执行的栈等上下文,比如接收到管道a,处理进行阻塞,在阻塞过程中又接收到管道a,如果进行处理的话,就会破坏到之前阻塞的栈,导致阻塞恢复后运行混乱。

正因为这样又会加剧1的问题,具体子actor在阻塞过程中,就不会处理父actor通过管道发过来的退出信号。

3、协程是没有强制退出的机制的,设计哲学是通过协作而不是强制来管理并发。这是为了避免潜在的资源泄漏和不确定的状态。

文章来自个人专栏
软件设计思想
5 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0