陈老哥-源码分析-1

https://github.com/chenshuo/muduo

int main(int argc, char* argv[])
{
  int numThreads = 0;
  if (argc > 1)
  {
    benchmark = true;
    Logger::setLogLevel(Logger::WARN);
    numThreads = atoi(argv[1]);
  }
  EventLoop loop;
  HttpServer server(&loop, InetAddress(8000), "dummy");
  server.setHttpCallback(onRequest);
  server.setThreadNum(numThreads);
  server.start();
  loop.loop();
}

对于one thread one loop而言,上面的所有操作无非是将socketfd的Channel加入EPollPoller::channels_中,以及将socketfd加入epoll监听集合中;

EventLoop::loop()作用是,EPollPoller 类的poll 函数会收集所有发生事件的socketfd 的Channel存于activeChannels_ 中,因为每一个socketfd 在对应的Channel 中会设置读/写/及错误发生时候的回调函数的;接着遍历收集到的activeChannels_ , 并执行每一个Channel 的handleEvent 进而去调用设置的回调函数;当别的类想异步执行某个函数时候只需要调用EventLoop::runInLoop(const Functor& cb)该函数里面会判断如果执行该函数的线程与主线程不同则利用往evtfd 中写个字符触发epoll , 继而doPendingFunctors();得到执行了,即会执行上层注册的函数cb。


PollPoller.h

// Copyright 2010, Shuo Chen.  All rights reserved.
// http://code.google.com/p/muduo/
//
// Use of this source code is governed by a BSD-style license
// that can be found in the License file.


// Author: Shuo Chen (chenshuo at chenshuo dot com)
//
// This is an internal header file, you should not include this.


#ifndef MUDUO_NET_POLLER_H
#define MUDUO_NET_POLLER_H


#include <vector>
#include <boost/noncopyable.hpp>


#include <muduo/base/Timestamp.h>
#include <muduo/net/EventLoop.h>


namespace muduo
{
namespace net
{


class Channel;


///
/// Base class for IO Multiplexing
///
/// This class doesn't own the Channel objects.
class Poller : boost::noncopyable
{
 public:
  typedef std::vector<Channel*> ChannelList;


  Poller(EventLoop* loop);
  virtual ~Poller();


  /// Polls the I/O events.
  /// Must be called in the loop thread.
  virtual Timestamp poll(int timeoutMs, ChannelList* activeChannels) = 0;


  /// Changes the interested I/O events.
  /// Must be called in the loop thread.
  virtual void updateChannel(Channel* channel) = 0;


  /// Remove the channel, when it destructs.
  /// Must be called in the loop thread.
  virtual void removeChannel(Channel* channel) = 0;


  static Poller* newDefaultPoller(EventLoop* loop);


  void assertInLoopThread()
  {
    ownerLoop_->assertInLoopThread();
  }


 private:
  EventLoop* ownerLoop_;
};


}
}
#endif  // MUDUO_NET_POLLER_H

需要弄清楚下面几个类:

class Channel;              /*一个fd,对应一个Channel,该Channel中会给fd注册读、写、错误发生时候的处理函数的*/

boost::noncopyable     /*在子类没有重写拷贝构造和赋值重载时候,子类对象是不允许进行赋值或者调用子类拷贝构造的*/

EventLoop                    /*无限循环中当epoll_wait()返回时候,将所有的Channel收集并存于activeChannels_中,接着就是执行activeChannels_中的每个Channel->handleEvent(),而改函数中会调用该Channel类对象的函数即给fd注册读、写、错误发生的处理函数*/

Timestamp                 /*利用微秒获得时间的*/



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 数据库MySQL OCP 8.0 1Z0-908题库是针对MySQL数据库的认证考试的相关题库。MySQL是一种开源的关系型数据库管理系统,OCP 8.0是指MySQL的最新版本,1Z0-908则是该版本的认证考试代码。 这个题库包含了考试中可能遇到的各种题目,涵盖了MySQL数据库的各个方面,包括数据库的基本原理、SQL编程语言、索引、事务管理、备份与恢复等等。 通过学习这个题库,可以增强对MySQL数据库的理解和应用能力。掌握MySQL数据库的基本原理可以帮助我们了解数据库管理系统的工作原理,进而能够更好地进行数据库设计和管理。 同时,学习SQL编程语言可以帮助我们掌握MySQL数据库的增删改查等基本操作,以及高级的查询和数据处理技巧。 此外,掌握索引的原理和使用方法可以提高查询的效率,事务管理的学习可以帮助我们保证数据的一致性和完整性,备份与恢复的学习可以帮助我们保护数据免受损失。 总而言之,通过学习数据库MySQL OCP 8.0 1Z0-908题库,可以全面提升对MySQL数据库的掌握程度,为日后的数据库开发和管理工作打下坚实的基础。 ### 回答2: 很高兴能回答关于数据库MySQL OCP 8.0 1Z0-908题库的问题。 首先,MySQL OCP 8.0 1Z0-908题库是MySQL数据库相关的认证考试,旨在评估考生在MySQL数据库开发方面的专业能力和知识水平。 这个题库涵盖了广泛的MySQL数据库知识,包括SQL语法、数据库管理、数据查询、数据操作、性能优化等方面的内容。考生需要通过这些题目来展示他们对MySQL数据库的理解能力和实践经验。考试内容丰富多样,从基础知识到高级技术都有涉及。 通过准备MySQL OCP 8.0 1Z0-908题库,考生可以更好地掌握MySQL数据库的相关知识,并具备一定的实践能力。这对于那些在数据库开发、数据管理、数据分析等领域工作的人来说尤为重要。 此外,MySQL数据库广泛应用于各行各业,包括互联网、电商、金融、医疗等各个领域,因此具备MySQL OCP 8.0 1Z0-908认证的考生,在职业发展中将具备更强的竞争力。 总结起来,MySQL OCP 8.0 1Z0-908题库是提升个人职业素质和专业能力的一个重要途径。我们可以通过系统地学习和准备这个题库,进一步提高对MySQL数据库的理解和应用能力,为自己的职业发展打下坚实的基础。 ### 回答3: 老哥,你好!关于数据库MySQL OCP 8.0 1Z0-908题库的问题,我来给你详细解答。 MySQL OCP 8.0 1Z0-908题库是一套关于MySQL数据库的认证题库,专门针对MySQL 8.0版本的OCP考试。这套题库包含了一系列问题和练习,旨在测试考生对MySQL数据库的理解和应用能力。 在MySQL OCP 8.0 1Z0-908题库中,你将接触到各种与MySQL数据库有关的主题,包括数据库设计、表的创建、数据类型的选择、查询语句的优化、索引的使用、事务处理、存储过程、触发器等等。这些问题旨在考验你对MySQL数据库各个方面的了解和运用能力。 通过参与MySQL OCP 8.0 1Z0-908题库的学习和练习,你可以提升你的MySQL数据库技能,更好地理解和应用MySQL数据库,进而在OCP考试中取得好的成绩。这套题库可以帮助你检验你的学习成果,让你更加熟悉MySQL数据库的各种特性和操作。 总之,MySQL OCP 8.0 1Z0-908题库是一套有针对性的MySQL数据库认证题库,通过参与这套题库的学习和练习,可以加深对MySQL数据库的理解和应用技能。希望这个回答对你有帮助,如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值