boost的asio异步调用的疑问(高并发+线程池),该怎么解决

boost的asio异步调用的疑问(高并发+线程池)
看了这篇帖子,我转载的http://blog.csdn.net/herostarone/article/details/7526456

然后基本原封不动的在自己的机器上编译,执行。过程如下:
1.创建N个service_io(根据构造函数可自己设置)
2.拿第一个service_io进行创建accepor,注册回调,进行异步监听。
3.创建N个线程,只做一件事,就是对N个service_io执行service_io.run(),对底层进行监听。

假设一下,一旦有100个客户端同时connect,所以accepor会通过第一个service_io执行100个readsome的回调,当然,readsome也是异步的。然后就停止了。因为客户端仅仅是connect,并没有write数据。

此时又有100个客户端同时connect,同样也是仅仅connect,没有write。

A,假设N=1,那么accepor和所有的socket都link在一个service_io上,那么一旦任何的客户端write,而自己的机器又读取完,因为service_io一直在run,所以会从队列取出这个消息,然后找相应的回调函数执行。
B,假设N=50,那么accepor和所有的socket是以此获取50个service_io中一个,然后50个线程执行run等待底层信号,一旦有一个客户端write,那么也会调用相应的回调函数。

问题是:N=1和50有何区别,感觉N=1就可以吧,因为只需要一个N个service_io监控所有的异步调用结果,反正异步执行一旦完毕,会把消息放队列,然后run就会取,进而执行回调,开50个是不是没用啊,而且线程间切换还费时间,有必要吗?




------解决方案--------------------
一般创建多个是为了侦听不同的端口. 看你的需求了.
------解决方案--------------------
boost::aiso的相关问题,可以去哪里讨论啊?感觉用户很少,没有几个人讨论啊
------解决方案--------------------
尤其是,我现在觉得aiso异步的效率非常低啊
1,必须把数据拷贝到队列里,否则数据不知道跑哪儿去了
2,必须等一次async_write完成了,才能在handler里再发一次async_write,这非常慢啊
------解决方案--------------------
可以尝试下zeromq,速度超快
------解决方案--------------------
你的数据拷贝了吗?
我现在做法是:客户类调用Send,我new一块缓冲区,把数据拷近来,挂在队列里。
一个线程在不断的在读队列,如果读到了,就async_write发出去,在write_handler里再读队列,如果队列有数据,再调用async_write,如此循环...
------解决方案--------------------
不能在read_handler里啊
因为要一直推送数据给客户段啊