go和c#实现斐波那契数列
2023-04-18 12:56:54 时间
首先通过C#实现斐波那契数列:
using System.Threading.Channels; namespace App001 { internal class Program { static async Task Main() { var count = 45; await SomeTask(count); //channel run time:00:00:10.0122552ms //await OneTask(count); //run time:00:00:23.1586639ms Console.Read(); //多次运行结果类似 } static async Task SomeTask(int count) { var startTime = DateTime.Now; var channel = Channel.CreateUnbounded<long>(); for (int i = 0; i < count; i++) { await channel.Writer.WriteAsync(i); } channel.Writer.Complete(); List<Task> tasks = new List<Task>(); for (int i = 0; i < 10; i++) { var task = Task.Factory.StartNew(async () => { while (await channel.Reader.WaitToReadAsync()) { if (channel.Reader.TryRead(out var result)) { /***/ Console.WriteLine(Fib(result)); } } }); tasks.Add(task); } await Task.WhenAll(tasks.ToArray()).ContinueWith(t => { Console.WriteLine($"channel run time:{ DateTime.Now.Subtract(startTime)}ms"); }); } static Task OneTask(int count) { var startTime = DateTime.Now; for (int i = 0; i < count; i++) { Console.WriteLine(Fib(i)); } Console.WriteLine($"run time:{ DateTime.Now.Subtract(startTime)}ms"); return Task.CompletedTask; } static long Fib(long n) { if (n <= 2) return 1; else return Fib(n - 1) + Fib(n - 2); } } }
这里是一个任务cpu和内存占用情况:
这里是十个任务cpu和内存占用情况:
结果:
下面是go实现斐波那契的代码:
func main() { startTime := time.Now() jobs := make(chan int, 100) results := make(chan int, 100) for count := 0; count < 10; count++ { go worker(jobs, results) } for i := 0; i < 45; i++ { jobs <- i } close(jobs) for j := 0; j < 45; j++ { fmt.Println(<-results) } endTime := time.Now() fmt.Println("channel run time:", endTime.Sub(startTime), "ms") } func worker(jobs <-chan int, results chan<- int) { for n := range jobs { results <- fib(n) } } func fib(n int) int { if n <= 2 { return 1 } return fib(n-1) + fib(n-2) }
cpu和内存占用情况:
运行结果:
代码示例:
exercise/斐波那契Test at master · liuzhixin405/exercise (github.com)
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击