1 Star 4 Fork 3

github/netpoll

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

English

简介

Netpoll 是由 字节跳动 开发的高性能 NIO(Non-blocking I/O) 网络库,专注于 RPC 场景。

RPC 通常有较重的处理逻辑,因此无法串行处理 I/O。而 Go 的标准库 net 设计了 BIO(Blocking I/O) 模式的 API,使得 RPC 框架设计上只能为每个连接都分配一个 goroutine。 这在高并发下,会产生大量的 goroutine,大幅增加调度开销。此外,net.Conn 没有提供检查连接活性的 API,因此 RPC 框架很难设计出高效的连接池,池中的失效连接无法及时清理。

另一方面,开源社区目前缺少专注于 RPC 方案的 Go 网络库。类似的项目如:evio , gnet 等,均面向 Redis, HAProxy 这样的场景。

因此 Netpoll 应运而生,它借鉴了 evionetty 的优秀设计,具有出色的 性能,更适用于微服务架构。 同时,Netpoll 还提供了一些 特性,推荐在 RPC 设计中替代 net

基于 Netpoll 开发的 RPC 框架 Kitex 和 HTTP 框架 Hertz (即将开源),性能均业界领先。

范例 展示了如何使用 Netpoll 构建 RPC Client 和 Server。

更多信息请参阅 文档

特性

  • 已经支持

    • LinkBuffer 提供可以流式读写的 nocopy API
    • gopool 提供高性能的 goroutine 池
    • mcache 提供高效的内存复用
    • IsActive 支持检查连接是否存活
    • Dialer 支持构建 client
    • EventLoop 支持构建 server
    • 支持 TCP,Unix Domain Socket
    • 支持 Linux,macOS(操作系统)
  • 即将开源

    • multisyscall 支持批量系统调用
    • io_uring
    • Shared Memory IPC
    • 串行调度 I/O,适用于纯计算
    • 支持 TLS
    • 支持 UDP
  • 不被支持

    • Windows(操作系统)

性能

性能测试应满足工业级使用要求,在 RPC 场景下,并发请求、等待超时是必要的支持项。

我们提供了 netpoll-benchmark 项目用来长期追踪和比较 Netpoll 与其他框架在不同情况下的性能数据以供参考。

更多测试参考 kitex-benchmarkhertz-benchmark (即将开源)

参考

// Copyright 2021 CloudWeGo Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // +build darwin dragonfly freebsd netbsd openbsd package netpoll import "syscall" func setZeroCopy(fd int) error { return syscall.EINVAL } func setBlockZeroCopySend(fd int, sec, usec int64) error { return syscall.EINVAL }

简介

字节跳动开发的高性能非阻塞I/O网络框架,专注于RPC场景。 源地址:https://github.com/cloudwego/netpoll.git 展开 收起
README
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

语言

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/markd/netpoll.git
git@gitee.com:markd/netpoll.git
markd
netpoll
netpoll
main

搜索帮助