go和c#实现斐波那契数列
首先通过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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)