GithubHelp home page GithubHelp logo

FAQ(持续更新) about workflow HOT 48 CLOSED

sogou avatar sogou commented on July 16, 2024 9
FAQ(持续更新)

from workflow.

Comments (48)

holmes1412 avatar holmes1412 commented on July 16, 2024 16

@ybbetter 你好~感谢关注workflow~

因为每个人的使用场景不同,源码阅读建议从自己需要的场景入手比较好,以下是一些小建议:

  1. 了解源码中基本调用接口:tutorial是根据概念由浅入深的顺序编排的,先根据主页把tutorial试一下,对应的文档也可以先看完,然后看其他主题的文档,了解基本接口;
  2. 了解任务和工厂的关系:找到你平时最常用的一个场景(如果没有的话,可以从最常用的Http协议或其他网络协议入手,看看源码中factory和task的关系;
  3. 根据一个任务的生命周期看基本层次:gdb跟着这个场景看看整体调用流程经过那些层次,具体感兴趣的部分可以单独拿出来细读源码;
  4. 理解异步资源的并列关系:workflow内部多种异步资源是并列的,包括:网络CPU磁盘计时器计数器,可以了解下他们在源码中互相是什么关系;
  5. 底层具体资源的调度和复用实现:对epoll的封装或者多维队列去实现线程任务的调度,底层都有非常精巧的设计,这些可以在了解workflow整体架构之后深入细看。

祝你能够获得更多的思路启发,有任何建设性的提议也欢迎随时与我们交流~

from workflow.

holmes1412 avatar holmes1412 commented on July 16, 2024 8
  • 请问 workflow 和 k8s 什么关系的,一般组合使用的时候是怎样的搭配?
  • workflow可以完全通过自己组合实现nginx的所有功能吗?
  • 感觉workflow的设计逻辑很直观朴素,没有复杂新名词新概念,workflow 如何应用于 分布式、机器学习部署等应用场景呢?因为看到readme里说可以用于神经网络?

1. workflow与k8s的关系

  • workflow是介于业务代码操作系统之间的单机框架,为开发者提供异步调度和任务型的编程范式;
  • k8s是介于pod集群之间的多机系统,为开发者管理容器的部署、扩展和资源共享等;

组合场景:
我们公司内部有开发者使用基于workflow做的rpc系统SRPC,编写自己的业务代码,跑在k8s集群上。
前面说到k8s做了自己集群的管理,所以业务代码需要一层网关去帮你寻址和转发。
目前我们用的网关是envoy,然后做了SRPC协议的扩展,于是可以支持使用SRPC协议的workflow用户把代码跑在k8s上。

2. workflow完全可以通过二次开发实现nginx的所有功能

实际上网络通信只是workflow的其中一种应用场景,但用作web server的时候,我们有和nginx做过同场景下的性能压测。而且我们也自带了upstream模块,通过配置也可以使用多种负载均衡方式对下游发起请求。

nginx有许多我们暂时核心模块所不支持的功能,比如:

  1. 配置即可指定restful逻辑的跳转;
  2. 支持lua代码;

但workflow很多点做得比nginx要更通用友好,比如:

  1. parallel task比nginx的subrequest要更易用、更好控制流程;
  2. 二次开发难度比写一个ngx_module_t要简单;
  3. 连接复用率高(nginx各个进程间连接不能复用;
  4. 计算的切换更顺(计算和通信是并列的异步资源;
  5. 最后很重要的一点,内存边界清晰。交给workflow调度期间用户拿不到task,只有交回给用户的时候(比如callback)才能操作task,然后一切内存会在callback之后被释放干净。而nginx如果对request进行操作,是要求用户维护读过的位置的指针的,用户代码和核心框架代码交织在一起,稍有不慎就会蹦。(别问!问就是写过nginx module蹦过的人...

3. workflow的分布式、机器学习部署的使用场景

感谢对workflow的认可!!!(敲开心 ♪───O(≧∇≦)O────♪
workflow目前是单进程内的框架,如果要做分布式,其实要解决的是你随时希望知道其他人在哪里的问题,所以需要利用workflow去对接服务发现服务治理。目前服务治理已经在workflow自带的命名服务体系解决了,而服务发现可以使用开发者实际的发现系统(比如上述的envoy等)。机器学习可能还是类似你另一个issue里讨论的场景:Server如何等待一个非本框架的异步事件完成?-- Good Question
workflow目前除了并行串行,还可以支持DAG,另外提供了WFGraphTask,所以可以自行组建神经网络

最后~~~
感谢你对于梳理workflow常用场景的建议,我们目前有计划把用到workflow的开发者及实际场景进行汇总,感觉更有说服力和参考价值,你可以到时候查看和提议~

@eatcosmos 如果你可以把这三个问题单独列到一个新issue就更好了,因为这些问题比较独立宽泛,思路可以分享给其他小伙伴,也有助于我后续号召workflow实际开发者场景的汇总~

from workflow.

Barenboim avatar Barenboim commented on July 16, 2024 2

完全没接触过大型后端开发,都是单机的功能程序,请问如何向一个计算机小白解释workflow的主要用途和应用场景呢?

完全单机的话,workflow也是一个并行计算,进程通信和异步文件IO工具。你可以试试只用WFGoTask,workflow整体退化成一个有任务依赖关系的线程池。

from workflow.

Barenboim avatar Barenboim commented on July 16, 2024 1

完全没接触过大型后端开发,都是单机的功能程序,请问如何向一个计算机小白解释workflow的主要用途和应用场景呢?

完全单机的话,workflow也是一个并行计算,进程通信和异步文件IO工具。你可以试试只用WFGoTask,workflow整体退化成一个有任务依赖关系的线程池。

想用来通过workflow源码学习后端开发,正好手边的项目是Windows平台下的,一般后端开发都是Linux,
把workflow跑在Windows上的话,并发、调度、高性能这些特性依然有效吗,是不是都用的Linux里面独有的机制概念呢?Windows可以达到高性能吗?

实测windows版性能更高,因为iocp性能很好。目前除了文件异步IO任务windows下没有实现,kafka插件没有在windows分枝里加入之外,其它功能是一致的。
不过上线最好还是Linux。Windows版在公司里没有什么大规模的应用,稳定性我们没有底。

from workflow.

 avatar commented on July 16, 2024 1

完全没接触过大型后端开发,都是单机的功能程序,请问如何向一个计算机小白解释workflow的主要用途和应用场景呢?

完全单机的话,workflow也是一个并行计算,进程通信和异步文件IO工具。你可以试试只用WFGoTask,workflow整体退化成一个有任务依赖关系的线程池。

想用来通过workflow源码学习后端开发,正好手边的项目是Windows平台下的,一般后端开发都是Linux,
把workflow跑在Windows上的话,并发、调度、高性能这些特性依然有效吗,是不是都用的Linux里面独有的机制概念呢?Windows可以达到高性能吗?

实测windows版性能更高,因为iocp性能很好。目前除了文件异步IO任务windows下没有实现,kafka插件没有在windows分枝里加入之外,其它功能是一致的。
不过上线最好还是Linux。Windows版在公司里没有什么大规模的应用,稳定性我们没有底。

请问Windows版本使用的哪个版本的visual studio生成项目的,用的vs2017,生成的项目 ALL_BUILD里面有workflow工程,但是并没有生成这个工程,导致编译INSTALL的时候提示没有 workflow.lib。
写了Windows编译笔记记录了编译问题,现象截图了能帮看下吗
c++-Sogou C++ Workflow-Windows平台编译过程记录

谢谢,编译成功,编译过程流畅,关键就是openssl要单独安装,补充到上面的记录里了。

from workflow.

dengjun101 avatar dengjun101 commented on July 16, 2024 1

请问 Windows 版本使用的哪个版本的 visual studio 生成项目的,用的 vs2017,生成的项目 ALL_BUILD 里面有 workflow 工程,但是并没有生成这个工程,导致编译 INSTALL 的时候提示没有 workflow.lib。
写了 Windows 编译笔记记录了编译问题,现象截图了能帮看下吗
c++-Sogou C++ Workflow-Windows 平台编译过程记录

@eatcosmos
VS2017和VS2019都可以的,可以尝试命令行操作下,一般来说,安装好OpenSSL后,在根目录执行下面的两条命令即可:
cmake -B build .
cmake --build build --config [Debug|RelWithDebInfo|Release]

生成的库在"_lib"目录下
链接仅供参考:Windows编译

from workflow.

wangh09 avatar wangh09 commented on July 16, 2024

请问 process 是并发调用的还是串行调用的?比如有多个 client 向 server 发送请求,这些请求是由一个 MPMC 的消息队列维护的吗?如果要实现MPSC的效果,是否必须自己后挂一个queue来实现?

from workflow.

Barenboim avatar Barenboim commented on July 16, 2024

请问 process 是并发调用的还是串行调用的?比如有多个 client 向 server 发送请求,这些请求是由一个 MPMC 的消息队列维护的吗?如果要实现MPSC的效果,是否必须自己后挂一个queue来实现?

那必然是并发的。你需要一个串行的process吗?应该用counter可以实现。

from workflow.

Barenboim avatar Barenboim commented on July 16, 2024

请问 process 是并发调用的还是串行调用的?比如有多个 client 向 server 发送请求,这些请求是由一个 MPMC 的消息队列维护的吗?如果要实现MPSC的效果,是否必须自己后挂一个queue来实现?

你可以发个新的issue出来,我给你写个串行process的示例。

from workflow.

MaybeShewill-CV avatar MaybeShewill-CV commented on July 16, 2024

@Barenboim DAG要使用CounterTask的原因是什么呢? 比如最简单的CNN模型就是一个串行任务 前一个节点的输出是下一个节点的输入 直接使用serieswork不可以吗? 这种情况下还有必要使用CounterTask不 :)

from workflow.

Barenboim avatar Barenboim commented on July 16, 2024

@Barenboim DAG要使用CounterTask的原因是什么呢? 比如最简单的CNN模型就是一个串行任务 前一个节点的输出是下一个节点的输入 直接使用serieswork不可以吗? 这种情况下还有必要使用CounterTask不 :)

你说的方法是可行的,可以参考一下WFGraphTask,test目录里有测试用例。 Graph的每节点是一个task,但因为task肯定运行在series里,那么是可以把节点变成多个task的串行的。只是这样子的话,好像graph里处理依赖的方式就不太统一了?
目前比较有意思的课题是在dag里怎么传递数据。WFGraphTask目前需要用户自己处理数据传递。

from workflow.

MaybeShewill-CV avatar MaybeShewill-CV commented on July 16, 2024

@Barenboim 是的哈 现在的数据传递需要用户自己处理 如果DAG图比较大的话 这个传输数据的过程还比较复杂 而且感觉比较容易有冗余和出错。 WFGraphTask下来研究一哈 感谢:)

from workflow.

 avatar commented on July 16, 2024

完全没接触过大型后端开发,都是单机的功能程序,请问如何向一个计算机小白解释workflow的主要用途和应用场景呢?

from workflow.

 avatar commented on July 16, 2024

完全没接触过大型后端开发,都是单机的功能程序,请问如何向一个计算机小白解释workflow的主要用途和应用场景呢?

完全单机的话,workflow也是一个并行计算,进程通信和异步文件IO工具。你可以试试只用WFGoTask,workflow整体退化成一个有任务依赖关系的线程池。

想用来通过workflow源码学习后端开发,正好手边的项目是Windows平台下的,一般后端开发都是Linux,
把workflow跑在Windows上的话,多线程函数、调度、高性能这些特性依然有效吗,是不是都用的Linux里面独有的函数、机制呢?Windows可以达到高性能吗?

from workflow.

 avatar commented on July 16, 2024

请问 workflow的可执行文件一般用 systemctl 做守护进程吗,比如 http_echo_server,要确保这个程序一直运行的话,是不是通常加到 systemctl呢?

from workflow.

Barenboim avatar Barenboim commented on July 16, 2024

请问 workflow的可执行文件一般用 systemctl 做守护进程吗,比如 http_echo_server,要确保这个程序一直运行的话,是不是通常加到 systemctl呢?

这个简单的

$ nohup ./http_each_server &

也可以吧?

from workflow.

 avatar commented on July 16, 2024
nohup ./http_each_server &

谢谢,这么简单,还担心中间异常了会不会中断了,所以想守护下
好像一般web服务器都不支持单个请求的阻塞响应,感觉这个这个需求应该很合理,发现workflow可以,逻辑很简单清晰

from workflow.

 avatar commented on July 16, 2024
nohup ./http_each_server &

谢谢,这么简单,还担心中间异常了会不会中断了,所以想守护下
好像一般web服务器都不支持单个请求的阻塞响应,感觉这个这个需求应该很合理,发现workflow可以,逻辑很简单清晰

from workflow.

Barenboim avatar Barenboim commented on July 16, 2024

什么叫单个请求阻塞响应?

from workflow.

 avatar commented on July 16, 2024

什么叫单个请求阻塞响应?

就是分别请求很多文件 /1.txt /2.txt /3.txt ......,这些文件是请求后再动态生成的,需要等几秒后文件生成后再响应请求
网上搜了好像都是需要立即响应,没有提供接口调用文件生成函数
就直接在 process 里加了个循环 判断 abs_path 是否存在,存在就继续 open(),不知道是否合理

from workflow.

Barenboim avatar Barenboim commented on July 16, 2024

什么叫单个请求阻塞响应?

就是分别请求很多文件 /1.txt /2.txt /3.txt ......,这些文件是请求后再动态生成的,需要等几秒后文件生成后再响应请求
网上搜了好像都是需要立即响应,没有提供接口调用文件生成函数
就直接在 process 里加了个循环 判断 abs_path 是否存在,存在就继续 open(),不知道是否合理

方法不合理!你明天重新发个issue,我给你写个正确的方法。不要占用process线程的。

from workflow.

 avatar commented on July 16, 2024

什么叫单个请求阻塞响应?

就是分别请求很多文件 /1.txt /2.txt /3.txt ......,这些文件是请求后再动态生成的,需要等几秒后文件生成后再响应请求
网上搜了好像都是需要立即响应,没有提供接口调用文件生成函数
就直接在 process 里加了个循环 判断 abs_path 是否存在,存在就继续 open(),不知道是否合理

方法不合理!你明天重新发个issue,我给你写个正确的方法。不要占用process线程的。

谢谢,发了个 如何在合理位置添加耗时的 文件异步IO任务 ,明天帮检查个看看怎么更合理的

from workflow.

ybbetter avatar ybbetter commented on July 16, 2024

您好,想问一下如果想要阅读源码的话,有推荐的阅读顺序吗?谢谢!

from workflow.

 avatar commented on July 16, 2024

@ybbetter 你好~感谢关注workflow~

因为每个人的使用场景不同,源码阅读建议从自己需要的场景入手比较好,以下是一些小建议:

  1. 了解源码中基本调用接口:tutorial是根据概念由浅入深的顺序编排的,先根据主页把tutorial试一下,对应的文档也可以先看完,然后看其他主题的文档,了解基本接口;
  2. 了解任务和工厂的关系:找到你平时最常用的一个场景(如果没有的话,可以从最常用的Http协议或其他网络协议入手,看看源码中factory和task的关系;
  3. 根据一个任务的生命周期看基本层次:gdb跟着这个场景看看整体调用流程经过那些层次,具体感兴趣的部分可以单独拿出来细读源码;
  4. 理解异步资源的并列关系:workflow内部多种异步资源是并列的,包括:网络CPU磁盘计时器计数器,可以了解下他们在源码中互相是什么关系;
  5. 底层具体资源的调度和复用实现:对epoll的封装或者多维队列去实现线程任务的调度,底层都有非常精巧的设计,这些可以在了解workflow整体架构之后深入细看。

祝你能够获得更多的思路启发,有任何建设性的提议也欢迎随时与我们交流~

可以出一些实际产品中的复杂业务场景的应用demo文档吗,感觉这样结合应用效率会更高。因为没机会接触复杂业务,目前有需求的最复杂业务的就是这个了 Server如何等待一个非本框架的异步事件完成? #328 ,所以其他高级功能都想不出来可以怎么用或者为什么要这么用:
比如异步请求只想到了参考tutorial 文件异步IO任务 里的代码,没想到可以用 计数器 的功能(使用后工作流程更清晰了),前面多亏 @Barenboim 帮写了个demo,发现对计数器可以这么用,不然就while循环看哪里能写的就直接写里面了,这样写逻辑可能就越来越乱了。
不过看了计数器的复杂功能还是没印象,因为想不出来有什么可以应用的复杂场景.

from workflow.

 avatar commented on July 16, 2024
  1. 请问 workflow 和 k8s 什么关系的,一般组合使用的时候是怎样的搭配?
  2. workflow可以完全通过自己组合实现nginx的所有功能吗?
  3. 感觉workflow的设计逻辑很直观朴素,没有复杂新名词新概念,workflow 如何应用于 分布式、机器学习部署等应用场景呢?因为看到readme里说可以用于神经网络?

from workflow.

 avatar commented on July 16, 2024

@holmes1412 谢谢,写的太详细认真了,增长了很多新知识,很多概念都没机会接触过. 问的3个问题都是在网上听说到的高频词,k8s、nginx、分布式、生产环境机器学习...实际没有自己实际用过,等有使用机会了看怎么结合workflow用起来,到时再单独发issue问具体些.
期待 workflow 取代 nginx 成为主流,没实际用过nginx,因为看教程感觉nginx要学的新名词很多有点望而却步,而workflow的思路很朴素,编译简单上手快一键运行demo,重点在业务流/workseries逻辑而不是学习workflow本身的新增概念,既然能实现nginx的所有功能而且效率更高,应该得到更多普及.

from workflow.

Weili17 avatar Weili17 commented on July 16, 2024

请问 workflow能否作为一个C++的微服务框架,通过workflow怎么开发一个微服务处理不同的Get,Post请求?以及如何解析类似于图片格式这样的数据?

from workflow.

Barenboim avatar Barenboim commented on July 16, 2024

请问 workflow能否作为一个C++的微服务框架,通过workflow怎么开发一个微服务处理不同的Get,Post请求?以及如何解析类似于图片格式这样的数据?

这个肯定可以的呀,而且非常方便快捷。但是像解析图片,解析json这类的功能我们是没有提供的,你只需要在process里调用你自己的解析库就可以了。复杂的解析还可以封装成计算任务,使通讯与计算的融合更加高效。

from workflow.

myseemylife avatar myseemylife commented on July 16, 2024

想问一下,workflow 支持不支持功能裁剪.mysql redis kafka之类的代码在嵌入式环境下 都不需要.目前在cmakelists.txt中没有看到相关的内容.

from workflow.

Barenboim avatar Barenboim commented on July 16, 2024

非常好裁减。kafka本来就默认不编译。redis,mysql直接不编译相关.cc和.c文件就可以了,头文件都不用改。

from workflow.

Weili17 avatar Weili17 commented on July 16, 2024

请问 workflow能否作为一个C++的微服务框架,通过workflow怎么开发一个微服务处理不同的Get,Post请求?以及如何解析类似于图片格式这样的数据?

这个肯定可以的呀,而且非常方便快捷。但是像解析图片,解析json这类的功能我们是没有提供的,你只需要在process里调用你自己的解析库就可以了。复杂的解析还可以封装成计算任务,使通讯与计算的融合更加高效。

一个server如何处理不同的路由请求,目前看到的都是一个serverTask对应一个process,所有请求的处理都写在一个process里面么,还是有其它的设计?要是有更多使用实际场景的tutorial就更好了,要不然快速上手还是要对源码进一步深入研究,感谢。

from workflow.

Barenboim avatar Barenboim commented on July 16, 2024

请问 workflow能否作为一个C++的微服务框架,通过workflow怎么开发一个微服务处理不同的Get,Post请求?以及如何解析类似于图片格式这样的数据?

这个肯定可以的呀,而且非常方便快捷。但是像解析图片,解析json这类的功能我们是没有提供的,你只需要在process里调用你自己的解析库就可以了。复杂的解析还可以封装成计算任务,使通讯与计算的融合更加高效。

一个server如何处理不同的路由请求,目前看到的都是一个serverTask对应一个process,所有请求的处理都写在一个process里面么,还是有其它的设计?要是有更多使用实际场景的tutorial就更好了,要不然快速上手还是要对源码进一步深入研究,感谢。

嗯嗯,项目还有好多内容,例示里没有覆盖到,但是只要把文档示例都简单过一遍,主要的功能点和套路都可以了解。更深入的东西就只能看看源码了。
我们的框架没有提供不同前缀的路由功能,我们认为这些和核心无关,用户可以在process的基础上再做封装。

from workflow.

Weili17 avatar Weili17 commented on July 16, 2024

A3426A82-F5A5-4A8F-AB62-FE18CEDB3BF7
为啥这里return的时候程序会崩?调试最后挂在dispatch中的subtask_done(),麻烦求解答,以及workflow中的http协议,有没有提供处理不同格式的请求body的解析?
image

from workflow.

Barenboim avatar Barenboim commented on July 16, 2024

A3426A82-F5A5-4A8F-AB62-FE18CEDB3BF7
为啥这里return的时候程序会崩?调试最后挂在dispatch中的subtask_done(),麻烦求解答,以及workflow中的http协议,有没有提供处理不同格式的请求body的解析?
image

我怀疑你的main函数退出了。server.start()是非阻塞的呀,注意堵住主进程。
尽量发新的issue,不要回复在这里呀。

from workflow.

kernelai avatar kernelai commented on July 16, 2024

您好,心中有一些疑惑向您请教,callback方式比future或用户态协程能给程序带来更高的效率是基于什么样的考虑得出的结论,还是某些论文得出的结论?或者如果我想弄明白这些问题,应该怎样按图索骥。

from workflow.

holmes1412 avatar holmes1412 commented on July 16, 2024

@kernelai 你好呀,其实看看future或者用户态协程的概念就很好理解了。网上评测也有许多,可以到github上找找~具体思路我这里粗浅地帮你梳理一下,仅供参考:

具体问题:异步事件回来了得有个机制来通知我。
假设场景:同时发出10w个请求,而我们吞吐只有1w。问:以下三种机制有什么优劣。

1. future
我发出一个异步请求,基本上是拿着一个future在这get(),等到东西回来了我就能get到。这个很明显,我会浪费一个线程在这里等。

2. 用户态协程
这里仅讨论传统的有栈协程,语言级别提供的支持另说。每个异步请求发出时即需要分配一份栈空间,把寄存器上可能用到的东西全部保存下来。

3. callback
对C语言来说只是一个函数指针,请求发出时由框架来帮你保存具体需要的上下文,请求回来时框架帮你用有限的内部线程去做真正和吞吐相关的事情,资源上是最节省的。

这个话题很大,以上仅抛砖引玉,不可能概括得很全面。欢迎动手尝试一下对比,或者再单独发issue追更~~~

from workflow.

Barenboim avatar Barenboim commented on July 16, 2024

您好,心中有一些疑惑向您请教,callback方式比future或用户态协程能给程序带来更高的效率是基于什么样的考虑得出的结论,还是某些论文得出的结论?或者如果我想弄明白这些问题,应该怎样按图索骥。

您好。你是360的小伙伴吧?之前线下见过的。我也觉得这是个好问题可以单开issue讨论,

from workflow.

kernelai avatar kernelai commented on July 16, 2024

@kernelai 你好呀,其实看看future或者用户态协程的概念就很好理解了。网上评测也有许多,可以到github上找找~具体思路我这里粗浅地帮你梳理一下,仅供参考:

具体问题:异步事件回来了得有个机制来通知我。 假设场景:同时发出10w个请求,而我们吞吐只有1w。问:以下三种机制有什么优劣。

1. future 我发出一个异步请求,基本上是拿着一个future在这get(),等到东西回来了我就能get到。这个很明显,我会浪费一个线程在这里等。

2. 用户态协程 这里仅讨论传统的有栈协程,语言级别提供的支持另说。每个异步请求发出时即需要分配一份栈空间,把寄存器上可能用到的东西全部保存下来。

3. callback 对C语言来说只是一个函数指针,请求发出时由框架来帮你保存具体需要的上下文,请求回来时框架帮你用有限的内部线程去做真正和吞吐相关的事情,资源上是最节省的。

这个话题很大,以上仅抛砖引玉,不可能概括得很全面。欢迎动手尝试一下对比,或者再单独发issue追更~~~

感谢您的回答。
背景是最近在调研一些高性能异步框架,其中也看到了seastar。有些初步调研结论我同步到这里,咱们一起讨论下。

from workflow.

kernelai avatar kernelai commented on July 16, 2024

您好,心中有一些疑惑向您请教,callback方式比future或用户态协程能给程序带来更高的效率是基于什么样的考虑得出的结论,还是某些论文得出的结论?或者如果我想弄明白这些问题,应该怎样按图索骥。

您好。你是360的小伙伴吧?之前线下见过的。我也觉得这是个好问题可以单开issue讨论,

是的。^~^

from workflow.

Barenboim avatar Barenboim commented on July 16, 2024

@kernelai 你好呀,其实看看future或者用户态协程的概念就很好理解了。网上评测也有许多,可以到github上找找~具体思路我这里粗浅地帮你梳理一下,仅供参考:
具体问题:异步事件回来了得有个机制来通知我。 假设场景:同时发出10w个请求,而我们吞吐只有1w。问:以下三种机制有什么优劣。
1. future 我发出一个异步请求,基本上是拿着一个future在这get(),等到东西回来了我就能get到。这个很明显,我会浪费一个线程在这里等。
2. 用户态协程 这里仅讨论传统的有栈协程,语言级别提供的支持另说。每个异步请求发出时即需要分配一份栈空间,把寄存器上可能用到的东西全部保存下来。
3. callback 对C语言来说只是一个函数指针,请求发出时由框架来帮你保存具体需要的上下文,请求回来时框架帮你用有限的内部线程去做真正和吞吐相关的事情,资源上是最节省的。
这个话题很大,以上仅抛砖引玉,不可能概括得很全面。欢迎动手尝试一下对比,或者再单独发issue追更~~~

感谢您的回答。 背景是最近在调研一些高性能异步框架,其中也看到了seastar。有些初步调研结论我同步到这里,咱们一起讨论下。

欢迎把和seastar的对比新开个issue交流。

from workflow.

dogpandacat avatar dogpandacat commented on July 16, 2024

为什么源码里面一点注释都不写呢?

from workflow.

Barenboim avatar Barenboim commented on July 16, 2024

为什么源码里面一点注释都不写呢?

确实注释有点少。我们希望大多数接口定义本身就能解释自己。有些我们也加了注释。
实现代码除了特别需求提醒的,一般不会加大段注释。

from workflow.

SunJ2000 avatar SunJ2000 commented on July 16, 2024

我想使用httpserver传输大文件,如果client建立一个http_task向server请求一个大文件 ,然后server chunked分块传输,client会接受完所有的chunk后再调用callback 吗?

from workflow.

Barenboim avatar Barenboim commented on July 16, 2024

我想使用httpserver传输大文件,如果client建立一个http_task向server请求一个大文件 ,然后server chunked分块传输,client会接受完所有的chunk后再调用callback 吗?

独立的问题重新发issue吧。

from workflow.

xqch1983 avatar xqch1983 commented on July 16, 2024

WaitGroup的注释较少,可以介绍一下WaitGroup两个函数done() 和wait()的使用方法么?

from workflow.

Barenboim avatar Barenboim commented on July 16, 2024

WaitGroup的注释较少,可以介绍一下WaitGroup两个函数done() 和wait()的使用方法么?

你好。WaitGroup不是我们的一个核心组件,一般只在main函数里应用,用于防止程序退出。其它任何地方都是全异步的,不存在等待。

WaitGroup本身也只有wait和done两个操作,例如初始化时传3,那么3次done之后,wait的人就通过了,好像也没有太多需要描述的。

from workflow.

xqch1983 avatar xqch1983 commented on July 16, 2024

from workflow.

Barenboim avatar Barenboim commented on July 16, 2024

多谢回复! 另外,用workflow来处理计算或者计算密集型应用函数,是否可以替代类似OpenMP的多线程编程? 方法上可以把结果矩阵或者向量,通过均分的方法,把大任务划分成多个小任务组成的serial 来start ()完成么? 有数值计算或者高性能多核并行计算类应用,会采用此方法来做性能加速么?适合替代OpenMP么,有优势么? | | Qingchun Xie 15210341746 Best Regards | ---- 回复的原邮件 ---- | 发件人 | @.> | | 发送日期 | 2023年11月09日 22:49 | | 收件人 | sogou/workflow @.> | | 抄送人 | xqch1983 @.>, Comment @.> | | 主题 | Re: [sogou/workflow] FAQ(持续更新) (#170) | WaitGroup的注释较少,可以介绍一下WaitGroup两个函数done() 和wait()的使用方法么? 你好。WaitGroup不是我们的一个核心组件,一般只在main函数里应用,用于防止程序退出。其它任何地方都是全异步的,不存在等待。 WaitGroup本身也只有wait和done两个操作,例如初始化时传3,那么3次done之后,wait的人就通过了,好像也没有太多需要描述的。 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

你好,具体问题重新发issue吧。workflow代替openMP应该是比较容易的,你的需求可能可以对应到某一类计算模式上。

from workflow.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.