Netpoll

Go 高性能 I/O 非阻塞网络库
授权协议 Apache
开发语言 Google Go
所属分类 程序开发、 高性能网络开发库
软件类型 开源软件
地区 国产
投 递 者 公良信然
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Netpoll 是一款 Go 语言高性能、I/O 非阻塞 (NIO) 网络库,专注于 RPC 场景。

Netpoll 借鉴了 evio 和 netty 的优秀设计,具有出色的性能,更适用于微服务架构。

特性

  • 已经支持

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

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

    • Windows(操作系统)

性能

测试环境

  • CPU: Intel(R) Xeon(R) Gold 5118 CPU @ 2.30GHz, 4 cores
  • Memory: 8GB
  • OS: Debian 5.4.56.bsk.1-amd64 x86_64 GNU/Linux
  • Go: 1.15.4

并发表现 (echo 1KB)

 

传输表现 (并发 100)

 

测试结论

相比 net ,Netpoll 延迟约 34%,qps 约 110%(继续加压 net 延迟过高,数据失真)

  •   netpoll只是一种框架和一些接口,只有依赖这个框架和接口实现的netpoll实例,netpoll才能发挥它的功能。类似于kernel中的vfs,vfs本身并不会去做具体的文件操作,只是为不同的文件系统提供了一个框架。netpoll不依赖于网络协议栈,因此在内核网络及I/O子系统尚未可用时,也可以发送或接收数据包。当然netpoll能够处理的数据包类型也很有限,只有UDP和ARP数据包,并且

  • 1、概述 网络轮询机制就是Go语言在运行的时候用来处理I/O操作的关键组件,它使用了操作系统提供的 I/O 多路复用机制增强程序的并发处理能力,他不仅仅只是用于监控网络I/O,还能用于监控文件的I/O。 关于epoll:https://blog.csdn.net/raoxiaoya/article/details/106185479 相关文件 net/sock_posix.go net/fd_un

  • // 1.netpoll的作用: // 用于让内核在网络和I/O子系统尚不能完整可用时,依然能发送和接收数据包,主要用于网络控制台和远程。 // 2.netpoll机制需要驱动程序的支持: // 使外部通过软件方式调用驱动程序的中断处理程序。 // 大部分poll_controller定义如下: // void this_controller(struct net_device *de

  • NetPoll是设备接口层基于NAPI模式提供的一种纯粹的轮询接收数据包机制,它只依赖网络设备驱动,不依赖中断机制和协议栈,通过NetPoll,可以实现UDP报文的收发。设计它的目的是为了在中断异常或者协议栈异常的情况下,提供一种可以对外发送报文的机制,这样可以让系统告诉外界自身的状况。 drivers/net/netconsole.c就是基于NetPoll实现的一种将本机内核日志发送给远程主机的

 相关资料
  • 问题内容: 非阻塞TCP / IP S和在NIO帮我处理与小数目的线程许多TCP / IP连接。但是UDP 呢?(我必须承认我对UDP不太熟悉。) 即使UDP发送操作未在阻止模式下运行,它似乎也不会阻止。确实存在因拥堵或类似原因导致阻塞的情况吗?我真的很好奇,是否存在这样的情况以及生产环境中可能存在的情况。 如果实际上并没有阻塞,并且我不打算使用已连接并仅绑定到一个端口,那么使用非阻塞模式和and

  • 现在我们知道如何在一个指定I/O调度器上来调度一个任务,我们可以修改storeBitmap()函数并再次检查StrictMode的不合规做法。为了这个例子,我们可以在新的blockingStoreBitmap()函数中重排代码。 private static void blockingStoreBitmap(Context context, Bitmap bitmap, String filena

  • 实时的web特性通常需要为每个用户一个大部分时间都处于空闲的长连接. 在传统的同步web服务器中,这意味着需要给每个用户分配一个专用的线程,这样的开销是十分巨大的. 为了减小对于并发连接需要的开销,Tornado使用了一种单线程事件循环的方式. 这意味着所有应用程序代码都应该是异步和非阻塞的,因为在同一时刻只有一个操作是有效的. 异步和非阻塞这两个属于联系十分紧密而且通常交换使用,但是它们并不完全

  • 本文向大家介绍详解socket阻塞与非阻塞,同步与异步、I/O模型,包括了详解socket阻塞与非阻塞,同步与异步、I/O模型的使用技巧和注意事项,需要的朋友参考一下 socket阻塞与非阻塞,同步与异步 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端: 同步: 所谓同步,就是在

  • 问题内容: 在服务器端Javascript引擎的上下文中,什么是非阻塞I / O或异步I / O?我认为这是相对于Java服务器端实现的优势。 问题答案: 同步执行通常是指按顺序执行的代码。异步执行是指未按照代码中出现的顺序运行的执行。在以下示例中,同步操作导致警报按顺序触发。在异步操作中,虽然似乎执行第二次,但不是。 同步:1,2,3 异步:1,3,2 阻塞与非阻塞 阻塞是指阻塞进一步执行直到该

  • 我正在使用Spring云平台开发微服务,其中service1调用多个其他微服务,例如service2、service3、Service4等。这些服务可以并行调用,service1将聚合结果。我能用春云伪装吗(http://cloud.spring.io/spring-cloud-static/Dalston.SR1/#spring-cloud Faign)生成rest客户端并异步调用服务,还是应该

  • 摘要 本文描述了使用 QEMU 运行 RT-Thread 提供的基于多线程的非阻塞 socket 编程示例。 简介 随着物联网的发展,越来越多产品需要基于网络进行数据传输。在实际开发中,往往要求网络传输时不能阻塞当前线程,以致无法及时处理其他消息。在用户无法直接套用简单的 socket demo 时,RT-Thread 提供基于多线程的非阻塞 socket 编程示例,方便用户进行应用程序开发。 在

  • 阻塞I/O的操作会导致App必须等待结果返回(阻塞结束)才能进行下一步操作。在UI线程上执行一个阻塞操作会将UI强行卡住,直接造成很糟糕的用户体验。 我们激活StrictMode后,我们开始收到了关于我们的App错误操作磁盘I/O的不良信息。 D/StrictMode StrictMode policy violation; ~duration=998 ms: android.os.Strict