当前位置: 技术问答>linux和unix
socket通讯时如何为线程池分配Recv任务?
来源: 互联网 发布时间:2016-03-18
本文导语: 在socket通讯中,在Server端为recv单启一个线程很好做。 void * revcThreadFun(void* args) { while(true) { recv(...); } } pthread_t pt; pthread_create(&pt, NULL, revcThreadFun, NULL); 但是,我想不明白的是,先启动一个线程池...
在socket通讯中,在Server端为recv单启一个线程很好做。
void * revcThreadFun(void* args)
{
while(true)
{
recv(...);
}
}
pthread_t pt;
pthread_create(&pt, NULL, revcThreadFun, NULL);
但是,我想不明白的是,先启动一个线程池,为recv任务分配线程呢?
我理解的线程池是,来一个recv任务,就为它分配一个线程。
但问题在于:
1.我如何判断有新的recv任务到来?
2.任务到来后我如何为它分配空闲线程呢?
void * revcThreadFun(void* args)
{
while(true)
{
recv(...);
}
}
pthread_t pt;
pthread_create(&pt, NULL, revcThreadFun, NULL);
但是,我想不明白的是,先启动一个线程池,为recv任务分配线程呢?
我理解的线程池是,来一个recv任务,就为它分配一个线程。
但问题在于:
1.我如何判断有新的recv任务到来?
2.任务到来后我如何为它分配空闲线程呢?
|
楼主是要做udp的还是tcp的,udp的可以使用一个单独的线程接收数据,然后将数据存放到缓冲区中,其他线程去检测缓冲区拿自己处理的数据,tcp的话可以在生成多个线程,使用这些子线程accept连接,如果收到数据则进行相关处理。
|
首先明确一点,要用select模型或epoll模型,因为是编写服务器,所以要启动两个进程
父进程来负责监控子进程的状态,如果子进程退出则再创建一个子进程
子进程可以初始化1024个socket
子进程用select函数监听,给每个用户分配句柄(socket)
在初始化五个线程,轮番(可以0.1秒)取socket,进行处理
大概就这个思路
父进程来负责监控子进程的状态,如果子进程退出则再创建一个子进程
子进程可以初始化1024个socket
子进程用select函数监听,给每个用户分配句柄(socket)
在初始化五个线程,轮番(可以0.1秒)取socket,进行处理
大概就这个思路
|
可以开一个线程监听,如果收到RECV 就开启一个线程,如果你用默认的线程模式,创见过多的线程之后,会系统崩溃,可是在线程里面有个设置,就是一个线程结束后,线程自动退出,这样就等于实现了N个线程,
|
RECV是阻塞的,所以你收到一个包就开个线程去处理包,然后接着收
while(true)
{
recv(bag);//收到数据包
createthread(bag);//开线程去处理收到的包,
}
while(true)
{
recv(bag);//收到数据包
createthread(bag);//开线程去处理收到的包,
}