- 客户端 socket
- 服务端 socket
- 服务端并发 socket:多进程
- 服务端并发 socket:多线程
- 服务端并发 socket:select
- 服务端并发 socket:kqueue
- 服务端并发 socket:epoll
- 总结
- TCP socket的通信,通信时长看业务逻辑。recv阻塞IO,导致这个socket不处理完,连接不关闭就无法消费队列中的其他连接
- 因为在TCP不拥塞的情况下,假设业务层处理时间已经优化了,那么一个socket的响应时间是确定的。在等待网络IO时计算机资源理论上还可以处理其他连接的,这样就可以提高程序性能的吞吐量
- 多进程和多线程使程序可以同时处理多个socket,提升程序的吞吐量,但是维持这些结构非常费内存,有c10k的限制
- select则可以监听文件描述符集合,当有连接socket可读的时候,程序就可以通过遍历找到socket进行业务处理。没有c10k的限制,但连接太多影响吞吐量的因素就是这个遍历查找时间O(n)
- epoll和kqueue则进行了优化由内核接管了查找过程,通过红黑树提高查找效率O(logn)。用户进程只需可以监听单个文件描述符事件的变化了。极大的提高了程序性能的吞吐量
- 推荐参考文章
socket
Folders and files
Name | Name | Last commit date | ||
---|---|---|---|---|
parent directory.. | ||||