Pthreads 本地多线程服务器:如何简化?
有一个任务-我需要一个具有以下属性的客户端服务器应用程序:Pthreads 本地多线程服务器:如何简化?,pthreads,client-server,epoll,Pthreads,Client Server,Epoll,有一个任务-我需要一个具有以下属性的客户端服务器应用程序: 客户端使用阻塞套接字 服务器是被动的:他接受传入的连接,获取一些数据,对其进行处理并将结果发送回来 服务器有几个线程(主线程除外),从1到大约100个 所有操作都在一台计算机上,即客户端和服务器都使用本地主机 传输数据的最大大小约为1KB 首先,我实现了基于epoll的服务器: 主线程使用epoll执行IO,工作线程执行数据处理 所有服务器套接字都是非阻塞的 服务器有两个队列:主线程放置客户端请求的传入队列和主线程获取回复的传出队
- 客户端使用阻塞套接字
- 服务器是被动的:他接受传入的连接,获取一些数据,对其进行处理并将结果发送回来
- 服务器有几个线程(主线程除外),从1到大约100个
- 所有操作都在一台计算机上,即客户端和服务器都使用本地主机
- 传输数据的最大大小约为1KB
- 主线程使用epoll执行IO,工作线程执行数据处理
- 所有服务器套接字都是非阻塞的
- 服务器有两个队列:主线程放置客户端请求的传入队列和主线程获取回复的传出队列
- 主线程执行epoll_等待、接受和管理连接队列。连接队列是主线程放置已接受连接的队列
- 侦听套接字是非阻塞的。接受的套接字正在阻塞
- 当任何套接字变得可读时,主线程唤醒工作线程,工作线程在阻塞模式下执行recv,在阻塞模式下处理和发送
谢谢你的评论 把多线程的东西扔出窗外。在计算受限之前,不需要涉及多线程。就性能而言,过早地涉及线程是一个净负面影响,并给项目增加了巨大的复杂性。只需在主线程上完成所有工作,并使用epoll多路复用I/O即可。Eric,你是说在IO中使用线程吗?