弦外之音

好消息:《SRS原理》一书荣获官方推荐,访问地址:https://srs.xianwaizhiyin.net/

本文 基于 命令./obj/lookupdns www.xianwaizhiyin.net www.baidu.com 做讲解,查询两个个域名。 lookupdns 里面的 do_resolve() 函数前面的执行步奏如下: 本文 主要 讲解 do_resolve() 函数的逻辑,以及它里面使用的 st_...

发布 0 条评论

本文 基于 命令./obj/lookupdns www.xianwaizhiyin.net 做讲解,只查询一个域名。 本文 主要分析 st_thread_exit() 函数的内部实现。请看下图: st_thread_exit() 第一次只会执行 _ST_SWITCH_CONTEXT(thread); 这个代码。...

发布 0 条评论

CPU提供了 EFLAGS 寄存器来保存一些 进位, 溢出,奇偶校验,等等状态。在 32 位模式下 EFLAGS 是一个 32 位的寄存器,在 64 位模式下 就会变成 RFLGAS, 高32位被保留,而低32位则与 EFLAGS 寄存器相同。所以 无论是 32位还是 64...

发布 0 条评论

本文 主要分析 st_thread_create() 函数的内部实现。 st_thread_create 流程图如下: 现在开始一行一行代码分析 st_thread_create _st_thread_t *thread; _st_stack_t *stack; void **ptds; char *sp; 上面...

发布 0 条评论

在上一篇文章《ST源码分析-lookupdns》里,已经通过一个简单的域名查询程序演示了 ST 协程的使用。 本文 主要分析 st_init() 函数的内部实现。 lookupdns 流程图如下: 在讲代码逻辑,流程之前,贴一张主要的数据结构关...

发布 0 条评论

lookupdns 只有 300 行代码,但是却演示了 如何使用 协程 并发请求 dns。 lookupdns 的流程图如下: 编译之后,运行以下命令: ./obj/lookupdns www.xianwaizhiyin.net www.baidu.com 上面两个命令 用协程 查询了两...

发布 0 条评论

C语言中的 goto 实现的是函数内部的跳转,也就是 local jump。但是 C 标准库还有 setjmp() 跟 longjmp() 实现不同函数的跳转。这种不同函数的跳转叫做 long jump。下面就来介绍 C标准库 的 setjmp() 跟 longjmp() 函数的使用。 请...

发布 0 条评论

lookupdns 是 ST 的一个示例程序,由于 ST 是 makefile 的项目,并没有提供 CMake 文件,所以先演示 一下 如何使用 Clion 来调试 Makefile 的项目。 也可以使用 gdb 调试,不过我个人习惯 用 Clion。 注意,Clion 也只是把众多...

发布 0 条评论

项目的核心文件如下图: 在 linux 系统下,执行以下命令即可编译 state-thread 项目 make linux-debug state-thread 库的 编译规则非常简单,不需要过多分析了,主要有以下重点。 重点一: CC = cc ...

发布 0 条评论

ST 是 state-thread 的缩写。state-thread 是一个 C 语言实现的协程库,这个库是 8年前的, 《state-thread 官网文档》。 ST 协程优势有以下几点: 1,从性能上来说,ST和传统的EDSM实现几乎一样快。也就是用 ST 跟用 单线程 e...

发布 0 条评论