国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

個(gè)人soho要怎么做企業(yè)網(wǎng)站網(wǎng)站優(yōu)化招聘

個(gè)人soho要怎么做企業(yè)網(wǎng)站,網(wǎng)站優(yōu)化招聘,網(wǎng)絡(luò)服務(wù)器圖片,怎么選擇網(wǎng)站開(kāi)發(fā)公司案例 并發(fā)目錄大小統(tǒng)計(jì) 業(yè)務(wù)邏輯 統(tǒng)計(jì)目錄的文件數(shù)量和大小(或其他信息)。示例輸出: // 某個(gè)目錄:2637 files 1149.87 MB 實(shí)現(xiàn)思路 給定一個(gè)或多個(gè)目錄,并發(fā)的統(tǒng)計(jì)每個(gè)目錄的size,最后累加到一起。 當(dāng)…

案例

并發(fā)目錄大小統(tǒng)計(jì)

業(yè)務(wù)邏輯

統(tǒng)計(jì)目錄的文件數(shù)量和大小(或其他信息)。示例輸出:

?// 某個(gè)目錄:2637 files 1149.87 MB

實(shí)現(xiàn)思路

  • 給定一個(gè)或多個(gè)目錄,并發(fā)的統(tǒng)計(jì)每個(gè)目錄的size,最后累加到一起。

  • 當(dāng)目錄中存在子目錄時(shí),遞歸的統(tǒng)計(jì)。

  • 每個(gè)目錄的統(tǒng)計(jì)都由獨(dú)立的Goroutine完成

  • 累計(jì)總Size由獨(dú)立的Goroutine完成

  • 使用Channel傳遞獲取的文件大小

  • 使用WaitGroup調(diào)度

核心代碼

?// 讀取目錄內(nèi)容// os.ReadDirfunc ReadDir(name string) ([]DirEntry, error)entries, err := os.ReadDir(dir)?// 取得文件信息info, err := entry.Info()?//判定是否為目錄entry.IsDir()

編碼實(shí)現(xiàn)

?func WalkDir(dirs ...string) string {if len(dirs) == 0 {dirs = []string{"."}}?filesizeCh := make(chan int64, 1)?wg := &sync.WaitGroup{}for _, dir := range dirs {wg.Add(1)go walkDir(dir, filesizeCh, wg)}?go func(wg *sync.WaitGroup) {wg.Wait()close(filesizeCh)}(wg)?var fileNum, sizeTotal int64for filesize := range filesizeCh {fileNum++sizeTotal += filesize}?return fmt.Sprintf("%d files %.2f MB\n", fileNum, float64(sizeTotal)/1e6)}func walkDir(dir string, fileSizes chan<- int64, wg *sync.WaitGroup) {defer wg.Done()for _, fileinfo := range fileInfos(dir) {if fileinfo.IsDir() {subDir := filepath.Join(dir, fileinfo.Name())wg.Add(1)go walkDir(subDir, fileSizes, wg)} else {fileSizes <- fileinfo.Size()}}}func fileInfos(dir string) []fs.FileInfo {entries, err := os.ReadDir(dir)if err != nil {fmt.Fprintf(os.Stderr, "walkdir: %v\n", err)return []fs.FileInfo{}}infos := make([]fs.FileInfo, 0, len(entries))for _, entry := range entries {info, err := entry.Info()if err != nil {continue}infos = append(infos, info)}return infos}

測(cè)試執(zhí)行

?> go test -run=WalkDir70 files 0.09 MB?PASSok ? ?  goConcurrency ? 0.321s

快速排序的并發(fā)編程實(shí)現(xiàn)

典型的單線程快速排序?qū)崿F(xiàn)

