golang 实现并发计算文件数量

package main

import (
	"fmt"
	"io/ioutil"
	"os"
)

func listDir(path string, ch chan int) {
	fmt.Println("waiting .....  read path:" + path)
	files, _ := ioutil.ReadDir(path)
	FileSlice := []string{}
	DirSlice := []string{}
	for _, fi := range files {
		if fi.IsDir() {
			//listDir(path + "/" + fi.Name())
			DirSlice = append(DirSlice, path+"/"+fi.Name())
			//fmt.Println("dir:" + path + "/" + fi.Name())
		} else {
			FileSlice = append(FileSlice, path+"/"+fi.Name())

		}
	}

	//return slice
	var count int
	count = 0
	//var FindFiles string
	for _, value := range FileSlice {
		fmt.Println("file:" + value)
		//FindFiles += value + ";"
		count++
	}

	//find sub directory by go pattern
	DirCount := len(DirSlice)
	fmt.Println("dir len:", DirCount)
	if DirCount > 0 {
		DirCH := make([]chan int, DirCount)
		i := 0
		for _, value := range DirSlice {
			fmt.Println("dir:" + value)
			DirCH[i] = make(chan int)
			go listDir(value, DirCH[i])
			i++
		}

		fmt.Println("wait routine return")
		for _, chs := range DirCH {
			returnCount := <-chs
			fmt.Println("return count=", returnCount)
			count += returnCount
			//			ReturnFiles := <-chs
			//			if len(ReturnFiles) > 0 {
			//				FindFiles += ReturnFiles + ";"
			//				fmt.Println("list dir chan<-" + ReturnFiles)
			//			}
		}

	}
	//return results
	fmt.Println("count=", count)
	ch <- count //FindFiles
}

func main() {
	if len(os.Args) < 2 {
		fmt.Println("please input param of path.")
		return
	}
	fmt.Println(os.Args[1])
	fmt.Println("Hello, Go runtine!")
	path := os.Args[1] //"C:/Users/Administrator/Desktop/publish/test"
	//path := "c:/QQSave"
	ch := make(chan int)
	go listDir(path, ch)
	fmt.Println("chan<-", <-ch)
}

  

时间: 2024-10-23 13:32:49

golang 实现并发计算文件数量的相关文章

高并发计算服务器数量

每秒查询率QPS:对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,即每秒请求数,即最大谈吐能力. 并发数:并发数和QPS是不同的概念,一般说QPS会说多少并发用户下QPS,当QPS相同时,并发用户数越大,网站并发处理能力越好.当并发用户数过大时,会造成进程(线程)频繁切换,反正真正用于处理请求的时间变少,每秒能够处理的请求数反而变少,同时用户的请求等待时间也会变大. 找到最佳线程数能够让web系统更稳定,效率更高. 通过QPS和pv计算部署服务器台数:  单台服务器每天PV计算 公式

[转帖] Linux下面计算文件数量的方法

Linux命令-查看目录下文件个数 2018年07月04日 10:37:07 sand_clock 阅读数 2002 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sand_clock/article/details/80908733 查看当前目录下文件个数 ls -l | grep “^-” | wc -l 查看当前目录下文件个数(包含子目录下的文件) ls -lR | grep “^-” | wc -l 查看当前目录下目录个数 ls -l

计算某一路径下的所有目录或是文件数量

计算某一路径下的所有目录或是文件数量,可以参考下面代码示例: 不管是计算目录或理文件,2个方法均带2个参数,前者是传入的是物理路径,第二个传的是布尔值的参数,即是说可以计算是否包含子目录. 目录: public static int DirectoryCount(string physicalPath, bool isIncludeSubDirectory) { int count = 0; if (isIncludeSubDirectory) count = Directory.GetDire

Nginx优化_访问并发量(进程可以打开的最大文件数量)

如果客户端访问服务器提示“Too many open files”如何解决? [[email protected] ~]# ab -n 2000 -c 2000 http://192.168.1.100/    #高并发访问Nginx代理的网站,提示打开文件数量过多 Benchmarking 192.168.1.100 (be patient) socket: Too many open files (24) 优化步骤: 1.  调整Nginx的主配置文件,增加并发量. [[email prot

Golang字符串处理以及文件操作

GO语言的进阶之路-Golang字符串处理以及文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们都知道Golang是一门强类型的语言,相比Python在处理一些并发问题也是有过之而无不及,甚至可以说远远的甩python几条街.学过python基础或是shell的童鞋应该知道我们在定义一个变量的时候是不需要指定其所属数据类型的,直接让其等于一个变量即可,他们的解释器会自动识别你定义的是个整数,浮点数,字符串,还是数组或是函数.而Golang在定义每个变量的时候都被指定

NOSQL(六)集群并发计算模型Map-Reduce

<NoSQL精粹>读书笔记,转载请注明出处<jiq?钦's technical Blog> 面向聚合的数据库能够兴起,很大程度上是由于集群的增长.集群不仅改变了数据存储的规则,还改变了数据计算的方式. 集中式数据库通常两种方式处理计算逻辑:一种是在数据库服务器上执行数据计算.一种是在客户端计算机上执行数据计算.把数据库放到集群之后,采用的计算方式是将计算分布到多台计算机上,同时为了尝试减少网络传输的数据量,把节点所需的数据尽可能多地放到该节点上执行.这就是所谓的"Map-

windows下计算文件的md和sha值

在windows下可以使用FCIV命令行工具计算文件的md5和sha值,具体例子如下: FCIV -md5 -sha1 path\filename.ext 例如: FCIV-md5-sha1 c:\windows\system32\shdocvw.dll 备注:当您将哈希算法应用于任意数量的如一个二进制文件的数据时结果将是一个哈希或消息摘要.此哈希具有固定的大小. MD5 是创建一个 128 位的哈希值的哈希算法. sha-1 是创建一个 160 位哈希值的哈希算法.

Linux wc命令用于计算文件的行数/字数

利用wc指令我们可以计算文件的Byte数.字数.或是行数,若不指定文件名称.或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据. 语法: wc [-clw] [--help] [--version] [文件...] 参数: -c或--bytes或--chars 只显示Bytes数. -l或--lines 只显示行数. -w或--words 只显示字数. --help 在线帮助. --version 显示版本信息. 实例: 在默认的情况下,wc将计算指定文件的行数.字数,以及

Linux 下统计文件夹大小及文件数量

[查看文件夹大小] # /lib 目录大小 du -sh /lib # /lib 子目录大小  du -sh /lib/*   # 查看 /lib 目录下普通文件大小 find /lib -type f | xargs ls -la | awk -F ' ' 'BEGIN{sum=0} {sum+=$5} END{printf "%d bytes\n", sum}' [统计文件数量] # 查看 /lib 目录的总文件数(包含7种文件类型.包含 /lib 目录自身) find /lib