state-thread源码分析 归档 - 弦外之音

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

core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIGSEGV信号,然后就会core dump) 之前说过 ST 协程的栈...

发布 0 条评论

本文主要讲解 GDB 的调试技巧。 1,backtrace backtrace 命令可以查看当前函数的调用栈,代码如下: #include <stdio.h> void print_a(); void print_b(); void print_c(); void print_a(void* arg) { prin...

发布 0 条评论

《ST源码分析-st_thread_create》跟 《ST源码分析-内存保护》两篇文章,讲解了,协程函数的栈内存就是下图的区域,如下: google_ads_content 下面就来验证一下协程函数的局部变量是不是真的存储到这块内存区域。...

发布 0 条评论

st_thread_create() 创建协程的时候,会调 _st_stack_new() 来申请一块内存,_st_stack_new() 里面额外申请了 2*REDZONE 的内存,在我的电脑上 一个 REDZONE 是 4096 字节。这个 两个 REDZONE 是一个在栈顶,一个在栈底。 ,如下...

发布 0 条评论

《SRS原理》上架了,深度剖析 SRS 源代码,访问地址:srs.xianwaizhiyin.net 本文采用的 SRS 版本是 4.0-b8 , 下载地址:github 由于 SRS 主要使用的 是 state-thread 协程库,这个库是 8年前的, 《state-thread 官...

发布 0 条评论

本文主要讲解, st_thread_join() 函数的使用 ,参考文档《st_thread_join》。下面用一个小的示例代码,演示一下 st_thread_join() 函数 的使用。 #include <stdio.h> #include <memory.h> #include "st.h"...

发布 0 条评论

ST 库的协程阻塞函数如下: 如上图,阻塞函数 st_poll(),st_usleep(),st_mutex_lock() 等等,这些函数的返回值都有可能是 -1,被中断了。本文主要讲解这样中断什么情况会发生。请看下图: 如上图所示,每个阻塞函数...

发布 0 条评论

在讲解之前,推荐阅读 State-thread 的官方文章,每个函数的使用在文档都有讲解。《State-thread函数使用文档》 在 Linux 系统使用 多线程的时候,线程间通信,可以使用 条件变量 以及 互斥锁。例如 线程 A 是生产者,不断写入任...

发布 0 条评论

由于 ST 库是单线程程序,如果使用了 unistd.h 里面的 sleep() 或者 usleep() 函数,就会阻塞所有协程函数的执行。但是有时候,某个协程确实要 sleep 休眠一些时间,那怎么办? ST 库提供了 st_usleep() 函数,使用这个函数,就可...

发布 0 条评论

在文章《ST源码分析-st_thread_exit》分析 lookupdns 的时候,当时没有仔细讲解 lookupdns 的退出处理。主要有两个退出处理。 1,do_resolve() 普通协程函数的退出处理。 2,main(),始祖协程函数的退出处理。 google_a...

发布 0 条评论