Linux_网络编程_9.线程池_03线程池小节

线程池小节



Ⅰ. 线程池的数据结构


  1. 任务队列 Que_t

  2. 条件变量 pthread_cond_t

  3. 互斥锁 pthread_mutex_t

  4. 启动状态startFlag

  5. 线程ID

  6. 线程数量




Ⅱ. 线程池的流程


1. 主线程

① 初始化线程池init

  • 初始化队列:头尾指针
  • 初始化队列锁
  • 初始化条件变量
  • 申请空间用来保存线程ID
  • 启动状态为0

② 启动线程池

  • 循环创建子进程
  • 启动状态为1

③ tcpInit,监听端口,等待客户端连接,客户端连接后,得到newFd,创建队列的节点,保存newFd,把节点放到队列中,用 pthread_cond_signal 通知子线程



2. 子线程

① 加锁,判断队列是否为空,如果为空,cond_wait 等待主线程唤醒

② 如果队列非空,去队列中拿出头指针指向的节点,得到newFd,解锁,给客户端传输文件,释放节点




Ⅲ. 线程池和进程池的对比


进程池:

  • 优点:进程启动速度慢,进程间资源互相独立,一个进程崩溃不会影响其他进程

  • 缺点 :资源不共享,进程间切换速度慢,进程间通信开销大

线程池:

  • 优点:线程间切换开销小,线程共享同一进程的数据,通信方便

  • 缺点 :不利于管理,一个线程崩溃会导致整个进程结束

你可能感兴趣的:(LInux,网络编程,多线程,网络接口,socket)