在终端中运行 golang 程序,滚动终端的输出时有可能导致线程卡死??

2020-08-09 05:39:09 +08:00
 thefack

环境是 Windows10,go1.12

在 powershell 中运行 build 好的程序,当用鼠标滚轮滚动查看程序的输出内容时,极有可能导致进程卡住,表现为不再输出内容和网速占用降为 0kb,当按了 Ctrl+c 就恢复正常。而不滚动终端的输出时就没有发生过这种情况。

请问大伙遇到过这种情况吗?

3060 次点击
所在节点    Go 编程语言
10 条回复
yulon
2020-08-09 06:37:44 +08:00
你选中文字了吧,大概怕你白选,控制台会暂停了标准输入输出
wwqgtxx
2020-08-09 06:58:02 +08:00
只要是控制台程序都会这样吧,当滚动终端的时候会阻塞标准输入输出,如果没有在独立线程中 print 的就会卡住当前执行 print 的线程
thefack
2020-08-09 07:05:48 +08:00
@yulon
@wwqgtxx
明白了,谢谢
locoz
2020-08-09 08:24:32 +08:00
是这样的…你还可能会碰到一个疑似 bug 的情况:控制台最小化之后,过段时间程序也卡住了
mmdsun
2020-08-09 08:41:08 +08:00
关闭 powershell 的快速编辑模式。
zhuzeitou
2020-08-09 10:36:32 +08:00
封装一个自己的 log 或者什么的,不直接 print 到 stdout 或 stderr,而是先写到一个 buffer 中,然后用一个 goroutine 负责从 buffer 读取内容 print,这样可能阻塞的 print 只会发生在这个 goroutine,调用 log 的时候不会发生阻塞
May725
2020-08-09 11:25:31 +08:00
正常的,敲一下回车键就正常了
thefack
2020-08-09 15:43:11 +08:00
@locoz
@mmdsun
@zhuzeitou
@May725
谢谢大伙,原来如此,以前没注意过这种问题。
toomlo
2020-08-09 16:24:57 +08:00
哇,学习到了~~~
mengyx
2020-08-09 17:38:22 +08:00
可以用 windows terminal,可以避免这个问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/696797

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX