Go语言中文网 为您找到相关结果 73

重量级爬虫软件Pholcus

# pholcus [![GoDoc](https://godoc.org/github.com/tsuna/gohbase?status.png)](https://godoc.org/github.com/henrylee2cn/pholcus) [![GitHub release](https://img.shields.io/github/release/henrylee2cn/pholcus.svg)](https://github.com/henrylee2cn/pholcus/releases) Pholcus(幽灵蛛)是一款纯Go语言编写的高并发、分布式、重量级爬虫软件,支持单机、服务端、客户端三种运行模式,拥有Web、GUI、命令行三种操作界面;规则简单灵活、批...阅读全文

Go 的快速 HTTP 包fasthttp

fasthttp 是 Go 的快速 HTTP 实现,当前在 1M 并发的生产环境使用非常成功,可以从单个服务器进行 100K qps 的持续连接。 HTTP 服务器性能与 net/http 比较 总而言之,fasthttp 比 net/http 快 10 倍 GOMAXPROCS=1 net/http: $ GOMAXPROCS=1 go test -bench=NetHTTPServerGet -benchmem PASS BenchmarkNetHTTPServerGet1ReqPerConn 100000 21211 ns/op 2407 B/op 30 allocs/op BenchmarkNe...阅读全文

测试golang中的多核多线程

