分类 编程.网络编程 中的文章

CCnet | 单线程reactor演变为多线程

ccnet从单线程演变为多线程

ccnet现状:

  • epoll
  • linux平台
  • 事件循环
  • 单线程
  • reactor
  • 监听和新连接的事件都在主线程中

单线程的ccnet

98fb4a422ca29f30211176d1b81489fd.png
ccnet的单线程的角色:

  • EventLoop: 整个事件循环。
  • EPollPoller: 负责事件的收集。
  • Channel:负责事件的分发。
  • Acceptor:处理客户端新连接,绑定监听回调时间。
  • TcpConnection: 包含EventLoop组件,Channel组件,接收缓冲区和发送缓冲区,负责数据的收发。
  • TcpServer:包含EventLoop组件,Acceptor组件,客户端连接map,还有回调接口
  • Buffer: 缓冲区

*ccnet的单线程模型只是对epoll进行了封装,然后根据reactor模型在代码上进行了组件的区分,但是整体操作还是单线程,不能充分利用硬件资源。TcpServer的回调函数中,数据接收和业务处理在同一条线程中。

……

阅读全文

五种网络IO模型总结

概述

在网络上看到很多关于阻塞IO、非阻塞IO、同步IO、异步IO的例子,总觉得写的过于复杂并且让人难以理解。于是我把我自己把这几个概念的理解写下来以供参考。

POSIX

POSIX(可移植操作系统接口)把同步IO操作定义为导致进程阻塞直到IO完成的操作,反之则是异步IO

……

阅读全文

CCnet | 一个reactor单线程网络库

缘由

最近在研究陈硕的网络库muduo,是一个基于reactor架构的网络库。我对网络库的感觉是易用,但是内容庞大,依赖颇多。比如boost网络库里面的一些语法让人生畏。关于reactor和proactor架构,还有select/poll/epoll网络模型方面的基础理论知识已经掌握,自己也一直想做一个网络库来对自己之前工作的一个总结。muduo整体代码量不多,易读,整个架构也容易理解,于是我模仿muduo写了一个单线程的reactor网络库。

……

阅读全文

TCP/IP | 大量TIME_WAIT对线上业务的影响

TCP的三次握手和四次挥手

8bdf9b9537f30646bf95dafe476884b2.png

TIME_WAIT概述

TIME_WAIT 状态:

  • TCP 连接中,主动关闭连接的一方出现的状态;(收到 FIN 命令,进入 TIME_WAIT 状态,并返回 ACK 命令)
  • 保持 2 个 MSL
    时间,即,4 分钟 ;(MSL 为 2 分钟)

TCP 连接建立后,「主动关闭连接」的一端,收到对方的 FIN 请求后,发送 ACK 响应,会处于 time_wait 状态;

……

阅读全文