包含标签 seastar 中的文章

Seastar 之 ready_future(3)

1 什么是 ready_future

如果一个 future 在当下就已经有结果了,不必等到未来某个时刻, 我们把这个 future 称为 ready_future

ready_future 的不同之处在于:

(1) ready_future 可以单独使用,不必关联一个promise;
(2) ready_future.then(lambda) 会把传入的lambda立即执行掉, 也就是说这个lambda没有机会放入任务队列;
(3) 而not_ready_future每次执行,产生的新任务都会被放入任务队列,然后依此取出来执行。

……

阅读全文

Seastar 之核间通信 (2)

1 0核和任一个核通信

Seastar 使用 eventfd 进行核间(线程间)通信,因为每个线程使用内核API sched_set_affinity(),绑定一个 SMP 的 core,所以我们这里称之为核间通信

Seastar 创建了一个 N*N 的 event_fd 矩阵,每个单元格上两个event_fd,每一行event_fds由一个线程(Core)管理。
也就是说每个线程的 epoll 上,一共需要侦听 2N 个 event_fd。

示意图如下:

f-p-inter-code-communication

……

阅读全文

Seastar 之 future/promise 原理(1)

The future is the value, the promise is the function that sets the value – essentially the return value (future) of an asynchronous function (promise). Setting the value of a future is also called resolving, fulfilling, or binding it. —— from Wikipedia 1 Preface Seastar (f-p-c) 属于Reactive编程的一个子集。 Seastar的性能源自 sharded,cooperative,non-blocking的微任务调度设计, 而 f-p-c 是将 task 送入调度程序的一种更友好的方式。 Seastar 引入了 future/promise, 把面向 callback 编程变成了面向future/promise编程, 将以前的回调代码包装在 lambda_task 中,然后交给future调度。 future 是一个 value ; promise 是一个函数,本质是返回 value 的异步函数; promise 写入 value 的过程又称为解决、履行或绑定它。 具体来说,当……

阅读全文

Seastar 入门

1 what is Seastar 这篇文章将介绍一下 Seastar : 一个在现在多核机器上编写高效复杂的服务器应用程序的 C++ 库。 有些框架非常高效,但只允许构建简单的应用程序(eg: DPDK 允许单独处理数据包的应用程序), 而其他框架则允许构建极其复杂的应用程序,代价是运行时效率。Seastar 是我们尝试获得两全其美的方法:创建一个允许构建高度复杂的服务器应用程序并实现最佳性能的库。 2 起源 Seastar 的灵感和首例使用案例是ScyllaDB,重写了Apache Cassandra,Cassandra 是一个分厂复杂的应用,同时通过 Seastar,我们能够重新实现……

阅读全文

最近文章

分类

友情链接

标签

其它