You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by la...@apache.org on 2022/06/10 03:14:57 UTC

[dubbo-getty] branch remove-timer created (now 1bfc340)

This is an automated email from the ASF dual-hosted git repository.

laurence pushed a change to branch remove-timer
in repository https://gitbox.apache.org/repos/asf/dubbo-getty.git


      at 1bfc340  Fix: remove gost timer to fix high cpu usage problem

This branch includes the following new commits:

     new 1bfc340  Fix: remove gost timer to fix high cpu usage problem

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[dubbo-getty] 01/01: Fix: remove gost timer to fix high cpu usage problem

Posted by la...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

laurence pushed a commit to branch remove-timer
in repository https://gitbox.apache.org/repos/asf/dubbo-getty.git

commit 1bfc340ef6dc93e78c15b04f3df5d4b815408921
Author: LaurenceLiZhixin <38...@qq.com>
AuthorDate: Fri Jun 10 11:14:47 2022 +0800

    Fix: remove gost timer to fix high cpu usage problem
---
 client.go  | 16 +++++++---------
 server.go  |  4 +---
 session.go | 17 +++++++----------
 3 files changed, 15 insertions(+), 22 deletions(-)

diff --git a/client.go b/client.go
index bc700f2..7d24507 100644
--- a/client.go
+++ b/client.go
@@ -34,8 +34,6 @@ import (
 	"github.com/dubbogo/gost/bytes"
 	"github.com/dubbogo/gost/net"
 	gxsync "github.com/dubbogo/gost/sync"
-	gxtime "github.com/dubbogo/gost/time"
-
 	"github.com/gorilla/websocket"
 
 	perrors "github.com/pkg/errors"
@@ -171,7 +169,7 @@ func (c *client) dialTCP() Session {
 		}
 
 		log.Infof("net.DialTimeout(addr:%s, timeout:%v) = error:%+v", c.addr, connectTimeout, perrors.WithStack(err))
-		<-gxtime.After(connectInterval)
+		<-time.After(connectInterval)
 	}
 }
 
@@ -202,7 +200,7 @@ func (c *client) dialUDP() Session {
 		}
 		if err != nil {
 			log.Warnf("net.DialTimeout(addr:%s, timeout:%v) = error:%+v", c.addr, perrors.WithStack(err))
-			<-gxtime.After(connectInterval)
+			<-time.After(connectInterval)
 			continue
 		}
 
@@ -211,7 +209,7 @@ func (c *client) dialUDP() Session {
 		if length, err = conn.Write(connectPingPackage[:]); err != nil {
 			conn.Close()
 			log.Warnf("conn.Write(%s) = {length:%d, err:%+v}", string(connectPingPackage), length, perrors.WithStack(err))
-			<-gxtime.After(connectInterval)
+			<-time.After(connectInterval)
 			continue
 		}
 		conn.SetReadDeadline(time.Now().Add(1e9))
@@ -222,7 +220,7 @@ func (c *client) dialUDP() Session {
 		if err != nil {
 			log.Infof("conn{%#v}.Read() = {length:%d, err:%+v}", conn, length, perrors.WithStack(err))
 			conn.Close()
-			<-gxtime.After(connectInterval)
+			<-time.After(connectInterval)
 			continue
 		}
 		return newUDPSession(conn, c)
@@ -258,7 +256,7 @@ func (c *client) dialWS() Session {
 		}
 
 		log.Infof("websocket.dialer.Dial(addr:%s) = error:%+v", c.addr, perrors.WithStack(err))
-		<-gxtime.After(connectInterval)
+		<-time.After(connectInterval)
 	}
 }
 
@@ -336,7 +334,7 @@ func (c *client) dialWSS() Session {
 		}
 
 		log.Infof("websocket.dialer.Dial(addr:%s) = error:%+v", c.addr, perrors.WithStack(err))
-		<-gxtime.After(connectInterval)
+		<-time.After(connectInterval)
 	}
 }
 
@@ -443,7 +441,7 @@ func (c *client) reConnect() {
 		if maxTimes < times {
 			times = maxTimes
 		}
-		<-gxtime.After(time.Duration(int64(times) * int64(interval)))
+		<-time.After(time.Duration(int64(times) * int64(interval)))
 	}
 }
 
diff --git a/server.go b/server.go
index 82b5362..48c56da 100644
--- a/server.go
+++ b/server.go
@@ -33,8 +33,6 @@ import (
 import (
 	gxnet "github.com/dubbogo/gost/net"
 	gxsync "github.com/dubbogo/gost/sync"
-	gxtime "github.com/dubbogo/gost/time"
-
 	"github.com/gorilla/websocket"
 
 	perrors "github.com/pkg/errors"
@@ -292,7 +290,7 @@ func (s *server) runTCPEventLoop(newSession NewSessionCallback) {
 				return
 			}
 			if delay != 0 {
-				<-gxtime.After(delay)
+				<-time.After(delay)
 			}
 			client, err = s.accept(newSession)
 			if err != nil {
diff --git a/session.go b/session.go
index 5bfa4da..f9a897e 100644
--- a/session.go
+++ b/session.go
@@ -31,8 +31,6 @@ import (
 import (
 	gxbytes "github.com/dubbogo/gost/bytes"
 	gxcontext "github.com/dubbogo/gost/context"
-	gxtime "github.com/dubbogo/gost/time"
-
 	"github.com/gorilla/websocket"
 
 	perrors "github.com/pkg/errors"
@@ -57,11 +55,7 @@ const (
 	outputFormat          = "session %s, Read Bytes: %d, Write Bytes: %d, Read Pkgs: %d, Write Pkgs: %d"
 )
 
-var defaultTimerWheel *gxtime.TimerWheel
-
 func init() {
-	gxtime.InitDefaultTimerWheel()
-	defaultTimerWheel = gxtime.GetDefaultTimerWheel()
 }
 
 // Session wrap connection between the server and the client
@@ -507,7 +501,7 @@ func (s *session) WriteBytesArray(pkgs ...[]byte) (int, error) {
 	return wlg, nil
 }
 
-func heartbeat(_ gxtime.TimerID, _ time.Time, arg interface{}) error {
+func heartbeat(arg interface{}) error {
 	ss, _ := arg.(*session)
 	if ss == nil || ss.IsClosed() {
 		return ErrSessionClosed
@@ -551,9 +545,12 @@ func (s *session) run() {
 		return
 	}
 
-	if _, err := defaultTimerWheel.AddTimer(heartbeat, gxtime.TimerLoop, s.period, s); err != nil {
-		panic(fmt.Sprintf("failed to add session %s to defaultTimerWheel err:%v", s.Stat(), err))
-	}
+	go func() {
+		for {
+			<-time.After(s.period)
+			heartbeat(s)
+		}
+	}()
 
 	s.grNum.Add(1)
 	// start read gr