我想收到socket数据后在线程池里做一些业务处理,问题来了:
1. QueueUserWorkItem不是自动启动线程池么,那么应该放在select之后还是recv之后?
2. 如果是在recv之后,是不是还要把socket id和数据作为参数传递一下?
3. 使用QueueUserWorkItem之前需要创建IO完成端口吗? 看了几个例子, 还有点糊涂, 请高手指点.
1. QueueUserWorkItem不是自动启动线程池么,那么应该放在select之后还是recv之后?
2. 如果是在recv之后,是不是还要把socket id和数据作为参数传递一下?
3. 使用QueueUserWorkItem之前需要创建IO完成端口吗? 看了几个例子, 还有点糊涂, 请高手指点.
MS那个线程池过于简陋,而且服务器一般不用select io这种处理模型。
啊, 以前的项目可都是用select, 一般情况下够用了, 不过是在linux下做的, Windows的线程池怎么做比较好?
具体参数参考 MSDN
只是一个异步操作,跟完成端口或select/recv没有关系,把这两个问题分开看
这里我使用了一种三层消息队列+“V”型通信规则对线程进行管理的。三层队列:
1.发送消息队列
2.响应消息队列
3.保留消息队列“V”型通信规则是说
如果T1想与T2进行消息交互那么T1->Service->T2反之T2->Service->T1对于线程安全队列windows下R3自带FIFO队列
如果想使用更复杂的队列管理方式自能自行解决。