"并发 (concurrency)" 和 "并行 ( parallelism)" 是不同的。在单个 CPU 核上,线程通过时间片或者让出控制权来实现任务切换,达到 "同时" 运⾏多个任务的⺫的,这就是所谓的并发。但实际上任何时刻都只有一个任务被执行,其他任务通过某种算法来排队。多核 CPU 可以让同⼀进程内的 "多个线程" 做到真正意义上的同时运,它们之间不需要排队 (依然会发生排队,因为线程数量可能超出 CPU 核数量,还有其他的进程等等。这里说的是一个理想状况),这才是并行。除了多核,并行计算还可能是多台机器上部署运行。 package main import ( "fmt" "runtime" ) func test(c chan bool, n int) { x := 0 for i...阅读全文

博文 2014-11-29 21:48 zhjih123

Go计算运行的时间

函数time.Since() 计算golang运行的时间是非常有用的性能衡量指标,特别是在并发基准测试中。下面将介绍如何简单地使用Go语言来计算程序运行的时间。 简单地使用Golang的time.Since()函数即可。下面有一个完整例子展示这个用法。 package main import ( "fmt" "time" ) func StartCac() { t1 := time.Now() // get current time //logic handlers for i := 0; i < 1000; i++ { fmt.Print("*") } elapsed := time.Since(t1) fmt.Println("App elapsed: ", elapsed) } fun...阅读全文

博文 2016-03-18 14:42 GreatElite

go连接mysql产生大量连接

一直是这个问题困扰着哦我,为什么越来越多连接,到爆掉,换作postgresql驱动也是,还是我理解go语言并发有错呢 package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "strconv" "time" ) var xiancheng = 10 var over = make(chan bool) var sem = make(chan int, xiancheng) func checkErr(err error, hh int) { if err != nil { fmt.Printf("er...阅读全文

GO1.5实现简单的http并发请求,支持:GET、POST、HEAD、PUT

package main import ( "flag" "fmt" "io/ioutil" "net/http" "sync/atomic" "time" ) func main() { connection := flag.Int("c", 200, "-c N") timeout := flag.Int("o", 5, "-o N") timeover := flag.Int("t", 5, "-t N") printresult := flag.Bool("p", false, "-p false") method := flag.String("m", "GET", "-m GET") url := flag.String("u", "http://127.0.0.1", "-u ...阅读全文

博文 2015-08-08 10:00 fyxichen

golang并发例子

package main import ( "fmt" "math/rand" "time" ) func main() { fmt.Println("start") chn := make(chan int, 5) rand.Seed(time.Now().UnixNano()) for i := 0; i < 5; i++ { x := rand.Intn(5) fmt.Println("i is", i, "rand is:", x) go worker(i, x, chn) } fmt.Println("end") for i := 0; i < 5; i++ { j := <-chn fmt.Println(j) } } func worker(i int, sleepInt in...阅读全文

博文 2015-03-31 09:59 coseyo

go作为web容器与php的性能比较

用go写了一个web程序,测了一把性能,发现结果如下: 并发数 响应时间(每100000个请求) 10 16.489387 100 20.43609 1000 51.357626 而php的同样程序,在fastcgi方式下,测试结果如下: 并发数 响应时间(每100000个请求) 10 62.194685 100 81.103587 1000 103.441608 结论:随着并发数的增大,go的处理能力波动比php还大。 看来go语言还需要很长的时间来完善呀。 如果利用runtime.GOMAXPROCESS将最大处理器数设置为2 那么处理时间实际上比默认的情况还糟糕...阅读全文

博文 2010-11-03 14:48 HopingWhite

golang学习的点点滴滴:并发超时处理

golang并没有在语言层次上提供超时操作,但可以通过一些小技巧实现超时。 原理: 并发一个函数,等待1s后向timeout写入数据,在select中如果1s之内有数据向其他channel写入则会顺利执行,如果没有,这是timeout写入了数据,则我们知道超时了。 package main import "fmt" import "time" func main() { ch := make(chan int, 1) timeout := make(chan bool, 1) // 并发执行一个函数,等待1s后向timeout写入true go func() { time.Sleep(1000) timeout <- true }() // 这里会等待ch或timeout读出数据 // 因为...阅读全文

博文 2014-10-01 10:41 亓斌哥哥

golang中fmt vs log

真正的项目中一定要使用log或者封装更高层的自定义log,不要直接使用fmt,原因有2: (1)最重要的一点,log包是并发goroutine安全的,而fmt不是,这点特别重要,可以看如下的例子 func main() { log.Printf(" %s", "1.1.1.1002") log.Printf(" %s", "aaa") sigTerm := syscall.Signal(15) log.Println(reflect.TypeOf(sigTerm)) fmt.Println("HAHAHAHAHAHAHAHAHAHA") fmt.Println("ahahahaha")} 结果会出现: 2015/01/13 02:12:04 1.1.1.1002 HAHAHAHAHAHAHA...阅读全文

博文 2015-01-13 02:15 paladinosment

GoLang 并发控制

GoLang中控制并发有两种方式: sync.WaitGroup 和 channel 下面是两种方法的对比 sync.WaitGroup,该方法最大优点是Wait()可以阻塞到队列中的所有任务都执行完才解除阻塞,但是它的缺点是不能够指定并发协程数量. channel优点:能够利用带缓存的channel指定并发协程goroutine,比较灵活.但是它的缺点是如果使用不当容易造成死锁;并且他还需要自己判定并发goroutine是否执行完. 但是相对而言,channel更加灵活,使用更加方便,同时通过超时处理机制可以很好的避免channel造成的程序死锁,因此利用channel实现程序并发,更加方便,更加易用...阅读全文

博文 2016-04-21 13:36 liangguangchuan

Go语言并发例子

package main import ( "fmt" "runtime" ) func main() { runtime.GOMAXPROCS(runtime.NumCPU()) c := make(chan bool, 10) for i := 0; i < 10; i++ { go Go(c, i) } for i := 0; i < 10; i++ { <-c } } func Go(c chan bool, index int) { a := 1 for i := 0; i < 100; i++ { a += i } fmt.Println(index, a) c <- true } package main import ( "fmt" "runtime" "sync" ) fu...阅读全文

博文 2014-12-20 18:25 itfanr

golang的http不是并发的么?

下面这代码同时打开两个页面访问,第二个要等第一个输出1,2后才会输出1,http不是并发的么