1. 程式人生 > >golang 真正的高併發用法 查詢素數

golang 真正的高併發用法 查詢素數

在原作者的程式碼上 附上了一些註釋方便看懂

package main

import (
	"fmt"
)

func main() {
	sieve()
}

func generate(ch chan<- int) {
	for i := 2; ; i++ {
		ch <- i // Send 'i' to channel 'ch'.
	}
}
func filter(src <-chan int, dst chan<- int, prime int) {
	str := ""
	for i := 0; i < prime; i++ {
		str += "   "
	}
	for i := range src { // Loop over values received from 'src'.
		fmt.Println(str, "prime=", prime, "   i=", i)
		if i%prime != 0 {
			dst <- i // Send 'i' to channel 'dst'.
		}
	}
}

func sieve() {
	ch := make(chan int) // Create a new channel.
	go generate(ch)      // Start generate() as a subprocess.
	for i := 0; i < 10; i++ {
		prime := <-ch
		fmt.Print(prime, "\n")
		ch1 := make(chan int)
		go filter(ch, ch1, prime)
		ch = ch1
	}
}

動畫示例圖

主要的思想是  第一個協整 只找 不能被2整除的  傳給第二個協程

第二個協程 專門 找不能被 3 整除的 然後傳給下一個協程 以此類推。。。

非常精妙!

http://divan.github.io/posts/go_concurrency_visualize/

相關推薦

golang 真正併發用法 查詢素數

