⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_67006.htm

📁 vc
💻 HTM
字号:
<p>
序号:67006 发表者:leaf99 发表日期:2003-12-28 17:22:30
<br>主题:请教一个TCP服务器与多线程的问题
<br>内容:TCP服务器编写时,对于一个最多大约同时有5000个左右的连接:<BR>如果对一个socket,使用一个线程,是否系统资源耗费过多?线程的频繁切换带来效率的问题。<BR>如果使用select,好像只能最多监视64个文件描述字。而且FD_ISSET好像只能用for循环来查找。<BR>不知有什么方法能比较好的处理这个问题。<BR>系统前期在windows下运行调试,后期将在UNIX系统下运行。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:leaf99 回复日期:2003-12-28 17:45:22
<br>内容:不好意思,select可监视256个。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:BigJames 回复日期:2003-12-29 11:04:43
<br>内容:select可以扩展到1024,甚至更多<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:leaf99 回复日期:2003-12-29 11:39:10
<br>内容:两个问题:<BR>1、如何扩展?<BR>2、如果扩展到1024个或更多。那么是否使用FD_ISSET呢?<BR>那么就是<BR>select<BR>for(i = 0; i &lt; 1024; i++)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (FD_ISSET)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DoSomething();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR>这样如果满了,平均需要查找512次。效率上是否有问题?<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:最后疯狂 回复日期:2003-12-29 13:10:59
<br>内容:服务器只需要一个socket来进行监听,将监听请求队列设得大一点即可:<BR><BR>listen(socket, nMaxLength) ;<BR><BR>对于每一个连接请求,我们需要启动一个线程来为客户服务。在5000个左右的连接中,最好的方法好像只有完成端口了。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:BigJames 回复日期:2003-12-29 13:25:22
<br>内容:扩展的方法是在包含socket文件之前,定义一下FD_SETSIZE<BR>例如#define FD_SETSIZE 1024<BR><BR>问题2:对于C语言来说,for循环512次,不算什么。毕竟我们在写网络程序,瓶颈一般都在数据库操作和网络传输上。<BR>判断还是要用FD_ISSET,和未扩展之前一样。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:leaf99 回复日期:2003-12-29 16:39:03
<br>内容:Windows下应该可以了。不知UNIX下如何做。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:BigJames 回复日期:2003-12-29 17:31:00
<br>内容:需要修改若干个文件,比如fs.h, posix_types.h, limits.h,etc..<BR>我不太清楚,需要到网上搜一下。好像缺省可以支持1024个..
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:leaf99 回复日期:2003-12-30 13:13:31
<br>内容:谢谢bigjames。我看到有一种做法。一个线程监视若干个socket,若干个线程监视所有的socket。这样可能稍微好一些。我会试试扩展select,对两种方法做比较的。谢谢。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -