如果用go写一个高性能点的聊天服务器应该怎么写?


接触go没多久,在网上看了看tcp聊天服务器,大概实现就是:遇到有用户连接就直接开一个goruntine,这样的性能是否算高呢?假设只是一台4核8gb机器。大概能启动多少goruntine?怎么样能充分利用cpu资源,是设置GOMAXPROCS吗?

goroutine gopher go go语言

刹那D无垠 9 years, 2 months ago

golang跟Erlang一样,都是轻量级的线程,只不过golang叫协程(goroutine),而erlang叫做进程,但这些轻量级的线程或进程都是派生在真实的POSIX 线程之下的“伪线程”。 原文说的没错,go相比其他的IO开发模型,特点就是可读性好,创建的goroutine都是轻量级的,特别适用于长连接的用户,做聊天跟erlang一样都是非常适合的。
至于设置CPU资源,只需要设置最大的CPU核数即可,1.5以前的GO设置runtime.GOMAXPROCS为CPU数目即可。
goroutine跟CPU关系不大,主要看内存,聊天如果不涉及特别复杂的业务的话,应该是属于IO敏感的,而非CPU敏感的。
其实,还是看你聊天的模型,是TCP的还是UDP的,是有状态的还是无状态的,状态是保存在server端还是client端的,这些定了才好说用什么模型更合适。

今晚操你妹 answered 9 years, 2 months ago

Your Answer