V2EX holmes1412 的所有回复 第 1 页 / 共 1 页
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX    holmes1412    全部回复第 1 页 / 共 1 页
回复总数  11
2022-04-30 17:59:40 +08:00
回复了 holmes1412 创建的主题 C 分享新思路:一个逻辑完备的线程池
@FrankHB 项目作者想参与讨论,可以把讨论贴到 Github 上吗?非常欢迎继续交流想法:
https://github.com/sogou/workflow/discussions
2022-04-27 15:17:11 +08:00
回复了 holmes1412 创建的主题 C 分享新思路:一个逻辑完备的线程池
@FrankHB 首先说明,我们最重要的点是:“允许在线程任务里发起下一个任务”。

而在发起任务时,我无法知道线程池的状况,但底层模块必须严格保证提交了的任务是必须有人管的,提交了就是正确的,不能说提交接口还要耦合线程池状态吧?这个特点对上层进行二次封装的生命周期管理非常重要。

所以才会有“在线程池销毁期间也允许另一个线程任务里提交任务”,不允许发起肯定是不合适的。而更进一步,“在线程任务里也可以销毁”只是为了让逻辑完整的特点。

最后强调一下,销毁本身并不是关键点,且 in_pool 这个域在别的地方有更重要的用途。

可以看看这个二次封装的例子,会更加能理解里边的因果关系:
https://github.com/sogou/workflow/blob/master/src/kernel/Executor.h
https://github.com/sogou/workflow/blob/master/src/kernel/Executor.cc
2022-04-26 22:18:06 +08:00
回复了 holmes1412 创建的主题 C 分享新思路:一个逻辑完备的线程池
更正一下 pipeline 问题队列名的回复:Executor 模块本身是不涉及队列名的,接口上只有执行队列对象。Workflow 的计算任务是通过队列名来选择对应的队列~
2022-04-26 22:12:20 +08:00
回复了 holmes1412 创建的主题 C 分享新思路:一个逻辑完备的线程池
@FrankHB 你说的是“为什么在线程任务里销毁线程”吗?那应该是判断 nthreads 而不是 in_pool 吧,在执行完一个 routine 之后才进行一个判断,没有多大的开销:
~~~cpp
if (pool->nthreads == 0)
{
/* Thread pool was destroyed by the task. */
free(pool);
return NULL;
}
~~~
而 destroy 接口只调用一次,in_pool 只是全局一次的话就没有什么开销。
2022-04-26 22:01:50 +08:00
回复了 holmes1412 创建的主题 C 分享新思路:一个逻辑完备的线程池
@justou 这是一个超级好 + 超级实用的问题! Workflow 里是用了执行队列,在公司内部协助业务改造了以前的流水线 pipeline 模式,所以做法还蛮值得分享一下>_<

计算这块是在线程池 thrdpool 之上做了一个 Executor 的模块:每个任务没有优先级的概念,但调度的时候需要带上一个队列名。像你这个例子,一般来说 2 ,3 ,4 ... 是加工者的话,就给每种 "加工操作" 起一个名字作为队列名,比如 "op2", "op3", "op4",然后任务带着对应的队列名直接扔给 Executor 模块调度就可以了。无需思考每种加工者的隔离,大家都是一个池子。

因为直观来说,我们一件事情,是 "步骤 2" -> "步骤 3" -> "步骤 4" 这样,其实本来我们也不希望关心每个步骤要执行多久,只是因为资源调度和划分做得不好,所以才需要自己把 n_2, n_3, n_4 应该是多少给算出来。Workflow 的 Executor 不仅比较回归问题的本质,而且大家一个池子的话也没有资源浪费,东西来了也可以尽量都跑起来。欢迎到源码围观具体的做法: https://github.com/sogou/workflow/blob/master/src/kernel/Executor.h
2022-04-26 16:54:19 +08:00
回复了 holmes1412 创建的主题 C 分享新思路:一个逻辑完备的线程池
@ho121 感谢!
2022-04-26 16:54:09 +08:00
回复了 holmes1412 创建的主题 C 分享新思路:一个逻辑完备的线程池
@fawdlstty 对的,感谢~
2022-02-21 11:35:05 +08:00
回复了 holmes1412 创建的主题 C++ 自荐一个企业级的轻量 RPC
@guyeu 那么就先用 python 起一个 http server ,然后用 SRPCHttpClient ,就可以 client.Echo(req, ...) 这样使用 srpc 框架发送~
2022-02-20 19:25:05 +08:00
回复了 holmes1412 创建的主题 C++ 自荐一个企业级的轻量 RPC
@lesismal 不收不收!只是一只普通的工程师!
另外感谢认可,代码还可以写得更好一点~~
2022-02-18 21:30:48 +08:00
回复了 holmes1412 创建的主题 C++ 自荐一个企业级的轻量 RPC
@guyeu 但是如果说二进制协议的跨语言是没有的,只有 C++实现。其他语言互通可以考虑用 http 的传输,因为 http 或二进制传输,对业务开发完全透明。
2022-02-18 21:14:36 +08:00
回复了 holmes1412 创建的主题 C++ 自荐一个企业级的轻量 RPC
@guyeu 跨的!用 http 协议打通了 srpc/thrift/trpc 的二进制协议就是干这个的,所以其他语言只要用 http 就可以互通~上边的示例是用 curl 发,文档里也有 python 发 http 的例子(>_<)~
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     807 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 15ms UTC 20:36 PVG 04:36 LAX 13:36 JFK 16:36
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86