在设计服务器时,我们正在考虑两种方法:
有一些权衡:1具有更好的性能,2有较少的代码复杂度。现在机器运行多核和64位,1真的很重要吗?
发布于 2009-05-07 03:51:42
我建议读这些关于ACE的书。
获取模式的想法,允许您创建一个高效的服务器。
发布于 2009-05-07 03:37:34
我认为应该相反,异步select()方法使代码更简单,因为不涉及线程同步。
您只需将套接字句柄的列表传递到select()函数中即可。它只在一个或多个套接字句柄发生事情时才会阻塞和返回。与使用线程池相反,在线程池中,必须有一个作业分派队列,线程池中的所有线程都从该队列中抓取作业。
异步select()方法的缺点是它不会随着处理器核心的数量而扩展,因为所有的东西都是在一个线程中执行的。
发布于 2009-05-07 04:30:03
如果不了解服务器需求的更多细节,就很难判断哪种方法可以提供更好的性能和/或降低代码复杂性。
有趣的是,在实际的服务器设计中,性能和简单通常是并行不悖的(但简单的设计是很难的)。选择/轮询本身不会自动提供更好的性能。线程池绝对不会降低您的代码复杂性。
回答你的问题:1仍然重要。异步设计不能很好地扩展多进程机器,但只有在服务器在一个进程上运行时才是正确的。如果您的服务器被设计为在多进程计算机上生成多个进程怎么办?不同的进程可以在不同的用户帐户下运行,并且具有不同的安全设置。虚拟机怎么样?每个进程一个线程并不意味着您不能利用多核机器。
但是,我真的不记得上次看到基于异步select()的真正的服务器设计是什么时候了。也许在我上大学的时候,在教科书里,但是没有任何真正的生产系统。
https://stackoverflow.com/questions/832774
复制相似问题