分享
lua中"协程"和erlang"进程",go等脚本 与 java 中"多线程"的对比理解
themagickeyjianan · · 3553 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
我
Lua,Erlang,go这种只有协程或者所谓的轻量级"进程"的语言,虽然它们让程序执行变得可以控制,假如:他们即使一下子开了1000个线程,实际上一次只能运行1个线程,本身并没有利用多核的优势。 假如:让这几种语言和具有真正线程概念能利用多核cpu的java对比下。 如果一下子都处理1000个任务,因为前几个语言没有利用多核cpu,那处理速度会不会比java慢很多呢? 这个怎么理解。找了很多资料,他们只介绍了:lua的协程或者Erlang的进程,只是说让程序变得可控这种优势,但是却没介绍:如果这种不是真正的"线程"的语言来处理任务时,是否会处理的缓慢等问题。
而且:云风的skynet这个服务器端框架,利用actor模型,里面主要就是用的协程,实际开发中,并没有我说的那个问题。所以我想知道:我哪里理解错了。
有种BUG叫设计如此 12:55:05
你的疑问是什么啊?
有种BUG叫设计如此 12:57:10
不能利用多和资源是吧
有种BUG叫设计如此 12:58:08
最简单的写个程序试试就知道了,协程里面写死循环看,能不能把cpu跑到100%
Lukey 13:01:41
我就在用go
Lukey 13:01:45
确实不错
王哲小号 13:02:20
lua的"协程"并不是线程,说到底,这1000个协程一定是顺序执行的,严格来说,它是在某个线程环境下执行的,除掉本身的消耗,它的消耗另外一部分在管理这些协程以及代码跳转,至于是否能够利用到多核,取决于上层的高级语言对于线程的性能能否较好的分摊到多核上去。
王哲小号 13:03:21
golang在设计之初就是针对多核的,所以上层语言的设定就针对多核下的环境,golang中很多东西都针对多核进行了特别的优化。
海浪 13:07:03
我想问的是。。。你纠结携程是不是利用多核,是要干啥
王哲小号 13:07:42
这个是在语言设计层面需要考虑的事情
有种BUG叫设计如此 13:08:06
逻辑上也需要考虑 的
王哲小号 13:08:07
至今还没有看到过哪种语言还需要你手动考虑到多核的
王哲小号 13:08:24
比如?
有种BUG叫设计如此 13:08:56
至少要知道才知道什么时候用进程,什么时候用线程,什么时候用协程啊
海浪 13:09:35
你连这都不知道。。。。。
王哲小号 13:09:49
这个我觉得更多的程序性能上面的事情
王哲小号 13:09:57
而不是考虑多核
王哲小号 13:10:25
一个问题不只有一种解,我们要的是最优解
有种BUG叫设计如此 13:10:45
如果你不知道一个语言的协程是不是可以分派到多核处理,那就是连那些也不知道呗
王哲小号 13:10:48
进程、线程这种解是不是最优,我觉得具有一定的讨论余地
有种BUG叫设计如此 13:18:28
一个lua vm对应一个os 线程
有种BUG叫设计如此 13:18:49
skynet 应该是用的多个lua vm利用的多核资源
北京|欠费 13:32:23
是否使用多核 编译器上面考虑的吧 你在语言层面 考虑没有意义。
有种BUG叫设计如此 13:41:23
我觉得不管是编辑器语言层面,还是框架层面,还是逻辑层面,都需要考虑,才能写出好程序
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信3553 次点击
上一篇:golang时间相关的用法总结
下一篇:go example之旅(下)
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
我
Lua,Erlang,go这种只有协程或者所谓的轻量级"进程"的语言,虽然它们让程序执行变得可以控制,假如:他们即使一下子开了1000个线程,实际上一次只能运行1个线程,本身并没有利用多核的优势。 假如:让这几种语言和具有真正线程概念能利用多核cpu的java对比下。 如果一下子都处理1000个任务,因为前几个语言没有利用多核cpu,那处理速度会不会比java慢很多呢? 这个怎么理解。找了很多资料,他们只介绍了:lua的协程或者Erlang的进程,只是说让程序变得可控这种优势,但是却没介绍:如果这种不是真正的"线程"的语言来处理任务时,是否会处理的缓慢等问题。
而且:云风的skynet这个服务器端框架,利用actor模型,里面主要就是用的协程,实际开发中,并没有我说的那个问题。所以我想知道:我哪里理解错了。
有种BUG叫设计如此 12:55:05
你的疑问是什么啊?
有种BUG叫设计如此 12:57:10
不能利用多和资源是吧
有种BUG叫设计如此 12:58:08
最简单的写个程序试试就知道了,协程里面写死循环看,能不能把cpu跑到100%
Lukey 13:01:41
我就在用go
Lukey 13:01:45
确实不错
王哲小号 13:02:20
lua的"协程"并不是线程,说到底,这1000个协程一定是顺序执行的,严格来说,它是在某个线程环境下执行的,除掉本身的消耗,它的消耗另外一部分在管理这些协程以及代码跳转,至于是否能够利用到多核,取决于上层的高级语言对于线程的性能能否较好的分摊到多核上去。
王哲小号 13:03:21
golang在设计之初就是针对多核的,所以上层语言的设定就针对多核下的环境,golang中很多东西都针对多核进行了特别的优化。
海浪 13:07:03
我想问的是。。。你纠结携程是不是利用多核,是要干啥
王哲小号 13:07:42
这个是在语言设计层面需要考虑的事情
有种BUG叫设计如此 13:08:06
逻辑上也需要考虑 的
王哲小号 13:08:07
至今还没有看到过哪种语言还需要你手动考虑到多核的
王哲小号 13:08:24
比如?
有种BUG叫设计如此 13:08:56
至少要知道才知道什么时候用进程,什么时候用线程,什么时候用协程啊
海浪 13:09:35
你连这都不知道。。。。。
王哲小号 13:09:49
这个我觉得更多的程序性能上面的事情
王哲小号 13:09:57
而不是考虑多核
王哲小号 13:10:25
一个问题不只有一种解,我们要的是最优解
有种BUG叫设计如此 13:10:45
如果你不知道一个语言的协程是不是可以分派到多核处理,那就是连那些也不知道呗
王哲小号 13:10:48
进程、线程这种解是不是最优,我觉得具有一定的讨论余地
有种BUG叫设计如此 13:18:28
一个lua vm对应一个os 线程
有种BUG叫设计如此 13:18:49
skynet 应该是用的多个lua vm利用的多核资源
北京|欠费 13:32:23
是否使用多核 编译器上面考虑的吧 你在语言层面 考虑没有意义。
有种BUG叫设计如此 13:41:23
我觉得不管是编辑器语言层面,还是框架层面,还是逻辑层面,都需要考虑,才能写出好程序