golang的串行处理和并行处理区别
程序员文章站
2022-06-18 18:18:21
程序运算时往往需要数据,而数据的io又往往需要时间传输,而常见的串行处理,是一个任务处理完成才接着处理新的任务, 其效率低下可想而知。 假如有3个任务要处理,而每个任务都有一定的阻塞,串行处理大概是这...
程序运算时往往需要数据,而数据的io又往往需要时间传输,而常见的串行处理,是一个任务处理完成才接着处理新的任务, 其效率低下可想而知。 假如有3个任务要处理,而每个任务都有一定的阻塞,串行处理大概是这个样子:
main.go
处理打印结果
任务:处理1 处理完毕
任务:处理2 处理完毕
任务:处理3 处理完毕
用时:6s
这种串行处理遇到io阻塞时,弊端就是太费时间了
可以看到,程序在计算时或许用不到多少时间反而是io阻塞占用了大量的时间。这种占着茅坑不拉屎,外面等着人直跳脚,确实不太好。而用异步处理则可以跳过阻塞,达到避免占坑的情况发生。
用协程的话,则可以在阻塞时先异步执行下去而不用等待,等所有协程都处理结束,再把处理的结果汇总起来就可以了,代码大概是这样子:
main.go
运行结果
任务:处理1 处理完毕
任务:处理2 处理完毕
任务:处理3 处理完毕
用时:3s
相对于之前的串行,这次的并行有效处理io的阻塞,相当于,串行就是占坑不用的角,并行则不管这些,你不用,先把你踹开,给有需要的人用先,这样一脚脚的踹,效率就上一来了。
到此这篇关于golang的串行处理和并行处理实现的文章就介绍到这了,更多相关golang 串行处理和并行处理内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读
-
python2和python3在处理字符串上的区别详解
-
L2400和L7200两款处理器的区别
-
i3和i5性能差多少?Intel i3与i5处理器的区别对比介绍
-
因特尔奔腾B960和2020M处理器之间的各种区别介绍
-
python2和python3在处理字符串上的区别详解
-
详解CommonJS和ES6模块循环加载处理的区别
-
异常类的了解、异常的处理方案、编译时期异常和运行时期异常区别、throws和throw的区别、自定义异常类 、捕获异常的标准格式、final、finally、finalize的区别
-
try catch和Throws处理异常的区别
-
.bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
-
.bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别