1.select模式的socket编程(非阻塞模式)
select在接到一个网络事件响应以后得到响应的套接字(线程A中),然后把它交给线程池处理(这个时间是很短的,要不一个线程怎么能同时处理几十个套接字的网络事件)。
线程池中处理该响应需要时间,这时线程A只要把任务交给线程池就会马上返回去再次执行select(线程中循环执行select,来得到网格事件),也许这个时候线程池也许还没有处理完上次线程A交给它的任务,这时线程A在调用select时发现网络事件发生(可能跟上次是同一个事件,因为线程池还没有将上次的事件处理完,它还是存在套接字的那个缓存中),这种情况该怎么处理解决
2.如何确定一个客户端已经与服务器断开(有没有断开的事件),是判断接收数据时返回来的值为-1吗?还是要怎么处理
3.在线程池中如果规定最大线程数100,每个任务时间最少1秒钟(100个任务1秒钟处理完成),现在有3个线程A、B、C每平均1秒钟最少要提交200个任务(线程池只有100个线程,即最少2秒钟才能处理完),而池中没有这么多空闲线程,一般这种情况怎么解决,是把任务放到队列中执行吗
回答以上三个问题,并且方法比较好的,小北另再送上100分,如果只是想接分的请不要回复
select在接到一个网络事件响应以后得到响应的套接字(线程A中),然后把它交给线程池处理(这个时间是很短的,要不一个线程怎么能同时处理几十个套接字的网络事件)。
线程池中处理该响应需要时间,这时线程A只要把任务交给线程池就会马上返回去再次执行select(线程中循环执行select,来得到网格事件),也许这个时候线程池也许还没有处理完上次线程A交给它的任务,这时线程A在调用select时发现网络事件发生(可能跟上次是同一个事件,因为线程池还没有将上次的事件处理完,它还是存在套接字的那个缓存中),这种情况该怎么处理解决
2.如何确定一个客户端已经与服务器断开(有没有断开的事件),是判断接收数据时返回来的值为-1吗?还是要怎么处理
3.在线程池中如果规定最大线程数100,每个任务时间最少1秒钟(100个任务1秒钟处理完成),现在有3个线程A、B、C每平均1秒钟最少要提交200个任务(线程池只有100个线程,即最少2秒钟才能处理完),而池中没有这么多空闲线程,一般这种情况怎么解决,是把任务放到队列中执行吗
回答以上三个问题,并且方法比较好的,小北另再送上100分,如果只是想接分的请不要回复
解决方案 »
- 如何在mfc中播放ppt
- 我想在计算机一开机就运行一个程序,当这个程序等到某个事件后,就弹出一个对话框。我应该采用哪种项目(Wind32 application、win32 cons
- 32*32的图标怎么变成16*16的图标啊??是不要要用工具转换呢?要用什么工具啊??
- 在基于对话框的界面上如何假如另外的对话框,Docking效果的
- 关于CFileDialog的一个迷惑
- 怎样让程序自杀的?
- 请教高手:我做好了一个DCOM服务器,我想做一个ACTIVEX控件,其中调用DCOM的接口,可以做到吗?
- 请问MFC是如何处理new和delete的?有代码,进来详谈!
- 急问:关于分别用vb/vc开发程序然后打包成一个setup发送可以吗?
- 请问这个软件叫什么名字啊
- 新手问题:在工程里增加一个类
- vc udp 服务器 怎样转发数据
2.注册断线消息,在windows当中即使异常断开也会有断线消息,只是响应时间较长
3.这说明业务处理能力不足,如果机器仍然有可用资源,可以增大线程池的大小,否则说明该机器已经饱和工作,如果要处理更多的业务,应该采用其它方式进行扩展,然后增加硬件设备和提升设备性能等。
双如closeshock(sock)这样的,有没有事件发生
每次将select中的事件全部拷贝出来,等里面全部的事件都处理完了,再取下一次的事件组
2.如何确定一个客户端已经与服务器断开(有没有断开的事件),是判断接收数据时返回来的值为-1吗?还是要怎么处理
可以定时发送环回帧来检测,也就是类似与心跳包,受到响应就认为链接上,多次无法响应就认为断开。
3.在线程池中如果规定最大线程数100,每个任务时间最少1秒钟(100个任务1秒钟处理完成),现在有3个线程A、B、C每平均1秒钟最少要提交 200个任务(线程池只有100个线程,即最少2秒钟才能处理完),而池中没有这么多空闲线程,一般这种情况怎么解决,是把任务放到队列中执行吗
放到队列中
2,TCP等面向链接协议协议处理了这问题。对于 UDP 之类的非链接协议根据需求来做,最多设定间隔使用心跳包(KEEPALIVE)。
3,线程池当然要配套任务队列,不然偶还能叫线程池么另外 lz 可以去了解 WSAGetLastError() 得到的信息,这对掌握 socket 状态很有帮助
1.如果使用标识,每次都得去判断一下这个标识处于什么状态,当要进入select函数时是不是先判断一个套接是处于什么状态再将它放到fd_set结构中去处理吗?这样我感觉出错率比较大,并且可能有很多事件、包会接收不到
2.如果要判断一个套接是否有未决IO,如果有就不进入下一次监听,这样我感觉更有丢包的可能性