测试Go语言的并发性能,利用之前写的接入数据库的代码,实现1000条、10000条数据的更新
插入数据 update_sql.go:
package main
import(
"fmt"
"database/sql"
_ "github.com/lib/pq"
)
var quit chan int = make(chan int)
func checkErr(err error){
if err != nil{
fmt.Println(err)
}
}
func main(){
db,err := sql.Open("postgres","host=localhost port=5432 database= test user=sean password=123")
checkErr(err)
for i:=0; i<10000;i++{
stmt,err := db.Prepare("insert into try values($1,1)")
checkErr(err)
stmt.Exec(i+1)
}
db.Close()
}
不使用并发 original.go
package main
import(
"fmt"
"database/sql"
_ "github.com/lib/pq"
"time"
)
var quit chan int = make(chan int)
func checkErr(err error){
if err != nil{
fmt.Println(err)
}
}
func get_data(id int,db *sql.DB){
rows,err := db.Query("select * from try where ida%4 = $1",id)
checkErr(err)
for rows.Next(){
var IDa int
var IDb int
err = rows.Scan(&IDa,&IDb)
checkErr(err)
if IDb == 1{
//fmt.Println(IDa," ")
stmt,err := db.Prepare("update try set idb = 0 where ida = $1")
checkErr(err)
stmt.Exec(IDa)
}
}
}
func closed(db *sql.DB){
db.Close()
fmt.Println(time.Now())
}
func main(){
db,err := sql.Open("postgres","host=localhost port=5432 database= test user=sean password=123")
checkErr(err)
fmt.Println(time.Now())
get_data(0,db)
get_data(1,db)
get_data(2,db)
get_data(3,db)
defer closed(db)
}
使用并发 parallel.go:
package main
impo