https://github.com/noble-gase/xe
[氙-Xe] Go协程并发复用,降低CPU和内存负载
https://github.com/noble-gase/xe
errgroup go goroutine-pool pool worker worker-pool
Last synced: 21 days ago
JSON representation
[氙-Xe] Go协程并发复用,降低CPU和内存负载
- Host: GitHub
- URL: https://github.com/noble-gase/xe
- Owner: noble-gase
- License: mit
- Created: 2025-03-11T01:49:31.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2025-03-27T01:58:17.000Z (about 1 month ago)
- Last Synced: 2025-03-27T02:40:52.139Z (about 1 month ago)
- Topics: errgroup, go, goroutine-pool, pool, worker, worker-pool
- Language: Go
- Homepage: https://pkg.go.dev/github.com/noble-gase/xe
- Size: 167 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 氙-Xe
[](https://golang.org)
[](https://pkg.go.dev/github.com/noble-gase/xe)
[](http://opensource.org/licenses/MIT)[氙-Xe] Go协程并发复用,降低CPU和内存负载
## 特点
1. 实现简单
2. 性能优异
3. 采用「生产-消费」模式
4. 任务支持 `context`
5. 任务队列支持缓冲大小设置
6. 异步模式下,任务缓存到全局链表## 安装
```shell
go get -u github.com/noble-gase/xe
```## 流程图

## 效果
```shell
goos: darwin
goarch: amd64
cpu: Intel(R) Core(TM) i5-1038NG7 CPU @ 2.00GHz
```### 场景-1
#### 👉 xe
```go
func main() {
ctx := context.Background()pool := woker.NewPool(5000)
for i := 0; i < 100000000; i++ {
i := i
pool.Sync(ctx, func(ctx context.Context) {
time.Sleep(time.Second)
fmt.Println("Index:", i)
})
}<-ctx.Done()
}
```##### cpu

##### mem

#### 👉 ants
```go
func main() {
ctx := context.Background()pool, _ := ants.NewPool(5000)
for i := 0; i < 100000000; i++ {
i := i
pool.Submit(func() {
time.Sleep(time.Second)
fmt.Println("Index:", i)
})
}<-ctx.Done()
}
```##### cpu

##### mem

### 场景-2
#### 👉 xe
```go
func main() {
ctx := context.Background()pool := woker.NewPool(5000)
for i := 0; i < 100; i++ {
i := i
pool.Sync(ctx, func(ctx context.Context) {
for j := 0; j < 1000000; j++ {
j := j
pool.Sync(ctx, func(ctx context.Context) {
time.Sleep(time.Second)
fmt.Println("Index:", i, "-", j)
})
}
})
}<-ctx.Done()
}
```##### cpu

##### mem

#### 👉 ants
```go
func main() {
ctx := context.Background()pool, _ := ants.NewPool(5000)
for i := 0; i < 100; i++ {
i := i
pool.Submit(func() {
for j := 0; j < 1000000; j++ {
j := j
pool.Submit(func() {
time.Sleep(time.Second)
fmt.Println("Index:", i, "-", j)
})
}
})
}<-ctx.Done()
}
```##### cpu

##### mem