在原作者的程式碼上 附上了一些註釋方便看懂 package main import ( "fmt" ) func main() { sieve() } func generate(ch chan<- int) { for i := 2; ; i++ {

Golang適合併發場景的原因分析

                典型的兩個現實案例:  我們先看兩個用Go做訊息推送的案例實際處理能力。  360訊息推送的資料:  16臺機器,標配:24個硬體執行緒,64GB記憶體    Linux Kernel 2.6.32 x86_64     單機80萬併發連線,load 0.2~0.4,CPU 總

億級流量系統架構之如何設計每秒十萬查詢併發架構【石杉的架構筆記】

歡迎關注個人公眾號:石杉的架構筆記(ID:shishan100) 週一至週五早8點半!精品技術文章準時送上! 億級流量架構專欄: 億級流量系統架構之如何支撐百億級資料的儲存與計算 億級流量系統架構之如何設計高容錯分散式計算系統 億級流量系統

Golang百萬級併發實踐

寫在前面 Go語言作為新興的語言,最近發展勢頭很是迅猛,其最大的特點就是原生支援併發。它使用的是“協程(goroutine)模型”,和傳統基於 OS 執行緒和程序實現不同,Go  語言的併發是基於使用者態的併發,這種併發方式就變得非常輕量,能夠輕鬆執行幾萬併發邏輯。 Go 的併發屬於

Golang語言快速上手到綜合實戰(Go語言、Beego框架、併發聊天室、豆瓣電影爬蟲) 下載

  Go是Google開發的一種編譯型,可並行化,並具有垃圾回收功能的程式語言。2015,Go迎來了全迸發的一年。時隔一年,回頭再看,Go已躋身主流程式語言行列。在國內,Go的熱度更是不凡。七牛雲、百度、滴滴等一線網際網路公司正在逐步將Go應用到自身的專案之中。 講師本人之前在滴滴從事後臺開發時,

golang-gin-mgo併發伺服器搭建

gin-mgo伺服器搭建 該伺服器實現簡單接收請求並將請求引數封裝儲存在mongodb資料庫中,本文將講述gin-mgo的使用方法。 gin web框架使用介紹 首先獲取gin框架依賴 go get gopkg.in/gin-gonic/g

理解併發(15).Future、Callable實現原理及用法

概述 jdk1.5推出的,使用它能帶來2個方便: 能夠獲得到執行緒執行後返回的結果 執行緒異常有效捕獲 簡單例子 輸出結果:result=hello public class ThreadLocal

golang併發的實現與注意事項

一、併發的意義     併發的意義就是讓一個程式同時做多件事情,其目的只是為了能讓程式同時做另一件事情而已,而不是為了讓程式執行的更快(如果是多核處理器,而且任務可以分成相互獨立的部分,那麼併發確實可以讓事情解決的更快)。    golang從語言級別上對併發提供了支援,而且

Golang】百萬級併發實踐

轉自:https://blog.csdn.net/jeanphorn/article/details/79018205寫在前面Go語言作為新興的語言,最近發展勢頭很是迅猛,其最大的特點就是原生支援併發。它使用的是“協程(goroutine)模型”,和傳統基於 OS 執行緒和程

java挑戰併發(7):java 執行緒中yield的用法

Thread.yield()方法作用是:暫停當前正在執行的執行緒物件,並執行其他執行緒。 yield()應該做的是讓當前執行執行緒回到可執行狀態,以允許具有相同優先順序的其他執行緒獲得執行機會。因此,使用yield()的目的是讓相同優先順序的執行緒之間能適當的輪轉執行。但

應對Memcached快取失效,導致併發查詢DB的幾種思路

最近看到nginx的合併回源,這個和下面的思路有點像。不過nginx的思路還是在控制快取失效時的併發請求,而不是當快取快要失效時,及時地更新快取。 nginx合併回源,參考:http://blog.csdn.net/brainkick/article/details/857

iOS控制併發-dispatch_semaphore(訊號量)的用法

1.前言:     在單執行緒的程式中,程式的執行有先後順序,但是在多執行緒的程式中,線上程之間的程式執行中沒有先後順序,因此會出現併發的情況,導致程式的不確定性,因此需要dispatch_semaphore做程式的高併發管理。2.介紹:    dispatch_sema

Linux LVS併發測試程式,核心引數設定,連線數查詢指令

最近在公司參與了一個LVS系統測試的專案,學習到了一些關於高併發測試相關的知識,寫到部落格裡記錄下 Linux核心引數設定 在伺服器端需要調整系統最大檔案控制代碼數 ulimit -n 1000000 在伺服器硬體支援,以及服務較輕量的情況下,最大

如何實現支援數億使用者的長連訊息系統 | Golang併發案例

此文是根據周洋在【高可用架構群】中的分享內容整理而成,轉發請註明出處。 周洋,360手機助手技術經理及架構師,負責360長連線訊息系統,360手機助手架構的開發與維護。 不知道咱們群名什麼時候改為“Python高可用架構群”了,所以不得不說,很榮幸能在接下來

Golang---併發

       golang從語言級別上對併發提供了支援,而且在啟動併發的方式上直接添加了語言級的關鍵字。我並不會很多語言,而且也沒有很多的專案經驗,可能從我嘴裡說出的比較不會非常客觀,但是起碼和C/C++(不考慮C++11)利用系統API來操作執行緒的方式相比,golang

併發系統之大忌-慢查詢

最近又遇到了一次慢查把db(mariadb10)幾乎打掛的案例,作為一個核心支付系統的技術負責人,真是每日如履薄冰。因為之前支付系統經常出問題,現在各個BG對支付系統都盯得很緊。這次要不是我及時讓DB給暴力清理資料,沒準又提一個P2故障; 抱怨歸抱怨,事後覆盤,一絲都不能馬虎。首先,描述一下故障的全過程。起

jquery on用法

用戶 lang obj data 委托機制 ava 選擇 部分 ive on()的高級用法 針對自己處理機制中,不僅有on方法,還有根據on演變出來的live方法(1.7後去掉了),delegate方法等等。這些方法的底層實現部分 還是on方法,這是利用了on的另一個事

轉:Newtonsoft.Json用法

int 一行 catch member 體驗 定義 res src 初始 原文地址:http://www.cnblogs.com/yanweidie/p/4605212.html   手機端應用講究速度快,體驗好。剛好手頭上的一個項目服務端接口有性能問題,需要進行

Python自動化開發課堂筆記【Day08】 - Python進階(面向對象的用法,網絡編程)

sta 自然 log 報錯 面向 read urn total 析構函數 面向對象的高級用法 1. __str__ 只要執行打印對象的操作,就會觸發該對象類中的__str__方法(也就是對象的綁定方法)它是一種默認的方法,默認的打印輸出為<__main__.Foo o

sed和awk之sed篇(含sed用法

清空 pre 需要 amp 打印 多條 邏輯 help n) (原創文章,謝絕轉載~) sed(stream editor)和 awk 是linux環境下處理文本、數據的強大“利器”,sed對數據列的處理稍遜,awk則更似一門語言,control flow的語法基本和c語言