草庐IT

go - 在 goroutine 中等待主线程 sleep

coder 2024-07-11 原文

编写这段非常基本的代码来理解 channel 。

  1. 如果协程中有等待,为什么主协程在等待它?我读到主 goroutine 需要等待时间,因为在调用 goroutine 后控制权会立即传回给它。

  2. 为什么 goroutine 不像 java 中的主线程和子线程那样可以并行运行?

func main() {
    channel := make(chan int)
    go func() {
        time.Sleep(3*time.Second)
    }()

    for {
        fmt.Println("../");
        <-channel
    }
}

最佳答案

我认为你的主线程正在等待来自 channel 的东西

func main() {
    channel := make(chan int)
    go func() {
        time.Sleep(3*time.Second)
        channel <- 1 // Sending something to the channel to let the main thread continue
        channel <- 2
    }()

    for {
        fmt.Println("../");
        <-channel // Waiting for something to come from the channel
    }
}

关于您的具体问题:

If there is a wait in a goroutine, why is the main goroutine waiting on it?

它不等待它,它可能在 channel 上等待。

I read that the main goroutine needs to have a wait time as the control is passed back to it immediately after invoking goroutine.

如果您的 main 没有在 channel 上等待(或堆栈在无限循环中),它已经完成并关闭了应用程序。 GoRoutines 与主线程一起关闭(类似于 Java 守护线程)

Why are goroutines not designed like main thread and child threads in java where they can run in parallel?

