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

网站打开慢如何优化重庆市建设工程信息网更改

网站打开慢如何优化,重庆市建设工程信息网更改,以网站建设专业画一幅画,网站设计制作规范简介 在Go提供如何实现对象的缓存池功能#xff1f;常用一种实现方式是#xff1a;sync.Pool, 其旨在缓存已分配但未使用的项目以供以后重用#xff0c;从而减轻垃圾收集器#xff08;GC#xff09;的压力。 快速使用 sync.Pool的结构也比较简单#xff0c;常用的方法…简介 在Go提供如何实现对象的缓存池功能常用一种实现方式是sync.Pool, 其旨在缓存已分配但未使用的项目以供以后重用从而减轻垃圾收集器GC的压力。 快速使用 sync.Pool的结构也比较简单常用的方法有Get、Put type Pool struct {local unsafe.Pointer // local fixed-size per-P pool, actual type is [P]poolLocallocalSize uintptr // size of the local arrayvictim unsafe.Pointer // local from previous cyclevictimSize uintptr // size of victims array// New optionally specifies a function to generate// a value when Get would otherwise return nil.// It may not be changed concurrently with calls to Get.New func() any } func (p *Pool) Get() any func (p *Pool) Put(x any) 接着通过一个简单的例子来看看是如何使用的 package mainimport (fmtsync )type Object struct {ID int// ... }func main() {// 1.创建一个sync.Pool对象pool : sync.Pool{New: func() interface{} {fmt.Println(Creating a new object)return Object{}},}// 2.pool.Get()方法从池中获取一个对象。如果池中有可用的对象Get()方法将返回其中一个否则它将返回一个新创建的对象obj : pool.Get().(*Object)// 3.操作对象obj.ID 1// 4.调用pool.Put()方法将对象放回池中pool.Put(obj)objBar : pool.Get().(*Object)fmt.Println(Object ID:, objBar.ID) }实践应用 在之前的文章中有提到的享元模式设计模式flyweight(享元)的在棋牌游戏的应用的案例。今天我们使用sync.Pool对该方案进行优化。 观察在棋牌游戏的代码虽然解决了每次都要New一个对象的问题但还存在几个优化点: 不能只能缓存特定的棋牌室类型对象 并发安全问题 原来是通过Factory工厂Map实现享元模式截取其中部分代码如下 package design_modeimport fmtvar chessPieceUnit map[int]*ChessPiece{1: {Name: 車,Color: 紅,PositionX: 1,PositionY: 11,},2: {Name: 馬,Color: 黑,PositionX: 2,PositionY: 2,},// 其他棋子 }func NewChessPieceUnitFactory() *ChessBoard {board : ChessBoard{Cards: map[int]*ChessPiece{}}for id : range chessPieceUnit {board.Cards[id] chessPieceUnit[id]}return board }1.重构Factory 接着我们同sync.Pool修改一下Factory的实现 pool : sync.Pool{New: func() interface{} {fmt.Println(Creating a new object)return NewChessBoard()}, }game1 : pool.Get().(*ChessBoard) game2 : pool.Get().(*ChessBoard) fmt.Println(game1) fmt.Println(game2) fmt.Println(game1.Cards[0] game2.Cards[0]) 2. 并发安全问题 2.1 修改模型 为了方便观察给每个房间棋牌室增加一个创建时间 type ChessBoard struct {Cards map[int]*ChessPieceTime time.Time } 2.2 并发测试 启动多个goroutine进行测试 func main() {pool : sync.Pool{New: func() interface{} {fmt.Println(Creating a new object)return NewChessBoard()},}var wg sync.WaitGroupfor i : 0; i 10; i {wg.Add(1)go func(id int) {defer wg.Done()obj : pool.Get().(*ChessBoard)obj.Time time.Now()pool.Put(obj)fmt.Printf(Object ID: %v\n, obj.Time)}(i)}wg.Wait() } 输出如下: Creating a new object Creating a new object Object ID: 2023-10-22 15:41:50.309343 0800 CST m0.003511901 Object ID: 2023-10-22 15:41:50.3117423 0800 CST m0.005911201 Object ID: 2023-10-22 15:41:50.3117423 0800 CST m0.005911201 Object ID: 2023-10-22 15:41:50.3117423 0800 CST m0.005911201 Object ID: 2023-10-22 15:41:50.3117423 0800 CST m0.005911201 Object ID: 2023-10-22 15:41:50.3117423 0800 CST m0.005911201 Object ID: 2023-10-22 15:41:50.3117423 0800 CST m0.005911201 Object ID: 2023-10-22 15:41:50.3117423 0800 CST m0.005911201 Object ID: 2023-10-22 15:41:50.3117423 0800 CST m0.005911201 Object ID: 2023-10-22 15:41:50.3117423 0800 CST m0.005911201可见在多个goroutine的并发情况下是安全另外可以观察到sync.Pool没有一直【Creating a new object】去New很多棋牌室。 小结 sync.Pool是Go语言标准库中的一个类型它提供了对象的缓存池功能。它的主要用途是存储那些可以被复用的临时对象以便在需要时快速获取而不是每次都进行新的对象分配。且多个 goroutine 同时使用 Pool 是安全的。 本文简述了sync.Pool的基础使用以及了如何使用其对实践棋牌室游戏的案例进行优化过程。 参考 官方doc 设计模式flyweight(享元
http://www.pierceye.com/news/739136/

相关文章:

  • 遵化建设局网站濮阳新闻综合频道
  • 百度云如何做网站论文网站建设与运营
  • 网站开发环境实验报告注册公司流程和费用是多少
  • 下载一个网站学院网站建设的作用
  • 济南专业网站优化花西子的网络营销策略
  • 武城网站建设费用网页设计试题及答案
  • 郑州外贸网站建设公司搜索引擎排名的三大指标
  • 温州专业微网站制作电台 主题 wordpress
  • wordpress做网站过程阳江网上车管所
  • 网站抓取qq上海自贸区注册公司流程
  • 深圳网站设计推荐刻烟台制作网站有哪些
  • 网站注册系统源码卢松松博客源码 wordpress博客模板
  • 网站开发进阶实训报告廊坊安次区网站建设公司
  • jquery插件网站推荐打开网站自动跳转代码
  • 佛山顺德容桂网站制作写作平台
  • 网站源码下载pdf文件品质好房
  • 山网站建设长沙网站开发湖南微联讯点不错
  • 网站建设的方案模板邢台123今天的招聘信息
  • 一个网站做app网站如何做收款二维码
  • 济南seo网站优化网站开发源代码 百度文库
  • 东西湖区建设局网站制作网站需要钱吗
  • 自己买服务器能在wordpress建网站欧美色影网站
  • 网站支付页面设计金华企业网站建设公司
  • wordpress评论模块临沂seo网站管理
  • 四川法制建设网站产品推广步骤
  • 服务器 网站建设比较容易做流量的网站
  • 网站建设基础实训报告天津滨海新区地图全图
  • 兰西网站建设深圳58同城招聘网
  • 兰州网站建设程序烟台赶集网网站建设
  • 自己建立网站后怎么做淘客wordpress需要npv