网站建设公司小程序广州网页设计html

bicheng/2025/10/13 7:55:19/文章来源:
网站建设公司小程序,广州网页设计html,做pc端网站策划,昆明官网seo诊断为什么要异步#xff1f; CPU的工艺越来越小#xff0c;Cannon Lake架构的Intel CPU已经达到10nm技术#xff0c;因此在面积不变的情况下#xff0c;核心数可以明显提升。单纯的提升主频将造成发热量大、需要的电压大、功耗大的问题。而传统的算法与数据结构是针对单核心单… 为什么要异步 CPU的工艺越来越小Cannon Lake架构的Intel CPU已经达到10nm技术因此在面积不变的情况下核心数可以明显提升。单纯的提升主频将造成发热量大、需要的电压大、功耗大的问题。而传统的算法与数据结构是针对单核心单线程同步而言的因此传统的算法无法将CPU利用率达到最大。 广度优先搜索 首先我们先了解一下与之对应的深度优先搜索DFS深度优先搜索即像走迷宫时始终保持左手与左侧墙壁接触换言之即遇到岔路时永远向左拐从而寻找出口。而广度优先搜索则在每个岔路时变出一个分身继续前进。 但是实际上是这样吗答案是否定的刚刚已经讲到传统的算法与数据结构是建立在单线程同步基础上的因此传统算法只能够模拟分身在同时前进这时就要引入队列来保存和展开岔路节点当遇到新岔路时将这个节点放入队列。队列头部元素进行展开寻找新的岔路并放入队列尾部。 基于Parallel的并行广度优先搜索 而在并行或异步以及多线程的环境下我们可以真的让“分身”们同时前进。首先使用并行广度优先搜索的前提是你不在意真的保证了广度是同步的虽然并行广度优先搜索能够寻找到全部解但是无法保证同一时刻进行搜索的任务是在同一深度的。 在这一前提下我们以遍历图为例首先定义邻接表的数据结构 public class Node{    public string Value { get; set; }    public LinkedListNode Nodes { get; set; }        new LinkedListNode(); } 假设我们的图结构如下 进行数据的初始化 public static void Main(string[] args){     var A new Node { Value A };       var B new Node { Value B };       var C new Node { Value C };   var D new Node { Value D };      var E new Node { Value E };       var F new Node { Value F };       var G new Node { Value G };A.Nodes.AddLast(B);A.Nodes.AddLast(C);A.Nodes.AddLast(D);B.Nodes.AddLast(A);B.Nodes.AddLast(D);C.Nodes.AddLast(A);D.Nodes.AddLast(A);D.Nodes.AddLast(B);D.Nodes.AddLast(E);E.Nodes.AddLast(D);E.Nodes.AddLast(F);F.Nodes.AddLast(E);F.Nodes.AddLast(G);G.Nodes.AddLast(F);       // TODO: Async visit} 在此处姑且认为Node.GetHashCode()可以作为Node的唯一标识我们来定义一个HashSet来存储已经访问过的Node标识 private static HashSetint Visited new HashSetint(); 此时我们只需要按照正常编写深度优先搜索的递归方法编写即可但其中的循环使用Parallel提供的循环方法这样即可实现广度搜索 public void Visit(Node n){    lock (Visited){        if (Visited.Contains(n.GetHashCode())){            return;}Visited.Add(n.GetHashCode());}Console.WriteLine(${ n.Value } );Parallel.ForEach(n.Nodes, x {Visit(x);}); } 基于Task的异步广度优先搜索 如果我们需要在进行搜索时保持同一个时间点的任务所涉及到的节点的深度一致我们就需要将上述方法改写成异步方式并使用异步信号量来使处于同一深度的Task等待同深度其他Task完成 首先定义一个异步信号控制器类AsyncSemaphore其中包含一个公共构造方法和两个公共方法 public class AsyncSemaphore{    public void AddTaskCount(int)    public Task WaitAsync();    public void Release(); } 该类被初始化时认为需要等待的任务数量为0通过调用AddTaskCount来增加需要等待的任务数WaitAsync被调用时将先判断需要等待的任务数量是否与已经完成的任务数量相等如果相等则不等待不相等则返回一个等待信号。当Release被调用后判断需要等待的任务数量是否与已经完成的任务数量相等如果相等则置所有等待信号放行。 因此这个类的具体实现如下 public class AsyncSemaphore{    private int m_totalCount 0;    private int m_finishedCount 0;      private readonly ListTaskCompletionSourcebool m_waiters     new ListTaskCompletionSourcebool();          private readonly static Task s_completed                          Task.FromResult(true);          public void AddTaskCount(int count)    {m_totalCount count;}          public Task WaitAsync()    {            lock (m_waiters){                      if (m_finishedCount m_totalCount){                           return s_completed;}                       else{                        var waiter new TaskCompletionSourcebool();m_waiters.Add(waiter);                            return waiter.Task;}}}        public void Release()    {        lock (m_waiters){m_finishedCount;                   if (m_finishedCount m_totalCount){Parallel.ForEach(m_waiters, x {x.SetResult(true);});m_waiters.Clear();}}} } 在编写Visit方法之前我们需要对每个深度设置一个锁因此我们需要定义一个Dictionary来存储各个深度或叫层的锁 private static Dictionaryint, AsyncSemaphore Lockers new Dictionaryint, AsyncSemaphore(); 同时需要为起点层预设一个锁 Lockers.Add(0, new AsyncSemaphore()); Lockers[0].AddTaskCount(1); 接下来编写VisitAsync方法该方法是一个异步函数第一个参数接收节点第二个参数为当前深度起点深度为0。 public static async Task VisitAsync(Node n, int deep 0) 在VisitAsync方法被调用时应先检查该节点是否被访问 lock (Visited) {      if (Visited.Contains(n.GetHashCode()))    {        Lockers[deep].Release();return;}Visited.Add(n.GetHashCode()); } 这里需要额外说明的一点就是如果这个节点被访问过也是需要释放锁的。因为在后面的节点展开代码中我们并没有过滤节点是否被访问过因此访问过的节点也包含在了AddTaskCount()的参数中。 接下来我们需要检查下一层的锁有无被初始化 lock(Lockers) {    if (!Lockers.ContainsKey(deep 1))    {        Lockers.Add(deep 1, new AsyncSemaphore());} } 这些准备工作完成后即可输出当前节点的Value输出后我们计算一下当前节点有多少子节点将这个数值累加到下一层的异步锁中添加完毕后通知本层锁已经完成了一个任务并等待本层其他任务完成后继续展开本节点 Console.Write(${ n.Value } ); Lockers[deep 1].AddTaskCount(n.Nodes.Count); Lockers[deep].Release(); await Lockers[deep].WaitAsync(); Parallel.ForEach(n.Nodes, x {VisitAsync(x, deep 1); }); 运行调试时我们可以观察到A永远是第一个输出的结尾顺序永远是EFG而第二层的顺序是不固定的。因此证明了广度优先搜索是成功的。以上即为基于异步实现的广度优先搜索。 原文地址http://www.1234.sh/post/async-bfs-algorithm .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注 赞赏 人赞赏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/90393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站规划管理系统99元一月做网站