他们确实这样做了(:

关于go - 在 goroutine 中等待主线程 sleep ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54401093/

有关go - 在 goroutine 中等待主线程 sleep的更多相关文章

  1. ruby - Watir ... sleep 和等待之间的区别 - 2

    有什么显着的区别吗sleep10和wait_until(10)他们似乎都在做同样的事情:WAITING10秒,然后继续下一步 最佳答案 sleep在指定时间内什么都不做。wait_untiltakesablock.它一直等到block评估为真或超时。如果没有给出block,它们的行为相同。 关于ruby-Watir...sleep和等待之间的区别,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/que

  2. ruby-on-rails - Textmate 'Go to symbol' 相当于 Vim - 2

    在Railcasts上,我注意到一个非常有趣的功能“转到符号”窗口。它像Command-T一样工作,但显示当前文件中可用的类和方法。如何在vim中获取它? 最佳答案 尝试:helptags有各种程序和脚本可以生成标记文件。此外,标记文件格式非常简单,因此很容易将sed(1)或类似的脚本组合在一起,无论您使用何种语言,它们都可以生成标记文件。轻松获取标记文件(除了下载生成器之外)的关键在于格式化样式而不是实际解析语法。 关于ruby-on-rails-Textmate'Gotosymbol

  3. ruby - `loop{}` 与 `loop{sleep 1}` - 2

    我正在使用循环等待键盘中断,然后在多线程环境中退出之前允许进行一些清理操作。beginloop{}rescueInterruptp"Ctr-CPressed..CleaningUp&ShuttingDown"loopdobreakifexit_bool.false?endexit130end这段代码运行在主线程中。有多个线程执行多个文件和数据库操作。exit_bool是一个由其他线程设置的原子变量,表示它们正处于某个操作的中间。我检查该值并等待它变为false然后退出。我想知道loop{}相对于loop{sleepx}的成本是多少。 最佳答案

  4. ruby - 我如何在不使用 ruby​​ 中的 sleep() 的情况下 rspec/test 一个 updated_at 字段? - 2

    如何在不使用sleep(1.second)方法的情况下编写规范?当我取消sleep时,我的测试会因为返回相同的时间戳而中断吗?我有以下类方法:defskipqs=find_or_create_by(user_id:user_id)qs.set_updated_atqs.n_skip+=1qs.save!end和以下规范:qs=skip(user.id)sleep(1.second)qs2=skip(user.id)qs.should_notbe_nilqs2.should_notbe_nil(qs.updated_at 最佳答案 我

  5. ruby-on-rails - 为什么在 after hook 中添加 "sleep 1"会导致此 Rspec/Capybara 测试通过? - 2

    我使用的是rails4.0.5、rspec2.14.1、capybara2.2.1、capybara-webkit1.1.0和database_cleaner1.2.0。我在以下功能测试中看到一些奇怪的行为(模拟用户查看帖子评论,将鼠标悬停在图标上以显示菜单,然后单击菜单项删除评论):let(:user){create(:user)}let(:post){create(:post,author:user)}let!(:comment){create(:comment,post:post,author:user)}...it"candeleteacomment"doassert(page

  6. ruby-on-rails - 用于 Ruby 的 vim 中的全局 "Go to definition"? - 2

    自97年以来我一直在使用vi/vim进行各种快速编辑和管理任务,但最近才考虑使用它来替换Netbeans作为我选择的ruby​​编辑器。我发现一件事在Netbeans和Eclipse中非常有用的是Ctrl+Click“转到定义”功能,您可以在其中按住Ctrl键并单击一个类或方法,然后它将带您了解定义。现在,我玩过丰富的ctags和rails.vim,而且很接近,但没有雪茄。这就是我想要的:默认情况下在Netbeans和Eclipse中,您可以在本地rails中按住ctrl并单击本地方法或类项目,但你也可以ctrl+click定义在gems或用Ruby编写的系统库。以Netbeans为例

  7. Ruby sleep 到特定时间 - 2

    我怎么能写,我的代码休眠不是例如5秒,而是直到达到机器上的某个时间。不是这样的:sleep(5)但是像这样:now=DateTime.Nowwhilenow!="14:40:03"sleep(0.5)end怎么做才是正确的? 最佳答案 require"time"sleep(Time.parse("14:40:03")-Time.now) 关于Rubysleep到特定时间,我们在StackOverflow上找到一个类似的问题: https://stackover

  8. ruby - Rails 使用什么 sleep()? - 2

    我正在测试一段Rails代码,上面写着:sleep(10.0)在我的RSpec测试中,调用:Kernel.should_receive(:sleep).exactly(1).time失败,测试休眠了十秒。这使我得出结论,Rails程序中的sleep()并未调用Kernel.sleep()。我通过将我的Rails代码更改为以下内容来验证这一点:Kernel.sleep(10.0)...之后我的RSpec测试通过了(并且测试没有休眠)。这引出了一个具体的和一般的问题:Rails使用什么sleep()实现(我运行的是Ruby1.9.3/Rails3.2.1)?对于解释器,找到任何函数的源代码

  9. ruby - sleep() 对于作业调度应用程序的主循环来说是个好主意吗 - 2

    我正在为我的工作用Ruby编写一个作业调度应用程序(主要是为了以给定的频率使用各种协议(protocol)移动文件)我的主循环是这样的:whiletruedo#somecodetolaunchtheproperjobsleepCONFIG["interval"]end它的工作就像一个魅力,但我不确定它是否足够安全,因为该应用程序可能在运行cpu密集型软件的服务器上运行。是否有另一种方法可以做同样的事情,或者sleep()对我来说是否足够安全? 最佳答案 每当我觉得需要阻塞时,我都会使用事件循环;通常是libev。这是一个Ruby绑定

  10. ruby-on-rails - capybara / cucumber 的 sleep 功能? - 2

    我正在尝试测试我网站上的一个页面,该页面要求用户在继续之前至少在该页面上停留五秒钟。Capybara是否有办法让我的Cucumber测试在该页面上暂停并等待五秒钟,然后再继续我描述的下一步? 最佳答案 我的步骤定义中有这个:Given/^Iwaitfor(\d+)seconds?$/do|n|sleep(n.to_i)end在你的功能中:GivenIamonthewhateverpageAndIwaitfor5secondsAndIfollow"ALink"#etc... 关于ruby-

随机推荐