当前位置: 首页 > wzjs >正文

龙岗做网站哪里找百度推广网站

龙岗做网站哪里找,百度推广网站,服装个性化定制平台,做汤的网站有哪些引言 workflow是sougou的一款开源框架 主要是以请求回应的模式解决各自网络/IO任务而发明的 一.workflow的任务流 1.workflow都封装了哪些任务流 以请求回应的模式来解释 ① 网络层 服务端 在服务端的request 相当于发送了一个获取客户端请求的请求,response相当…
引言

workflow是sougou的一款开源框架 主要是以请求回应的模式解决各自网络/IO任务而发明的

 一.workflow的任务流
1.workflow都封装了哪些任务流

以请求回应的模式来解释

① 网络层

服务端

在服务端的request 相当于发送了一个获取客户端请求的请求,response相当于接收客户端的请求从而处理请求

客户端 

在客户端的request相当于向服务端发送了一个请求,response相当于接收服务端回复的消息

 ② 定时器

发送延时请求---->处理延时任务

③  IO层

发起处理文件IO的请求---->处理文件

④  cpu

发起耗时计算的请求---->处理耗时任务

总结:

耗时等待 :负载均衡 类似于fd通过%4取模的方式负载均衡给四个网络线程 ,当条件满足的时候把任务抛出给工作线程处理

 

耗时计算:当遇到计算任务的时候工作线程会把计算任务抛出给到go线程,go线程池通过任务调度处理计算任务

2.任务是如何来进行组织的呢

在workflow中通常以串联,并联,DAG 三种方式对任务进行组织

①串联

想象成你中学学习物理的时候的串联电路

②并联

想象成你中学学习物理的时候的并联电路

③DAG

在工作流(Workflow)系统中,DAG(有向无环图,Directed Acyclic Graph) 是一个非常核心的概念,它用于表示任务之间的执行依赖关系,画一个简单的图演示一下。

 

任务A 最先执行

任务B 和 任务C 并行执行,但都依赖于 任务A

任务D 要等 任务B 和 任务C 都完成后才执行

学过408中的操作系统信号量的同学应该可以很轻松理解这个模型

 

二.线程模型

main函数入口主线程

4个网络线程

20个工作线程

8个计算线程

 

 三.workflow的三板斧
1.三板斧是哪三板斧

first-->抽象粒度合适的异步任务

second--->通过任务流组织任务:串联,并联,以及DAG

third--->协调任务:counter,conditional,resource pool,message queue

2.message queue 

我们简单介绍一下message queue 消息队列的部分

队列的接口层

 在workflow中消息队列提供了上述这些接口 分别是 队列的创建 ,获取队列 ,往队列里面put 消息  ,设置队列是阻塞还是非阻塞 ,队列的销毁 

队列都有哪些成员

 此队列中有两个队列 分别是put队列 和 get队列 我们了解这两个队列的同时 我们要先理解多消费者和多生成者模型 , 在生产者往队列里面put消息的时候 是通过在put队列里面put操作 ,当消费者消费队列中的消息的时候 通过在get队列里面使用get操作,当get队列里面没有数据的时候,put队列里面的数据会转移到get队列里面供消费者消费,我们这样设计的目的是为了减少生产者和消费者之间的碰撞从而提供效率

 我们从中拿一个消息队列的头插法举个例子

 我们用void** 接收一个偏移后的message 用C语音的void**的好处是可以接收任何类型的数据,更加自由的去操作数据

我们对消息队列进行put操作前 我们要保证原子性 所以我们要通过pthread_mutex_lock 上锁 和pthread_mutex_unloc解锁

 后面我们通过条件变量保证数据的同步性pthread_cond_wait

 3.我们举一个简单的用workflow写的一个http请求回应代码
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <workflow/WFTaskFactory.h>
#include <workflow/WFFacilities.h>static WFFacilities::WaitGroup waitGroup(1);  // 用于主线程等待任务完成void http_callback(WFHttpTask *task)
{int state = task->get_state();int error = task->get_error();if (state != WFT_STATE_SUCCESS){printf("HTTP request failed. State = %d, Error = %d\n", state, error);waitGroup.done();  // 通知主线程任务已完成return;}const void *body;size_t body_len;task->get_resp()->get_parsed_body(&body, &body_len);printf("HTTP Response:\n%.*s\n", (int)body_len, (const char *)body);waitGroup.done();  // 通知主线程任务已完成
}int main()
{signal(SIGPIPE, SIG_IGN);  // 忽略 SIGPIPE 信号const char *url = "http://www.github.com/";WFHttpTask *task = WFTaskFactory::create_http_task(url, 4, 2, http_callback);task->start();  // 异步启动任务waitGroup.wait();  // 主线程等待任务完成return 0;
}

我们把一个url 放入到一个任务流中 并设置回调函数 

任务流对github发送request github收到请求 并 回复response给我们 触发回调

打印http://www.example.com 的 HTTP 响应内容。

http://www.dtcms.com/wzjs/233719.html

相关文章:

  • 庙行镇seo推广网站百度问答
  • 网页设计怎么创建站点培训班
  • 雅联网站建设西安百度seo推广
  • 多本小说 wordpress百度爱采购优化
  • 小荷特卖的网站谁做的长沙网站公司品牌
  • 做展览的网站网络营销推广的方法
  • netbean做网站律师推广网站排名
  • 西安金融网站建设热搜榜上2023年热搜
  • 国内简洁大气网站推荐seo外包推广
  • 免费的开发网站建设微博营销成功案例8个
  • 做网站开发考什么研营销文案
  • 网站广告弹出来代码海南百度推广开户
  • 一流的网站建设推广百度一下官方网址
  • 专业做医药招聘的网站怎么在广告联盟接广告
  • 服装网站建设策划书可行性分析苹果cms播放器
  • 移动外包公司要不要去深圳网站设计专家乐云seo
  • asp网站开发实训总结阿里指数官网最新版本
  • 哪家的网站效果好seo营销培训咨询
  • 自己做的网站服务器开了进不去网络营销的基本方法有哪些
  • 阜新网站优化市场调研方案范文
  • 静态网站和伪静态seo爱上链外链购买交易
  • 西安网站备案sem和seo是什么意思
  • seo是东莞企业网站排seoseo免费优化网站
  • dreamweaver属于什么软件网店搜索引擎优化的方法
  • 个人简历网站模板免费关键字查找
  • 网站空间和数据库空间推广服务商
  • 用手机做网站服务器seo搜索优化培训
  • 山西网站建设制作推广深圳搜索引擎优化推广
  • 网站开发质量屋青岛关键词排名提升
  • 北京建站软件seo网站诊断分析报告