
开源项目阅读
文章平均质量分 85
saddlesad
这个作者很懒,什么都没留下…
展开
-
brpc源码分析——线程模型
brpc线程模型从一个server的启动过程谈起,我们这里以echo server为例:int main(int argc, char* argv[]) { // gflags介绍:https://blog.youkuaiyun.com/lezardfu/article/details/23753741 // Parse gflags. We recommend you to use gflags as well. GFLAGS_NS::ParseCommandLineFlags(&原创 2022-03-14 16:27:42 · 3386 阅读 · 0 评论 -
brpc源码分析——数据报处理过程
brpc数据包处理过程前面我们提到brpc会在Server::Start中将listened_fd加入众多EventDispatcher之一,让epoll监听其EPOLLIN事件,我们将从listened_fd的可读事件触发来讲解一个数据包如何被接收 + 处理 + 响应。OnNewConnections我们知道Socket::ProcessEvent会调用listened_fd的回调事件:s->_on_edge_triggered_events,此回调函数在Acceptor::StartAcc原创 2022-03-14 16:27:17 · 824 阅读 · 0 评论 -
Seastar源码阅读(三)future
Seastar futurepromise with future一个future对象必须绑定在一个promise对象上,当promise::set_value()被调用时,该future对象变为就绪态。我们以一个future的常见用途为起点分析:template <typename Clock = steady_clock_type, typename Rep, typename Period>future<> sleep(std::chrono::duration<原创 2022-01-28 20:48:31 · 956 阅读 · 0 评论 -
Seastar源码阅读(二)—事件循环
Seastar事件循环reactor::do_runSeastar应用中的每个线程都会调用reactor::do_run()函数,进入事件循环,do_run()函数主要做以下工作:注册各种poller,它们被保存在_pollers数据结构(std::vector<pollfn*>类型)中。异步future等待网络栈启动,当所有线程的网络栈都启动后reactor正式启动(_start_promise.set_value())。设置空闲时间检测定时器load_timer,当CPU足够空闲原创 2022-01-24 10:04:11 · 756 阅读 · 0 评论 -
Seastar Tutorial 简明教程
这是对于Seastar官方tutorial的部分翻译,同时也结合了自己的思考。IntroductionSeastar是一个用于在现代多核机器上编写高性能的复杂的服务端应用的C++库。Seastar是一个完整的异步编程框架,使用futures和continuations两个概念来抽象对于I/O事件的处理。因为现代处理器核心共享数据会带来很多惩罚,所以Seastor想要避免多个核心共享内存,而用消息传递机制取代之。Since modern multi-core and multi-socket ma原创 2022-01-23 12:13:52 · 1859 阅读 · 0 评论 -
levelDB布隆过滤器实现分析
levelDB布隆过滤器实现布隆过滤器是这样一个数据结构,它可以用来判断某些元素是否可能已存在(于下一层的存储介质中);它可能把不存在的元素误认为已存在,但不会把已存在的元素误认为不存在。所以如果布隆过滤器认为一个元素不存在,那么它就真的不存在,如果它认为一个元素已存在,那么它只是可能存在。原理布隆过滤器的底层是一个位数组结构。每次add一个元素,布隆过滤器都将使用k个哈希函数对此元素分别计算得到k个哈希值,哈希值模位数组长度的结果对应位数组中一个位置,然后布隆过滤器将这k个位置都置为1.每次fi原创 2022-01-16 10:40:46 · 393 阅读 · 0 评论 -
云风coroutine库源码分析
项目介绍-coroutine云凤写过一个简易协程库,介绍如下:It’s an asymmetric coroutine library (like lua).You can use coroutine_open to open a schedule first, and then create coroutine in that schedule.You should call coroutine_resume in the thread that you call coroutine_open,原创 2021-11-30 20:39:39 · 345 阅读 · 0 评论