go多线程传输文件,序列不变

Python012

go多线程传输文件,序列不变,第1张

go多线程传输文件,序列不变是真的。线程太占资源,线程调度开销大。go中的goroutine是一个轻量级的线程,执行时只需要4-5k的内存,比线程更易用,更高效,更轻便,调度开销比线程小。

实现指定个核心最大化使用,比如核心总数减一。

必要的库。

要使用的cpu数量,建议不全使用。

建立管道

声明使用的cpu数。

建立互斥关系,本例中主要为了实现所有线程执行完后再执行后续程序。

创建cpu数减1个线程

后面每个任务结束时要done一个wg,这里根据具体情况加,是循环就在每个循环里加,保证后面能全部done即可

没有缓冲的、阻塞式的往管道传递字符串。

Wait是等所有线程都执行完,即增加的数字被全done掉。

关闭管道。

假设已有的函数是ReadLogs,在它的基础上加个Wg加函数名的新函数,我觉得这种方式不改变原有的,比较舒服。

大意是:循环从管道读取字符串,读不到了就跳出循环。

每个ReadLogs()之后加一个wg.Done(),相当于计数减一。

ReadLogs()就是要执行的任务,不再解释。

就是开指定个线程。

管道阻塞传值。

wg同步。

WgReadLogs循环接收。