当前位置: 首页 > wzjs >正文

小说投稿赚钱的网站怎么做网站免费的教程

小说投稿赚钱的网站,怎么做网站免费的教程,asp公司网站,装潢设计哪里可以学一、Netpoll 简介 Netpoll 是由字节跳动开发的高性能 NIO(Non-blocking I/O)网络库,专注于 RPC 场景。在 RPC 场景中,通常有较重的处理逻辑,无法串行处理 I/O。而 Go 的标准库 net 设计了 BIO(Blocking I/…

一、Netpoll 简介

Netpoll 是由字节跳动开发的高性能 NIO(Non-blocking I/O)网络库,专注于 RPC 场景。在 RPC 场景中,通常有较重的处理逻辑,无法串行处理 I/O。而 Go 的标准库 net 设计了 BIO(Blocking I/O)模式的 API,在高并发下会产生大量的 goroutine,大幅增加调度开销。此外,net.Conn 没有提供检查连接活性的 API,使得 RPC 框架很难设计出高效的连接池。Netpoll 应运而生,借鉴了 evionetty 的优秀设计,具有出色的性能,更适用于微服务架构。

二、Netpoll 与 Go net 的区别

2.1 I/O 模式

  • Go net:使用阻塞 I/O(BIO)模式。在处理网络连接时,通常为每个连接分配一个 goroutine,当进行 I/O 操作时,线程会被阻塞,直到操作完成。例如,在服务端使用 net.Listen 创建监听套接字,客户端使用 net.Dial 发起连接请求,读写数据时使用 conn.Readconn.Write 方法,这些方法在没有数据或空间时会阻塞线程。
// 服务端监听
ln, err := net.Listen("tcp", "localhost:8080")
// 客户端连接
conn, err := net.Dial("tcp", "localhost:8080")
// 数据读取
buf := make([]byte, 1024)
n, err := conn.Read(buf)
// 数据写入
data := []byte("Hello, World!")
n, err := conn.Write(data)
  • Netpoll:使用非阻塞 I/O(NIO)模式。通过操作系统的 I/O 多路复用机制(如 epoll),可以避免线程阻塞,提高系统的并发处理能力。服务端使用 EventLoopCreateListener 创建监听套接字,客户端使用 DialerDialTimeout 发起连接请求,读写数据时使用 ReaderWriter 接口,数据不足或空间不足时不会阻塞线程。
// 服务端创建监听
ln, err := CreateListener("tcp", address)
// 客户端创建连接
dialer := NewDialer()
conn, err := dialer.DialTimeout("tcp", address, time.Second)
// 数据读取
buf, _ := reader.Next(n)
reader.Release()
// 数据写入
alloc, _ := writer.Malloc(len(write_data))
copy(alloc, write_data)
writer.Flush()

2.2 数据读写方式

  • Go net:在读写数据时通常需要进行数据复制。例如,在读取多个数据包时,需要将数据从读取缓冲区复制到新的内存区域。
var conn net.Conn
var buf = make([]byte, 8192)
for {n, _ := conn.Read(buf)var pkgsize = 1024var i intfor i = 0; i <= n-pkgsize; i += pkgsize {pkg := append([]byte{}, buf[i:i+pkgsize]...)go func() {// 处理数据包}()}buf = append(buf[:0], buf[i:n]...)
}
  • Netpoll:提供了 nocopy API,支持直接操作 buffer 的原地址,减少数据复制。通过 Reader.Slice 方法可以直接从 LinkBuffer 中获取数据,而不需要进行复制。
var conn netpoll.Connection
reader := conn.Reader()
var pkgsize = 1024
for {pkg, _ := reader.Slice(pkgsize)go func() {// 处理数据包pkg.Release()}()
}

2.3 连接管理

  • Go net:没有提供直接检查连接活性的 API。当连接不再使用时,需要调用 conn.Close 方法关闭连接。
conn.Close()
  • Netpoll:提供了 IsActive 方法检查连接是否存活,并且支持添加关闭回调函数。可以及时清理失效连接,提高连接池的效率。
conn.AddCloseCallback(func(connection Connection) error {// 连接关闭时执行操作return nil
})

三、为什么要设计 Netpoll

3.1 高并发场景下的性能问题

在高并发场景下,Go net 的 BIO 模式会为每个连接分配一个 goroutine,导致大量的 goroutine 创建和调度,增加系统的资源消耗和调度开销。而 Netpoll 的 NIO 模式可以使用较少的线程处理大量的连接,减少线程切换开销,提高性能。

3.2 高效连接池的需求

Go net 的 net.Conn 没有提供检查连接活性的 API,使得 RPC 框架很难设计出高效的连接池,池中的失效连接无法及时清理。Netpoll 提供了 IsActive 方法和关闭回调函数,方便应用程序管理连接状态,及时清理失效连接。

3.3 数据处理效率的提升

在处理大量数据时,Go net 的数据复制会增加内存开销和 CPU 负担,降低数据读写效率。Netpoll 的 nocopy API 可以减少数据复制的开销,提高数据读写效率。

四、Netpoll 的实现方式

4.1 非阻塞 I/O 机制

Netpoll 利用操作系统的 I/O 多路复用机制(如 epoll),将监听套接字和连接套接字加入到内核的 I/O 多路复用机制中。当有数据可读或可写时,内核会通知 Netpoll,Netpoll 再进行相应的处理,避免了线程阻塞。

4.2 nocopy API

Netpoll 的 LinkBuffer 提供了 nocopy API,支持直接操作 buffer 的原地址。通过偏移量的方式区分不同的请求数据,减少了不必要的数据复制。例如,Reader.Slice 方法直接从 LinkBuffer 中获取一个大小为指定值的切片,这个切片是通过偏移量的方式从 LinkBuffer 中划分出来的,并没有进行数据的复制。

4.3 连接管理

Netpoll 提供了 IsActive 方法检查连接是否存活,并且支持添加关闭回调函数。在连接关闭时,会执行相应的回调函数,方便应用程序进行资源清理。

五、优劣势分析

5.1 Netpoll 的优势

  • 高性能:在高并发场景下,Netpoll 的非阻塞 I/O 模式和 nocopy API 可以减少线程切换开销和数据复制开销,提高系统的并发处理能力和数据读写效率。
  • 高效连接管理:提供了 IsActive 方法和关闭回调函数,方便应用程序管理连接状态,及时清理失效连接,提高连接池的效率。
  • 适用于 RPC 场景:专注于 RPC 场景,满足 RPC 场景中较重处理逻辑和高效连接管理的需求。

5.2 Netpoll 的劣势

  • 学习成本较高:相比 Go net,Netpoll 的 API 和实现机制较为复杂,需要开发者花费更多的时间来学习和掌握。
  • 不支持 Windows 系统:目前 Netpoll 不支持 Windows 操作系统,限制了其在某些场景下的使用。

5.3 Go net 的优势

  • 简单易用:Go net 的 API 设计简单,易于理解和使用,适合简单场景下的网络编程。
  • 广泛的兼容性:Go net 是 Go 语言的标准库,具有广泛的兼容性,适用于各种操作系统和场景。

5.4 Go net 的劣势

  • 高并发性能差:在高并发场景下,Go net 的 BIO 模式会导致大量的 goroutine 创建和调度,增加系统的资源消耗和调度开销。
  • 数据处理效率低:读写数据时需要进行数据复制,增加了内存开销和 CPU 负担,降低了数据读写效率。

六、总结

Netpoll 在高并发场景下具有明显的性能优势,适合处理大量连接和数据的 RPC 场景。而 Go net 在简单场景下使用更加方便,代码实现简单。开发者可以根据具体的应用场景选择合适的网络库。如果是高并发的 RPC 场景,建议使用 Netpoll;如果是简单的网络编程场景,Go net 是一个不错的选择。


文章转载自:

http://kGKtYk3H.Lbcbq.cn
http://RD20pPQg.Lbcbq.cn
http://q5yJllV6.Lbcbq.cn
http://nbYBC0cV.Lbcbq.cn
http://41sKVlCq.Lbcbq.cn
http://9G4A2lg0.Lbcbq.cn
http://jP97Lb0B.Lbcbq.cn
http://7KyLanhS.Lbcbq.cn
http://RP1TWtIh.Lbcbq.cn
http://s1A5tdr5.Lbcbq.cn
http://ILzNJbFN.Lbcbq.cn
http://dPKaFpZx.Lbcbq.cn
http://ITBGkKSQ.Lbcbq.cn
http://ps0eyTNc.Lbcbq.cn
http://dnYsV5UT.Lbcbq.cn
http://CR9Y8Tdz.Lbcbq.cn
http://oo94vL8u.Lbcbq.cn
http://wRJiatPJ.Lbcbq.cn
http://cUoH6Vm1.Lbcbq.cn
http://2dwO6145.Lbcbq.cn
http://tqbTPi3b.Lbcbq.cn
http://Yb4HAj4k.Lbcbq.cn
http://FZrFG16T.Lbcbq.cn
http://cIxGRClK.Lbcbq.cn
http://8KFTHReg.Lbcbq.cn
http://hJncnNyD.Lbcbq.cn
http://eVqan2bK.Lbcbq.cn
http://1O8pKXku.Lbcbq.cn
http://FvKnjjCo.Lbcbq.cn
http://VwYscymH.Lbcbq.cn
http://www.dtcms.com/wzjs/751831.html

相关文章:

  • 快速网站建设旅游电子商务网站策划书
  • 提供网站建设设计公司排名公司网站后台维护怎么做
  • 制作网站的收获体会网站备案 的类型
  • 电商网站前端架构设计厦门有家装饰
  • 工程招聘网站延安网站建设报价
  • 潍坊市安丘建设局网站宁波网站建设工作室
  • 长沙做网站最好的公司有哪些外卖网站建设可行性分析
  • 无锡游戏网站建设公司wordpress免费 主题
  • 嘉兴网站如何制作wordpress 搭建app
  • 网站设计师专业邯郸网络安装
  • 太平阳电脑网网站模板小程序开发需要多少钱?
  • 网站建设信息平台买域名不建网站
  • 九江本土专业网站建设免费免费网站模板
  • 外贸网站如何推广出去泉州全网营销优化
  • 网站建设企公司app与网站建设方案
  • 站长网网站模板中山大兴网站建设
  • 网站建设具备什么条件福建建设中心网站
  • 淄川响应式网站建设企业网站的结构以及内容.
  • 淘宝客网站要多大空间网站做兼容处理怎么设置
  • 用什么软件做购物网站做定制网站怎么样
  • 做网站公司排行网站开发的有关公司
  • 可以看网站的手机浏览器珠海微信网站开发
  • 腾讯做网站上传wordpress二级菜单代码
  • 网站建设费用上海北京市建筑网站
  • 护肤品网站建设需求分析企业宣传册模板
  • 磁力搜索网站怎么做的国外设计素材app
  • wordpress福利整站源码郑州安卓app开发
  • 行政机关网站建设关于集团官方网站内容建设的报告
  • 西部网站邮箱登录城乡建设部官方网站
  • 网站策划专员怎么做家庭网站