?func QuickSortSingle(arr []int) []int {// 確保arr中至少存在2個(gè)或以上元素if arr == nil || len(arr) < 2 {return arr}// 執(zhí)行排序quickSortSingle(arr, 0, len(arr)-1)return arr}?func quickSortSingle(arr []int, l, r int) {// 判定待排序范圍是否合法if l < r {// 獲取參考元素位置索引mid := partition(arr, l, r)// 遞歸排序左邊quickSortSingle(arr, l, mid-1)// 遞歸排序右邊quickSortSingle(arr, mid+1, r)}}?// 大小分區(qū),返回參考元素索引func partition(arr []int, l, r int) int {p := l - 1for i := l; i <= r; i++ {if arr[i] <= arr[r] {p++swap(arr, p, i)}}return p}?// 交換arr中i和j元素func swap(arr []int, i, j int) {t := arr[i]arr[i] = arr[j]arr[j] = t}

并發(fā)編程實(shí)現(xiàn)思路

  • 使用獨(dú)立的Goroutine完成arr中某部分的排序

  • WaitGroup 完成等待阻塞同步

編碼實(shí)現(xiàn)

?// QuickSortConcurrency 快速排序調(diào)用函數(shù)func QuickSortConcurrency(arr []int) []int {// 一:校驗(yàn)arr是否滿足排序需要,至少要有2個(gè)元素if arr == nil || len(arr) < 2 {return arr}?// 四:同步的控制wg := &sync.WaitGroup{}// 二:執(zhí)行排序// 初始排序整體[0, len(arr)-1]wg.Add(1)go quickSortConcurrency(arr, 0, len(arr)-1, wg)wg.Wait()?// 三:返回結(jié)果return arr}?// 實(shí)現(xiàn)遞歸快排的核心函數(shù)// 接收arr,和排序區(qū)間的索引位置[l, r]func quickSortConcurrency(arr []int, l, r int, wg *sync.WaitGroup) {// 一:-1wg的計(jì)數(shù)器defer wg.Done()?// 二:判定是否需要排序, l < rif l < r {// 三:大小分區(qū)元素,并獲取參考元素索引mid := partition(arr, l, r)?// 四:并發(fā)對(duì)左部分排序wg.Add(1)go quickSortConcurrency(arr, l, mid-1, wg)?// 五:并發(fā)的對(duì)右部分排序wg.Add(1)go quickSortConcurrency(arr, mid+1, r, wg)}}

partition 和 swap 部分不變。

測(cè)試執(zhí)行

?func TestQuickSortConcurrency(t *testing.T) {randArr := GenerateRandArr(1000)sortArr := QuickSortConcurrency(randArr)fmt.Println(sortArr)}??// 生成大的隨機(jī)數(shù)組func GenerateRandArr(l int) []int {// 生產(chǎn)大量的隨機(jī)數(shù)arr := make([]int, l)rand.Seed(time.Now().UnixMilli())for i := 0; i < l; i++ {arr[i] = int(rand.Int31n(int32(l * 5)))}?return arr}
?> go test -run=QuickSortConcurrency
http://m.aloenet.com.cn/news/40205.html

相關(guān)文章:

  • 阿里云網(wǎng)站建設(shè)的實(shí)訓(xùn)報(bào)告北京外包seo公司
  • 自己做代練網(wǎng)站steam交易鏈接怎么改
  • 臺(tái)州網(wǎng)站排名公司推廣營(yíng)銷app
  • 美團(tuán)網(wǎng)站界面設(shè)計(jì)超級(jí)外鏈吧外鏈代發(fā)
  • 網(wǎng)站開(kāi)發(fā)排期表模板重慶seo小z博客
  • wordpress獲取登錄用戶的名字seo搜索引擎優(yōu)化視頻
  • 江華網(wǎng)站建設(shè)域名大全
  • 天津網(wǎng)站在哪里建設(shè)seo診斷
  • wordpress 回收站在哪電銷系統(tǒng)軟件排名
  • 做cpa用什么類型的網(wǎng)站好百度 營(yíng)銷推廣是做什么的
  • 人與狗做的電影網(wǎng)站百度網(wǎng)盤怎么用
  • 許昌專業(yè)做網(wǎng)站公司百度站長(zhǎng)工具怎么查排名
  • 深圳哪里做網(wǎng)站好廣州番禺發(fā)布網(wǎng)
  • 圖書館網(wǎng)站建設(shè)教程電商營(yíng)銷
  • 查網(wǎng)站排名搜索引擎入口google
  • 網(wǎng)站備案必須是企業(yè)嗎外鏈網(wǎng)盤源碼
  • 德州網(wǎng)站優(yōu)化淘寶攝影培訓(xùn)推薦
  • 珠海做網(wǎng)站方案一元手游平臺(tái)app
  • php網(wǎng)站怎么注入網(wǎng)站排名怎么搜索靠前
  • 汽車網(wǎng)站建設(shè)方案英語(yǔ)培訓(xùn)機(jī)構(gòu)
  • 成都做一個(gè)小企業(yè)網(wǎng)站需要多少錢2023網(wǎng)站分享
  • 綿陽(yáng)網(wǎng)站排名網(wǎng)站優(yōu)化推廣費(fèi)用
  • 專門做任務(wù)的網(wǎng)站嗎怎樣創(chuàng)建網(wǎng)站平臺(tái)
  • 大鵬網(wǎng)站建設(shè)韶關(guān)seo
  • wap購(gòu)物網(wǎng)站源碼公司如何在百度宣傳
  • 佛山建站佛山網(wǎng)頁(yè)設(shè)計(jì)seo是一種利用搜索引擎的
  • 網(wǎng)上做調(diào)查問(wèn)卷的網(wǎng)站最近熱點(diǎn)新聞事件2023
  • bbs網(wǎng)站模板怎么創(chuàng)作自己的網(wǎng)站
  • 云南熱搜科技做網(wǎng)站不給源碼如何做網(wǎng)站seo
  • 濟(jì)南建設(shè)銀行網(wǎng)站杭州網(wǎng)站定制