当前位置:  技术问答>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.任务到来后我如何为它分配空闲线程呢?

|
楼主是要做udp的还是tcp的,udp的可以使用一个单独的线程接收数据,然后将数据存放到缓冲区中,其他线程去检测缓冲区拿自己处理的数据,tcp的话可以在生成多个线程,使用这些子线程accept连接,如果收到数据则进行相关处理。

|
首先明确一点,要用select模型或epoll模型,因为是编写服务器,所以要启动两个进程
父进程来负责监控子进程的状态,如果子进程退出则再创建一个子进程
子进程可以初始化1024个socket
子进程用select函数监听,给每个用户分配句柄(socket)
在初始化五个线程,轮番(可以0.1秒)取socket,进行处理
大概就这个思路

|
可以开一个线程监听,如果收到RECV 就开启一个线程,如果你用默认的线程模式,创见过多的线程之后,会系统崩溃,可是在线程里面有个设置,就是一个线程结束后,线程自动退出,这样就等于实现了N个线程,

|
RECV是阻塞的,所以你收到一个包就开个线程去处理包,然后接着收

while(true)
{
recv(bag);//收到数据包
  createthread(bag);//开线程去处理收到的包,
}

    
 
 

您可能感兴趣的文章:

  • 线程间可否通过管道传递SOCKET句柄?还有其他方式传递SOCKET么?
  • 如果两个线程操作同一个Socket,一个线程recv,另一个send。这样会不会导致程序莫名其妙的退出
  • 多线程socket申请有无可能产生冲突?
  • socket 多线程编程
  • 多线程和socket结合
  • 请教:多线程使用同一个socket进行数据收发会出现什么问题?
  • socket实现多文件并发传输,求助多线程实现问题?
  • 请问关于多线程SOCKET的问题
  • 多线程socket程序莫名其妙接收到SIGALRM信号问题。
  • 多线程中socket的问题
  • socket read阻塞:一个线程关闭另一个线程错误
  • 请问关于socket客户端因事件启动新线程的问题.高手请进
  • 一个关于socket线程池问题
  • 多线程close() socket套接字的问题
  • socket+多进程+多线程
  • 请问可以在一个Servlet里使用多线程和SOCKET吗?
  • 关于linux下多线程socket通讯的问题
  • Unix domain socket可用于同一个进程中的不同线程么?
  • 多余SOCKET服务器来说,用哪种线程安全锁性能最高?
  • 如何在主进程共享子线程中accept得到的socket号?
  • socket编程,服务器会用bind()绑定端口,而客户端不用绑定端口就可以调用connect()。那么客户端的端口时系统自己分配的么?是何时绑定的?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?
  • java命名空间java.net类socket的类成员方法: gettrafficclass定义及介绍
  • socket编程 通过man socket, 没有找到socket函数的第一参数该填什么 怎样利用man手册
  • java命名空间java.net类socket的类成员方法: getport定义及介绍
  • [FreeBSD] 大神,求解,control socket : can‘t to any socket
  • java命名空间java.net类socket的类成员方法: getlocalport定义及介绍
  • 两个 Socket 互相通信,其中一个如何判断另一个 Socket 是否已经意外断开了连接?
  • java命名空间java.net类socket的类成员方法: getinetaddress定义及介绍
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!
  • java命名空间java.net类socket的类成员方法: isconnected定义及介绍
  • 我的ping程序怎么老是出现Socket operation on non-socket


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3