在高性能服务器中,是否是能够采用协程来代替线程?

20 views
Skip to first unread message

joinhack

unread,
Jan 29, 2008, 1:33:57 AM1/29/08
to 高性能网络编程邮件列表
如题

sunway

unread,
Jan 29, 2008, 2:33:06 AM1/29/08
to 高性能网络编程邮件列表
没有
协程是一种合作方式,很多时候还是单线程。

On 1月29日, 下午2时33分, joinhack <joinh...@gmail.com> wrote:
> 如题

joinhack

unread,
Jan 29, 2008, 2:37:28 AM1/29/08
to 高性能网络编程邮件列表
主要是我的兄弟和我争论,在高性能服务器中采用协程来取代线程,他的观点是使用协程来得到更高的效率.
> > 如题- 隐藏被引用文字 -
>
> - 显示引用的文字 -

tao yuan

unread,
Jan 29, 2008, 2:55:02 AM1/29/08
to dev4s...@googlegroups.com

lua 里面有协程, 但是一直不知道这个东西在什么情况下使用。
诸位有实际应用的,可以介绍一下、

在08-1-29,sunway <sunh...@gmail.com> 写道:

joinhack

unread,
Jan 29, 2008, 2:58:30 AM1/29/08
to 高性能网络编程邮件列表
据我所知,lua里面协程最大好处,是把异步过程,当作同步处理.

On 1月29日, 下午3时55分, "tao yuan" <yty...@gmail.com> wrote:
> lua 里面有协程, 但是一直不知道这个东西在什么情况下使用。
> 诸位有实际应用的,可以介绍一下、
>
> 在08-1-29,sunway <sunhui...@gmail.com> 写道:
>
>
>
>
>
> > 没有
> > 协程是一种合作方式,很多时候还是单线程。
>
> > On 1月29日, 下午2时33分, joinhack <joinh...@gmail.com> wrote:

sunway

unread,
Jan 29, 2008, 4:01:17 AM1/29/08
to 高性能网络编程邮件列表

协程更多用在客户端。
> > - 显示引用的文字 -- 隐藏被引用文字 -
>
> - 显示引用的文字 -

joinhack

unread,
Jan 29, 2008, 4:39:51 AM1/29/08
to 高性能网络编程邮件列表
多用于客户端,游戏客户端?

qianv

unread,
Feb 16, 2008, 10:44:51 AM2/16/08
to 高性能网络编程邮件列表
可以search一下Portable Coroutine Library,coroutine其实还是单线程的
不过有时候用coroutine还是比较好的,原来用它实现过扫描引擎

Linker M Lin

unread,
Feb 20, 2008, 5:23:50 AM2/20/08
to 高性能网络编程邮件列表
Lua的协程可以用来取代状态机,因为协程可以把诸多状态函数合并成一个,在编写和阅读上,
使用了协程以后,状态机已经退化成一个函数.
我在一个大型的MMOG中用Lua构建了一个NPC AI框架,
供策划编写脚本.

对于协程能不能取代线程,我想,是不可以的.
首先,系统级线程或者进程最大的好处是把所有的阻塞操作非阻塞化了.(站在系统的角度来看)
如果用协程必然要求全部使用非阻塞的系统调用.否则,一个协程停下来,其他的协程也就不能跑了.

也就是说,如果一个系统中,所有的函数调用,如果没有返回的原因只可能是CPU算不过来,那么在单核情况下是可以用协程替代线程的.
(SMP就有点不合算了 )

说到底,是因为,CPU数量和资源的限制,以及自然界无穷并发性之间的矛盾.
这个矛盾必然需要在做系统映射的时候有一个n:m的比例.实际完成这个映射的方法很多.

Intel 曾经作过一种叫网络处理器的芯片,其 8+1一个9个核心,64+1个硬件线程的架构就是期望通过增加CPU资源来缓解这个矛盾的一次尝
试.

像在Erlang/OTP系统中,Erlang提供了用户态的超轻量级进程和m:n(用户进程:系统进程)的映射模型.
Erlang的用户态进程的数量可以到达100K级别.
在这种情况下,直接把外部并发源(用户的链接)一对一映射到用户态进程是最简单的方案.
在爱立信的很多系统中就是这样做的.


在早年的BBS/UNIX平台上,人们就使用过fork/accept模型通过系统级进程来处理用户连接.结果因为,系统开销大,而另觅他法.
当然,写的好的话,这种模型的系统,像KBS / smth ,也可以在单机上到 10K 连接的级别.











On Jan 29, 2:33 pm, joinhack <joinh...@gmail.com> wrote:
> 如题
Reply all
Reply to author
Forward
0 new messages