协程求素数的思路分析 | 学习笔记

简介: 快速学习协程求素数的思路分析

开发者学堂课程【Go语言核心编程 - 面向对象、文件、单元测试、反射、TCP编程协程求素数的思路分析】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/626/detail/9759


协程求素数的思路分析

一、应用实例3 :

需求:要求统计1-200000的数字中,哪些是素数?

这个问题在本章开篇就提出了现在我们有 goroutine 和 channel 的知识后,就可以完成了[测试数据: 80000]

分析思路:

传统的方法,就是使用一个循环,循环的判断各个数是不是素数。【ok

使用并发/并行的方式,将统计素数的任务分配给多个(4个)goroutine 去完成, 完成任务时间短。

并行的模式是4个,并行加并发的模式为8个。

1.画出分析思路

2.代码实现

说明:使用 goroutine 完成后,可以在使用传统的方法来统计一下,看看完成这个任务,各自耗费的时间是多少?[用map 保存 primeNum]

思路分析:

image.png

由于时间原因,测试数据由200000改为80000,求哪些数是素数,与本章开篇问题相呼应。思路一不能充分发挥并行的优势。多个 cpu 运行称为运行,一个 cpu 对多个协程进行片段化的操作,称为并发。实际操作中,多采用并行加并发的方式进行。

首先有一个主线程,要把素数统计出来,先设计一个管道叫 intchan,将1-8000数字放入 intchan 管道中,启动一个协程 putNum,把数据1-8000写入,让其流动起来,所以 intchan 容量为10000,启动四个协程完成数据输出的任务,分别为primeNum 协程1,primeNum 协程2,primeNum 协程3,primeNum 协程4,prime 是素数的意思。

1. 取出 num

2. 并计算是否为素数

如果是素数,将其放入另外一个管道 prime Chan[2000],保险起见,使其管道容量为2000,判断什么时候写完,利用for循环读取数据,再写一个管道 exitChan[4],一旦完成,即可退出协程。必须要保证上面的工作全部完成,主线程才能退出。协程之间的退出不是互相依赖的。

写编程:思路——代码实现

相关文章
|
7天前
|
存储 测试技术 Linux
使用unsafe与协程简单分析性能
【5月更文挑战第18天】本文档探讨了Go语言中使用标准库`unsafe`包与语言内置方式在类型转换(特别是`string`与`[]byte`之间)的性能差异。在涉及内存分配和复制的场景下,`unsafe`包能显著提升效率,但需深入理解其工作原理。
33 2
使用unsafe与协程简单分析性能
|
20天前
|
程序员 Python
Python并发编程之协程与多线程对比分析
本文通过对Python中协程和多线程的特点、优缺点以及适用场景进行深入比较分析,帮助读者更好地理解并发编程中不同技术方案的选择与应用。
|
20天前
|
数据处理 UED 开发者
Python并发编程之协程与多线程对比分析
本文将从Python并发编程的角度出发,对比分析协程与多线程两种并发处理方式的优缺点及适用场景,帮助读者更好地选择适合自己项目的并发方案。
|
20天前
|
程序员 测试技术 数据处理
Python中的装饰器应用与实现Python并发编程之协程与多线程对比分析
在Python编程中,装饰器是一种强大的工具,能够简洁而优雅地扩展函数或类的功能。本文将深入探讨Python中装饰器的原理、应用场景以及实现方法,帮助读者更好地理解和运用这一重要的编程概念。 本文将从Python并发编程的角度出发,对比分析协程与多线程两种并发处理方式的优缺点及适用场景,帮助读者更好地选择适合自己项目的并发方案。
|
20天前
|
C++
C/C++协程学习笔记
C/C++协程学习笔记
|
20天前
|
存储 前端开发 rax
协程学习笔记
协程学习笔记
37 0
|
20天前
|
存储 前端开发 rax
协程学习笔记 NtyCo/libgo
协程学习笔记 NtyCo/libgo
38 0
|
8月前
|
安全 调度 数据库
Kotlin 学习笔记(五)—— 协程的基础知识,面试官的最爱了~(下)
Kotlin 学习笔记(五)—— 协程的基础知识,面试官的最爱了~(下)
46 0
|
8月前
|
Java Go Android开发
Kotlin 学习笔记(五)—— 协程的基础知识,面试官的最爱了~(上)
Kotlin 学习笔记(五)—— 协程的基础知识,面试官的最爱了~(上)
55 0
|
8月前
|
Linux Go 调度
Go学习笔记-协程和IO多路复用
Go学习笔记-协程和IO多路复用
105 0
Go学习笔记-协程和IO多路复用