for 可以用来遍历数组、字符串、类数组、DOM节点,可以更改原数组,可以使用break、continue 跳出循环 return 只能在函数内部使用 for(声明循环变量;判断循环条件;更新循环变量){循环体 }forEach 参数(当前元素&#x…

郑州中企业网站建设什么查网站是否降权

竞争环境不是匀速变化,而是加速变化。企业的衰退与进化、兴衰更迭在不断发生,这成为一种不可避免的现实。事实上,在产业链竞争中增长困境不分企业大小,而是一种普遍存在的问题,许多收入在1亿至10亿美元间的制造企业也同…

怎么架构网站做外贸网站效果

如果有人不相信数学是简单的,那是因为他们没有意识到人生有多复杂。——冯诺依曼近期有关数学的好消息还是蛮多的,先有阿里巴巴举办全国数学竞赛,奖金百万,只为爱好数学的你。快来看看下面这些竞赛试题,我想应该难不倒我们的小伙伴…

北京 建公司网站要多少钱最好网站建设制作是那个

Stable Diffusion团队推出的开源模型Stable Video Diffusion,支持生成约3秒的视频,分辨率为5761024。通过测试视频展示了其令人瞩目的性能,SVD模型是一个生成图像到视频的扩散模型,通过对静止图像的条件化生成短视频。其特点主要包…

企业网站必须备案哪些有名网站是用php做的

使用JSON_EXTRACT匹配某个json类型字段中的某个具体字段 1. 使用场景2. 来自ChatGPT的JSON_EXTRACT使用说明 1. 使用场景 如果你有一张表table,其中有一个字段attrs,并且该字段是一个json,其中又包括totalPrice、skuPrice、couponPrice三个字…

公司网站建设费怎么入账家具网站开发环境与工具

一、简介 股票上涨和下跌,创造出像海浪一样难以预测的模式和走势。然而,就像科学家通过了解下面的水流来预测波浪的运动一样,我们也可以使用类似的工具破译股票市场的一些模式。 通过利用小波变换的力量,我们深入表面,试图揭示驱动股价的深层原因。这段旅程不仅仅涉及数字…

php 网站开发手机上可视化编程app

手机验证码登录很普遍了,那么在自动化测试的时候需要登录,登录不了就意味着很多自动化就没法执行下去了。 到底该怎么处理呢?其实并不难,我们先看下验证码的业务逻辑,在我们“点击获取验证码”按钮的时候,…

网站悬浮窗wordpress实现阅读全文

1,背景目的 当测试用例太多之后,想缩短执行时间,就需要多线程或者多进程执行。 多线程执行: 每条测试用例是独立的,测试用例之间的参数不能共同使用 采坑举例:接口自动化中请求头是公共参数,…

吉安企业做网站网站多网合一

新闻每天都在更新,那网页上的新闻页面是怎么使用Dreamweaver制作的? 新闻有很多种,但大多数结构都差不多,我们就先做一个简单的新闻页面,如图1中画圈圈的新闻内容。 图1 案例实现 新闻页面一般由四个部分构成&#…

科技公司 网站设计经典案例现在还有人用asp做网站

环境准备 约定:源码全部放到sources下,目录结构说明 /d/java/ffmpeg #工程工目录 ├── build #存放编译文件的目录,子目录为具体模块的构建目录 │ ├── fdk-aac │ ├── ffmpeg │ └── x264 ├── instal…

域名iis网站添加怎么建一个卖东西的网站

使用docker-compose的--scale启动多个服务,如何查看多个服务的日志 docker-compose -f yml路径 logs -f --tail 100第一个-f指定yml路径,不然会报错误no configuration file provided: not found 第二个-f是ogs的参数,表示实时刷新&#xff…

商务网站开发工具crm管理系统图片

前言 众所周知今年8月份,工信部出台了《工业和信息化部关于开展移动互联网应用程序备案工作的通知》,APP开发者的影晌是显而易见的。开发者需要按照要求提交相关材料进行备案,这无疑增加了开发者的时间和精力成本。虽然备案制度会增加开发者…

沈阳网站营销网络维护协议范本

项目背景 因为最近一直都在搞数据挖掘类的项目,且现在国内的大数据潮火热。在前几天与群里的几位兄弟聊天所以有了做一个开源项目的想法,以前也搞过一个开源的项目,当时只是想把权限集中化做一下,项目的名称和地址是: …

湖南衡阳网站建设成都设计公司装修

网络边缘其实就是端系统/主机,上面运行着分布式系统,那么这些运行的网络应用就是网络存在的理由,应用由端系统的基础设施(操作系统,硬件,实体协议,网络核心,包括对方主机的应用层下面…

说几个手机可以看的网站北京快速建站制作公司

burp抓包,抓第二次的 修改请求方式为CTFHUB

东莞手机手机端网站建设手机网站后期维护

4382系列数字荧光示波器 简述: 4382系列手持式数字荧光示波器具有8个产品型号,带宽200MHz、350MHz、500MHz、1GHz,最高采样率5GSa/s,最大存储深度60kpts/CH,最快波形捕获率10万个波形/秒,独创的Any Acquire…

无锡企业免费建站河南省建设厅信息网站

1、Mustache的语法很简单,用两个大括号标记要绑定的字段即可,“{{}}” Mustache主要的渲染方法为Mustache.render(),该方法有两个参数,第一个为要渲染的模版, 也就是例子中的template,第二个就是数据源也就…

wordpress网站更换空间青岛北方现货交易平台代理

路由器收到目的地址为224.0.0.5和239.0.0.5的组播报文如何处理? 224.0.0.5为永久组地址,是IANA为路由协议预留的IP地址(也称为保留组地址),用于标识一组特定的网络设备,供路由协议,目前被分配于OSPF协议使用,运行了OSPF协议的网络设备默认都会加入该组播组。 当路由器…

我要啦免费统计怎么做网站河南网站建设详细流程

[摘要]第3章 顺序结构程序设计 第3章 顺序结构程序设计 当你对C语言程序设计有了一定了解和掌握后, 在处理一些简单的任务时,若想根据程序书写的过程 顺序执行程序,这时应该如何处理呢? •顺序结构 •顺序结构 程序的三种结构 程序…

怎样让网站排名优化工那些网站是php开发的

QRadioButton、QCheckBox 常用函数: text(): 用于获取单选按钮的文本标签。 setText(const QString &text): 用于设置单选按钮的文本标签。 isChecked(): 用于检查单选按钮是否被选中。 setChecked(bool checked): 用于设置单选按钮是否被选中。 setIcon(c…