jjzjj

转到 : channel is necessary in this case?

coder 2024-07-06 原文

http://play.golang.org/p/Xn3Qw7xAi3

很难理解 channel 。

我有

func main() {
  in := make(chan int)
  out := make(chan int)
  go QuickSort(in, out)

  for i := 0; i < 100; i++ {
    in <- rand.Intn(1000)
  }
  close(in)

  for i := range out {
    fmt.Println(i)
  }
}

这使得名为 in、out 和 goroutine 的两个 channel 成为函数 Quicksort。

1. QuickSort 如何将 in 和 out 作为参数?它是否从下面的线路接收?

  in <- rand.Intn(1000)

2。 这种情况下使用 channel 是最佳的吗?动态地接收值看起来非常整洁……如果没有 channel 进行排序会有什么不同?这种情况更快?

最佳答案

I wrote the original version of that!

我认为我的原始文章回答了您的第二个问题...

Just for fun - a channel based quicksort.

Interesting that you can make a quicksort without being able to index your input. It may be O(n log n) for comparisons but it is O(n) for channels and go routines so perhaps not the most efficient quicksort ever ;-)

It also has the worst case complexity O(n²) if you feed it sorted input, so don't do that!

这确实有点有趣 - 但它使用了大量的 channel 和 goroutines,这将使其比传统的快速排序更慢并且使用更多的内存。

关于转到 : channel is necessary in this case?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19914133/

有关转到 : channel is necessary in this case?的更多相关文章

  1. ruby-on-rails - 我需要从 HTML 转到 markdown,有什么建议吗? - 2

    我正在使用Maruku,将Markdown(超集)转换为HTML,你知道我该怎么做才能从HTML转换为Markdown吗? 最佳答案 Google发现了一个名为reverse_markdown的ruby​​脚本.它似乎可以满足您的需求。 关于ruby-on-rails-我需要从HTML转到markdown,有什么建议吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/175162

  2. ruby - 是否有任何命令可以使用 vim 转到 Ruby block 的末尾(或开始) - 2

    有没有办法使用vim结束Rubyblock?例如moduleSomeModule#defsome_methodendend我想用一个命令从光标所在的位置移动到block的末尾,这可能吗?我读过thisdocumentation,但它似乎不适用于.rb文件,我在某些地方读到它只适用于C(虽然还没有尝试过)。提前致谢。 最佳答案 rubyforge好像有官方包对此有一些支持:TheRubyftpluginnowincludesRubyspecificimplementationsforthe[[,]],[],][,[m,]m,[M,an

  3. ruby - 在 Vim 中使用 Ctags 跳转到 Ruby bang 方法 - 2

    我在使用ExhuberantCtags跳转到Rubybang方法时遇到问题。我已经搜索过其他有类似问题的人,但找不到任何东西。可以使用以下小型Rub​​y类显示该问题的示例:classHellodefstartmethod!enddefmethod#Blahenddefmethod!#Blahendend当ctags-R.在此文件上运行时,生成的tags文件包含以下两行,表明这两种方法都是在生成时发现的:methodtest.rb/^defmethod$/;"fclass:Hellomethod!test.rb/^defmethod!$/;"fclass:Hello但是,如果我将光标放

  4. ruby - “运行失败跳转到方法定义”错误 : undefined method `current_line' for TextMate:Module - 2

    更新:我想通了。Ctrl-F仅在未选择我正在搜索的方法时有效。游标只需要在方法名中。我刚升级到TextMate2。当我选择一个方法并使用Ctrl+F转到它的定义时,我得到:>FailurerunningJumptoMethodDefinition这是痕迹:/Users/ilikepie/Library/ApplicationSupport/TextMate/Managed/Bundles/RubyonRails.tmbundle/Support/lib/rails/text_mate.rb:54:in`method_missing':undefinedmethod`current_li

  5. ruby - 如何使用 Vim 从 do 跳转到 Ruby block 的末尾? - 2

    我正在使用vim进行ruby​​、php和perl开发。有快捷方式%可以从block(子例程/函数/方法/if)的开头跳转到结尾,反之亦然。对我来说,ruby中的do/end标记上的%不起作用。我如何用vim做到这一点? 最佳答案 matchitplugin允许匹配的不仅仅是括号和注释。可以找到ruby​​版本here. 关于ruby-如何使用Vim从do跳转到Rubyblock的末尾?,我们在StackOverflow上找到一个类似的问题: https://

  6. ruby - 如何从正在运行的脚本转到 IRB 提示符? - 2

    我可以从正在运行的Ruby脚本转到IRB提示吗?我想运行一个脚本,然后让它在程序中的某个点给我一个IRB提示以及程序的当前状态,但不仅仅是通过运行rdebug和设置断点。 最佳答案 Pry(一个IRB替代方案)也可以让你这样做,事实上它是为这个用例从头开始设计的:)这就像将binding.pry放在您想要开始session的位置一样简单:require'pry'x=10binding.pry在session中:pry(main)>putsx=>10查看网站:http://pry.github.com请让我们:在您的代码中的任何一点进

  7. javascript - 转到Vuejs 2中的特定路线 - 2

    我是VueJS的新手,我正在使用VueJS2Webpack模板。如果登录成功,我试图从登录组件重定向到主组件,我已经尝试了很多东西,但我仍然遇到错误。这是我的路线:constrouter=newVueRouter({mode:'history',routes:[{'name':'home',path:'/',component:require('./components/Home.vue'),beforeEnter:(to,from,next)=>{if(!localStorage.getItem('user')){next('/login')}}},{'name':'profile'

  8. javascript - 为什么我的 jest.mock 中的 Promise reject() 会转到 then() 而不是 catch()? - 2

    我有两个文件,getItemInfo.js进行API调用,getItemInfo.test.js是相应的Jest测试文件。在测试文件中,我正在模拟由Node模块request-promise触发的http调用。问题在第二个代码块上,被*********包围。基本上为什么reject()错误仍然会在第二个单元测试中进入then()block?//getItemInfo.jsconstrp=require('request-promise');constgetItemInfo=(id)=>{constroot='https://jsonplaceholder.typicode.com/po

  9. javascript - 手动转到上一个状态时 $ionicHistory.backView 的状态不正确 - 2

    我做了一个小实验:http://codepen.io/hawkphil/pen/NqMomm?editors=101这是我的状态流程(点击按钮):Home->Fact1->Fact2->Fact3->Fact2在每次状态更改时,我都会在console.log中显示$ionicHistory.backView但是,您可以在pen.js:64行中看到,奇怪的事情发生了。$ionicHistory.backView“认为”我从后退按钮到达了app.fact2,它显示app.fact1作为前一个状态(行pen.js:53)。这是不正确的,对吧?它应该将app.fact3显示为之前的状态,因为我

  10. javascript - 使用 __dirname 时如何转到父目录? - 2

    这个问题在这里已经有了答案:Howtogoback1folderlevelwith__dirname?(11个答案)关闭10个月前。目录结构:WebApiAngular色GulpFile.js测试业力.conf.js来自GulpFile.js的Gulp代码gulp.task('test',function(done){karma.start({configFile:_configFile:__dirname+'\\..\\test\\karma.conf.js',singleRun:true},done);});所以我的问题是转到父目录并访问karma.conf.js。由于某种原因,路

随机推荐