forked from mirror/ledisdb
use goroutine for reap handling
This commit is contained in:
parent
8133cfdbb7
commit
fcc8c9ae37
|
@ -64,7 +64,7 @@ type client struct {
|
|||
|
||||
lastLogID uint64
|
||||
|
||||
reqErr chan error
|
||||
// reqErr chan error
|
||||
|
||||
buf bytes.Buffer
|
||||
|
||||
|
@ -82,7 +82,7 @@ func newClient(app *App) *client {
|
|||
c.ldb = app.ldb
|
||||
c.db, _ = app.ldb.Select(0) //use default db
|
||||
|
||||
c.reqErr = make(chan error)
|
||||
// c.reqErr = make(chan error)
|
||||
|
||||
return c
|
||||
}
|
||||
|
|
|
@ -77,26 +77,31 @@ func (c *respClient) run() {
|
|||
c.app.removeSlave(c.client, handleQuit)
|
||||
}()
|
||||
|
||||
// done := make(chan error)
|
||||
done := make(chan error)
|
||||
for {
|
||||
// go func() {
|
||||
// I still don't know why use goroutine can improve performance
|
||||
// if someone knows and benchamrks with another different result without goroutine, please tell me
|
||||
go func() {
|
||||
reqData, err := c.readRequest()
|
||||
if err != nil {
|
||||
// done <- err
|
||||
return
|
||||
if err == nil {
|
||||
c.handleRequest(reqData)
|
||||
}
|
||||
|
||||
c.handleRequest(reqData)
|
||||
// done <- nil
|
||||
// }()
|
||||
done <- nil
|
||||
}()
|
||||
|
||||
// err := <-done
|
||||
// if err != nil {
|
||||
// return
|
||||
// }
|
||||
// if c.conn == nil {
|
||||
// return
|
||||
// reqData, err := c.readRequest()
|
||||
// if err == nil {
|
||||
// c.handleRequest(reqData)
|
||||
// }
|
||||
|
||||
err := <-done
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if c.conn == nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue