数据结构算法-并行搜索算法

引言

什么是串行:
串行处理在原神世界中可以体现在玩家领取每日任务的方式上。当玩家前往冒险家协会的凯瑟琳处领取每日任务时,如果玩家只能一个个地领取任务奖励,那么这种方式就是串行处理。

具体来说,玩家需要依次排队等待领取任务奖励,每个玩家领取任务奖励后才能进行下一步操作。这种方式使得玩家领取任务的时间和效率受到限制,因为每个玩家都必须按照顺序一个一个地领取任务奖励。

什么是并行:
在原神游戏中,多名玩家可以在自己的世界中领取每日任务奖励,并在冒险家协会的凯瑟琳处领取。这种方式可以被看作是并行。

说白了就是
串行 :当有一位玩家 来 凯瑟琳领取每日任务奖励 那么凯瑟琳相当于银行的窗口,只开一个 领取奖励时,当多位玩家领取奖励时按照玩家依次入队顺序并且领取奖励

并行 :当多位玩家 玩原神 凯瑟琳相当于银行的多窗口,可以同时进行 每日任务领取奖励

并发 基本认知

并发: 一个实体对多个事件同时处理,相当于同时处理多个任务

所为的串行
银行办理业务:只有一个窗口 那么只能排队 ,

在这里插入图片描述
所为的并发
银行办理业务:只有多个窗口 那么同时进行 虽然也需要排队,但窗口的银行人员都上齐

在这里插入图片描述

并发基本概念

无论 是计算设备 (台式机 手机 笔记本电脑 服务器) 都会拥有一颗计算的核心部件 :CPU
没错,就是我CPU 所有的运算通过CPU执行

进程 :在操作系统里 拥有资源的基本单位
按照工厂 来说 进程相当于工厂的车间 ,一个工厂 多个车间 对应着真正运行的 程序 不同的车间产生不同的工作 QQ和微信 首先他们是即时通讯软件 没错吧 ! 但他实现 的产品相同,但内部实现不一样 , 假设工厂车间 的拥有 指挥所有人员的管理者 这个管理者 岗位缺失 这个管理者也就是相当于计算机单核CPU 只能执行

在这里插入图片描述
虽然单个CPU的效率,看似乎只能执行一个进程,但他会切换 切换的时间 每秒执行 亿或者上百万条指令 单个CPU 是以时间片段 执行 可能以10微秒 的切换到另一个进程 把不同的时间片分给不同的进程

线程
线程就好比一个车间包含多条生产线
在这里插入图片描述
居然同一个车间 设备和人 都是共享 哪里缺什么就有人 拿给你

一个进程可以拥有多个线程 每个线程都可以 独立运行 多个线程可共享进程资源

并行搜索算法应用专区

问题描述:
给定一个包含无序数组,我们需要测试在一个特定值(maindata)测试在数组中的 搜索效率。程序需要记录搜索所需的总时间,并统计该特定值在数组中出现的次数。

串行搜索


#include <iostream>
using namespace std;

const int Size = 1024 * 1024 * 200; // 两亿数据量

const int maindata = 20;//搜索主要的数据

int main(void) {
   
   

	int* data = new int[Size];

	for (int i = 0; i < Size; ++i){
   
   

		data[i] = i;
	}
	int  count = 0;

	time_t start;
	time_t end;

	time(&start);
	for ( int i = 0; i < 10; i++){
   
   

		for (int i = 0; i < Size; i++) {
   
   

			 if (data[i] == maindata) {
   
   
				count++;
			 }
		}
	}
	time(&end);

	cout << "串行搜索一共花费多少时间(" << end - start << ")秒" << endl;
	cout << "串行搜索统计数据出现的次数:" << count << endl;

	getchar();
	return 0;
}

并行搜索

创建线程
	//创建线程ID1 相当于线程的身份证
	DWORD threadId1;

	HANDLE Hthread1 = CreateThread(NULL, 0, ParallelSearch, NULL, 0, &threadId1);
 

HANDLE Hthread = CreateThread(NULL, 0, ParallelSearch, NULL, 0, &threadId);:
这行代码调用Windows API函数CreateThread来创建一个新线程,并将返回的线程句柄存储在变量Hthread中。

NULL:指定安全属性的指针,这里设置为NULL,表示使用默认的安全属性。
0:指定线程的初始堆栈大小,这里设置为0,表示使用默认的堆栈大小。
ParallelSearch:这是线程函数的名称或地址,具体实现的功能 。
NULL:传递给线程函数的参数,这里设置为NULL,表示不传递任何参数给线程函数。
0:指定线程的创建标志,这里设置为0,表示使用默认的创建标志。
&threadId1:指向DWORD变量的指针,用来接收新线程的ID。

线程函数 具体如何写?

 DWORD WINAPI funcName(void* ThreadParameter) {
   
   

	return 0;
}

虽然感觉好像写死 如果执行完,返回点东西 那么是没法子的 要么只能定义结构体 包含功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小森程序员

若能帮助到你,小费自愿付费

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值