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   ·   实用小工具   ·   992 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 14ms · UTC 20:47 · PVG 04:47 · LAX 12:47 · JFK 15:47
Developed with CodeLauncher
♥ Do have faith in what you're doing.