目录
1、回顾
Channel、Poller、EPollPoller、EventLoop相当于Reactor模型中的Reactor反应堆和Demultiplex事件分发器
Thread、EventLoopThread、EventLoopThreadPool:如果只有baseloop的话,这个线程既要负责处理连接请求,还要处理读写事件,效率低,所以muduo库是采用Mutiple Reactors,可以通过setthreadnum设置底层线程的数量(设置的是subloop工作线程的数量)。
以上部分已完成。
2、Acceptor
现在我们看Acceptor
Acceptor就是处理accept,监听新用户的连接,拿到跟客户端通信的clientfd,打包成channel,根据muduo的轮询算法找一个subloop,把subloop唤醒(每一个loop都有一个由系统API eventfd创建的wakeupfd(带有线程间通知notify机制的fd),在subloop的poller中监听的,mainloop通过给wakeupfd写一个整数去唤醒subloop),把接收的channel给subloop。
我们打开TCPServer,处理一下Acceptor,
Acceptor运行在我们的baseloop(mainreactor)里面
2.1 Socket封装fd
Acceptor对socket类进行了封装,先来看一下socket
2.1.1 Socket.h
#pragma once
#include "noncopyable.h"
class InetAddress;
//封装socket fd
class Socket:noncopyable
{
public:
explicit Socket(int sockfd)
:sockfd_(sockfd)
{}