Commit 1c98c491 authored by alexstocks's avatar alexstocks

add remark

parent 8f2ddfa7
......@@ -445,6 +445,8 @@ func (this *Session) handleLoop() {
// ticker = time.NewTicker(this.period) // use wheel instead, 2016/09/26
LOOP:
for {
// A select blocks until one of its cases can run, then it executes that case.
// It choose one at random if multiple are ready. Otherwise it choose default branch if none is ready.
select {
case <-this.done:
// 这个分支确保(Session)handleLoop gr在(Session)handlePackage gr之后退出
......
......@@ -16,3 +16,28 @@ const (
GETTY_MINOR = 4
GETTY_BUILD = 5
)
/*
几个可能的优化点:
1 session.go:Session中的rQ & wQ 均是channel实现,其本质是bounded queue,所以可能导致读写阻塞,如果想让write更快一点,可以使用list作为wQ的二级队列,以存放优先级比较高的且不能丢弃(在wQ full的情况下)的pkg;
2 codec.go:(EventListener)OnMessage其实可以一次处理多个session.go:Session{rQ}的多个包,如:
const MAX = 32
for {
select {
case inPkg = <-this.rQ:
if flag {
var pkgArray []interface{}
pkgArray = append(pkgArray, inPkg)
Read:
for i := 0; i < MAX; i++ {
case inPkg = <-this.rQ:
pkgArray = append(pkgArray, inPkg)
default:
break Read
}
this.listener.OnMessages(this, pkgArray)
this.incReadPkgCount(len(pkgArray))
} else {
log.Info("[session.handleLoop] drop readin package{%#v}", inPkg)
}
*/
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment