More than code

More Than Code
The efficiency of your iteration of reading, practicing and thinking decides your understanding of the world.
  1. 首页
  2. 未分类
  3. 正文

brpc-8 bthread API

2022年6月8日 416点热度 0人点赞 0条评论

bthread API

这一次针对性的看看bthread.cpp这个文件的作用

主要是定义使用bthread的API的

20220608103644

这个之前提到过,是用来获取全局单例TaskControl的

20220608103713

用来设置最小的并发数量。可以看到当val大于当前的concurrency,也就是pthread worker数量的时候,我们就添加若干个worker来让他的并发数达到val

20220608103941

这个也提到过。start urgent会开始执行新的bthread,现有的bthread会被偷走

start background则是把bthread加入到任务队列中

20220608104931

flush的作用就是通知TaskGroup去执行这个bthread。

具体来说,task group在执行完bthread后会到parking lot中等待。而不是直接从队列中取任务。当我们通过TaskGroup调用flush nosignal tasks的时候,就会通知worker从parking lot中出来,然后开始执行bthread

主要作用其实在start from nonw worker中也说了。NOSIGNAL目的是批量创建bthread。这样我们都插入到队列中后,一次性signal,就可以都执行。(我怎么感觉这个机制用处不大?)

interrupt的作用是中断bthread的阻塞操作

20220608105604

实现的机制和butex有关,我们之后说

20220608105735

self的作用就是获取当前执行的bthread的tid

20220608110440

这里就是退出当前bthread的作用。通过抛异常

20220608110555

异常会在这里被捕捉到,以及他的返回值

bthread join是根据version来判断的。当完成bthread的时候我们会增加他的version butex。join中会等待这个version。直到他的version超过expected version为止。

20220608111703

is stopped的原理也是类系。如果当前的TaskMeta中存储的version和当前tid的version相同。说明这个bthread还没结束。那我们根据task meta中的信息来判断是否stop。否则的话说明这个bthread不存在。

20220608112249

这里和上面那个类似,就是设置并发数

usleep貌似比较复杂之后再看。但是行为来说的话和sys usleep是一样的

stop world用来停止掉所有的worker。他会终止掉所有阻塞的操作。然后join所有的pthread worker

后面的bthread list貌似也不见其他人用。所以就不看了。

基本上就是提供了和pthread类似的接口,只不过调度方面需要我们通过yield来让出CPU。

然后提供了中断阻塞操作的API。以及usleep。这两个应该是比较重要的。

标签: 暂无
最后更新:2022年6月8日

sheep

think again

点赞
< 上一篇
下一篇 >

文章评论

取消回复

COPYRIGHT © 2021 heavensheep.xyz. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS