写在前面,主要是作学习+回顾笔记,以备后续面试
LogEvent
组成:
- 日志级别(level)
- 日期+时间(精确到ms)
- 进程号pid,线程号threadid
- 文件名file_name、行号line
- 自定义msg
输出格式如:[level]\t[%y-%m-%d %H:%M:%S.%ms]\t[pid:thread_id]\t[file_name:line]\t[msg]
LogLevel
DEBUG(调试日志)
INFO(通知日志)
ERROR(错误日志)
Reactor模式是一种用于处理并发事件的设计模式,广泛应用于网络服务器和异步I/O操作中。它允许在单线程环境中高效地管理多个事件源,如网络连接、定时器和用户输入。Reactor模式的核心思想是通过一个事件循环不断监听事件源,并在事件发生时调用相应的处理程序。
Reactor模式的核心组件
核心是一个loop循环,在循环里不断调用epoll_wait监听接字IO事件。发生IO,epoll_wait返回,线程转而去处理IO事件,处理完重新回到epoll_wait,不断循环。
- 事件循环(Event Loop):持续运行的循环,负责检测事件并分发给相应的处理程序。
- 事件分离器(Event Demultiplexer):通常是操作系统提供的机制,如
select
、poll
、epoll
等,用于监视多个事件源。 - 事件处理程序(Event Handler):包含处理特定事件的逻辑。每个事件源都有一个对应的事件处理程序。
- 事件源(Event Source):可以产生事件的对象,如网络连接、文件描述符或定时器。
工作流程
- 注册事件:将事件源及其对应的事件处理程序注册到事件分离器中。
- 事件等待:事件循环调用事件分离器,等待事件发生。
- 事件分发:事件分离器检测到事件发生后,通知事件循环。
- 事件处理:事件循环调用相应的事件处理程序,处理事件。