linux下的TCP/UDP高性能服务器

linux下的TCP/UDP高性能服务器,linux,multithreading,Linux,Multithreading,我想了解使用多线程的高性能服务器程序的一些问题 epoll可以处理TCP套接字监听和套接字连接,我可以在主线程中使用epoll_wait,如果有任何套接字连接提交,程序可以在工作线程中接受连接和recv数据。工作线程之间没有冲突。我说得对吗 udp是一个无连接协议,我们可以在所有工作线程中同时使用recvfrom函数吗?主线程只是使用epoll来通知工作线程接收数据。 (假设我可以单独处理每个UDP数据包) 这是一个UDP服务器。 我设置它与非阻塞插座工作。我在主线程中接收数据并进行处理,然后将

我想了解使用多线程的高性能服务器程序的一些问题

  • epoll可以处理TCP套接字监听和套接字连接,我可以在主线程中使用epoll_wait,如果有任何套接字连接提交,程序可以在工作线程中接受连接和recv数据。工作线程之间没有冲突。我说得对吗

    udp是一个无连接协议,我们可以在所有工作线程中同时使用recvfrom函数吗?主线程只是使用epoll来通知工作线程接收数据。 (假设我可以单独处理每个UDP数据包)

  • 这是一个UDP服务器。 我设置它与非阻塞插座工作。我在主线程中接收数据并进行处理,然后将其发送到任务队列,如果任务队列中有数据,程序将唤醒工作线程并锁定任务队列,然后从任务队列中获取数据,解锁任务队列,以便其他工作线程可以从任务队列中获取任务,然后进行处理

    这是一个好的多线程UDP服务器吗?我不确定。 是否有另一种高性能的UDP服务器设计

    我对这个问题感到困惑,非常感谢


  • 你的基本方法是正确的。从研究这个臭名昭著的问题以及如何克服它开始。一旦了解了各种实现中的主要瓶颈,就需要考虑以下内容作为设计过程的一部分:

    • 最小化线程创建/删除周期
    • 始终选择“基于事件”的模型,而不是阻塞模型
    基本上,每个请求一个线程模型是首选的,因为它实现简单。但是,它不能很好地随并发请求的数量扩展。当设计需要支持超过1000个并发请求的系统时,人们更喜欢使用套接字而不是线程

    要实例化的“工作线程”的最佳数量取决于:

    • 加载(并发请求数)
    • 系统(CPU、RAM)

    由于在实现web服务器设计时这是一个非常常见的问题,您可以通过简单地搜索

    找到一些分析,如,越高越好