我
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
我觉得不管是编辑器语言层面,还是框架层面,还是逻辑层面,都需要考虑,才能写出好程序
有疑问加站长微信联系(非本文作者)