我用ACE中间件proactor模式编写了一个服务器程序,该模式本质上用了windows的完成端口收发网络包.但程序在双核(4个线程)操作系统上运行时,只有一个线程忙(占到50%以上),另3个线程比较空闲.如果收发网络包速度更大,其中一个线程可能会占到100%.完成端口应该是可扩展的,底层是多线程服务的,为什么还只有一个线程忙? 请指教!!!!
解决方案 »
- 毕业设计
- 编译通过运行不通过 帮助新手看看
- vc 通过ODBC链接sql数据库
- 用BHO关联IE,当IE重新加载页面完成后通知另一个外部程序,请问用什么方法通知外部程序比较好?
- 我初学VC,请教各位高手——急!!!!
- va_start,va_arg宏为什么到最后要va_end?
- 我从公司用移动硬盘把源代码拷贝回来,公司还用到了Visual Source Safe,我每次打开源程序时都要叫我登录,否则就打不开程序,请问怎么样
- mfc检测到usb设备的拔出和插入,如何添加录音或录像事件
- sift 探讨,求教
- 我听你说----我的第一个贴子,大家捧捧场。
- [调查]你准备转向VC.net吗?
- hr=m_pConnection.CreateInstance(__uuidof(Connection));
──────────────────────
国内专业的ACE网络编程、开发论坛开通:
www.acejoy.com
www.acedevelop.com
涉及ACE使用和开发,中间件、服务器端软件的设计,P2P技术,
socket网络编程、应用开发等内容。
欢迎加入,大家一起交流、学习成长!
//在界面线程中调用
ACE_Asynch_Acceptor<CACEService> m_aceAcceptor;ACE_INET_Addr listen_addr( (u_short)8888);
m_aceAcceptor.open (listen_addr,//建立监听 0, // bytes_to_read
0, // pass_addresses
ACE_DEFAULT_BACKLOG,
1, // reuse_addr
0, // proactor
0);
//在另一个后台线程中调用
ACE_Proactor::instance()->proactor_run_event_loop(); 以后的收发都通过CACEService事例进行。
ACE_Proactor::instance()->proactor_run_event_loop(); 那不是只有一个线程在运行Proactor吗?──────────────────────
国内专业的ACE网络编程、开发论坛开通:
www.acejoy.com
www.acedevelop.com
涉及ACE使用和开发,中间件、服务器端软件的设计,P2P技术,
socket网络编程、应用开发等内容。
欢迎加入,大家一起交流、学习成长!
ACE_Proactor::instance()->proactor_run_event_loop();
只能表明只有一个线程处理从底层收到的网络包,和网络包的收发没有关系。真正的网络收发是完成端口对应的线程池完成的。
哪里来的线程池啊!!!
──────────────────────
国内专业的ACE网络编程、开发论坛开通:
www.acejoy.com
www.acedevelop.com
涉及ACE使用和开发,中间件、服务器端软件的设计,P2P技术,
socket网络编程、应用开发等内容。
欢迎加入,大家一起交流、学习成长!
我也知道这个原则。这个原则是不是一定导致如下结果:
一个cpu占用到达100%,令一个cpu才会被调度。请指点?
因为我写的程序占用某个cpu太高,领导怀疑我写的程序不优化。占用某个cpu过高对cpu也不好。