改进gfpool,提升IO性能比标准库高100%以上

This commit is contained in:
john
2018-11-08 13:38:12 +08:00
parent f8329e1077
commit f1714b245f
4 changed files with 19 additions and 11 deletions

View File

@ -101,22 +101,24 @@ func (p *Pool) File() (*File, error) {
if v, err := p.pool.Get(); err != nil {
return nil, err
} else {
f := v.(*File)
f := v.(*File)
stat, err := os.Stat(f.path)
if f.flag & os.O_CREATE > 0 {
if _, err := os.Stat(f.path); os.IsNotExist(err) {
if os.IsNotExist(err) {
if file, err := os.OpenFile(f.path, f.flag, f.perm); err != nil {
return nil, err
} else {
f.File = *file
if stat, err = f.Stat(); err != nil {
return nil, err
}
}
}
}
if f.flag & os.O_TRUNC > 0 {
if stat, err := f.Stat(); err == nil {
if stat.Size() > 0 {
if err := f.Truncate(0); err != nil {
return nil, err
}
if stat.Size() > 0 {
if err := f.Truncate(0); err != nil {
return nil, err
}
}
}
@ -127,7 +129,6 @@ func (p *Pool) File() (*File, error) {
} else {
f.Seek(0, 0)
}
if !p.inited.Set(true) {
gfsnotify.Add(f.path, func(event *gfsnotify.Event) {
// 如果文件被删除或者重命名,立即重建指针池

View File

@ -64,7 +64,7 @@ const (
const (
REPEAT_EVENT_FILTER_INTERVAL = 1 // (毫秒)重复事件过滤间隔
DEFAULT_WATCHER_COUNT = 2 // 默认创建的监控对象数量(使用哈希取模)
DEFAULT_WATCHER_COUNT = 4 // 默认创建的监控对象数量(使用哈希取模)
)
var (

View File

@ -207,6 +207,7 @@ func (w *Watcher) startEventLoop() {
for {
if v := w.events.Pop(); v != nil {
event := v.(*Event)
// 如果是删除操作,那么需要判断是否文件真正不存在了
if event.IsRemove() {
if fileExists(event.Path) {
// 如果是文件删除事件,判断该文件是否存在,如果存在,那么将此事件认为“假删除”,

View File

@ -2,9 +2,15 @@ package main
import (
"fmt"
"gitee.com/johng/gf/g/os/gtime"
"os"
"time"
)
func main() {
fmt.Println(gtime.Now().Format("Y年m月d日 H时i分s秒"))
for {
stat, err := os.Stat("/home/john/temp/log")
fmt.Println(err)
fmt.Println(stat.Size())
time.Sleep(time.Second)
}
}