当前位置: 技术问答>linux和unix
********************使用io复用好还是多线程的性能好?**************************
来源: 互联网 发布时间:2015-03-20
本文导语: 做一个并发网络服务器。大概并发客户数目在2000以上。现请问 这个网络服务器是使用io 复用(select)处理客户请求好,还是给每个客户分配一个处理线程性能更好? 另外,Linux进程最大线程数和最大能打开的文件描...
做一个并发网络服务器。大概并发客户数目在2000以上。现请问
这个网络服务器是使用io 复用(select)处理客户请求好,还是给每个客户分配一个处理线程性能更好?
另外,Linux进程最大线程数和最大能打开的文件描述符数如何进行修改?
套节口select最大支持多少个套节口句柄而不影响性能?
请有经验的多多指点。没有经验的请不要误导在下。
这个网络服务器是使用io 复用(select)处理客户请求好,还是给每个客户分配一个处理线程性能更好?
另外,Linux进程最大线程数和最大能打开的文件描述符数如何进行修改?
套节口select最大支持多少个套节口句柄而不影响性能?
请有经验的多多指点。没有经验的请不要误导在下。
|
如果你是但cpu且进行请求操作时没有阻塞调用(包括写盘),用select
其他建议用多线程或多进程,使用多线程不是滥用多线程!!!
还可以将两者结合,用io 复用(select)接受数据,交由某个线程进行相应的处理和相应
其他建议用多线程或多进程,使用多线程不是滥用多线程!!!
还可以将两者结合,用io 复用(select)接受数据,交由某个线程进行相应的处理和相应
|
我想说明的一点是数据库应该不会考虑支持如此多的连接
数据库也是文件系统
我觉得数据库这一部分,应该采取连接次的办法来开发
数据库也是文件系统
我觉得数据库这一部分,应该采取连接次的办法来开发
|
IO复用如果fd多于1000个的话 可以考虑用epoll的patch
|
个人感觉哦,应该是IO多路转接加非阻塞IO+工作线程。
工作线程和侦听线程分开为多个进程里。(用线程的话,考虑到安全性和稳定性,要和守护进程分开。)
通过描述字传递来完成它们之间的通信。
工作线程和侦听线程分开为多个进程里。(用线程的话,考虑到安全性和稳定性,要和守护进程分开。)
通过描述字传递来完成它们之间的通信。
|
并发数到2000的时候很多事情都很难说了,
我还没有见过单台oracle的并发连接数超过500
给个建议,你可以试试装个apache做压力测
试看看并发连接数到2000左右的时候,系统的
负荷情况。
我还没有见过单台oracle的并发连接数超过500
给个建议,你可以试试装个apache做压力测
试看看并发连接数到2000左右的时候,系统的
负荷情况。
|
一个现实的多进程服务器是BBS系统,一塌糊涂BBS用dual PIII 866 + 4G内存支持了接近9千
的在线用户,一般来说load峰值不超过3,平均保持在1上下,用的是多进程。但是我觉得如
果用epoll的patch,改用单进程的IO,性能会更好。
的在线用户,一般来说load峰值不超过3,平均保持在1上下,用的是多进程。但是我觉得如
果用epoll的patch,改用单进程的IO,性能会更好。
|
poll的问题在于它的算法复杂度是n,就是说每次都要从n个描述符中选出一个,而请求
也是n,所以总的开销相对于连结数成n^2增长,但是epoll的复杂度还是n。
也是n,所以总的开销相对于连结数成n^2增长,但是epoll的复杂度还是n。