当前位置:网站首页>开发那些事儿:如何利用Go单例模式保障流媒体高并发的安全性?
开发那些事儿:如何利用Go单例模式保障流媒体高并发的安全性?
2022-07-02 01:28:00 【TSINGSEE】
作为开发者,熟知不同语言的特性、灵活运用各种语言的结合都是开发者需要考虑的内容。TSINGSEE青犀视频的研发人员在平台开发过程中,智能分析方面用Python编译会比较多,在部分基层调用能力上则采用Golang比较多,偶尔也会用到Java来做流式编程。

今天和大家分享一点开发中的实践经验:关于Go的单例模式。
在GO设计模式中,有一种模式为单例模式。单例模式也叫单子模式,是常用的模式之一,它能够保证系统运行中一个类只创建一个实例。Go语言实现单例模式有四种方式,分别是懒汉式、饿汉式、双重检查和sync.Once。

下面是一个简单的GO实现的单例模式。代码如下:
type singleton struct{}
var instance = &singleton{}
func GetSingleton() *singleton {
return instance
}
定义singleton一个结构体,并初始化instance对象。GetSingleton()函数可获取singleton这个结构体的单实例对象。这种创建单例对象是在包加载时,就会立即创建对象。但是大多数情况下不推荐使用。
如果单实例化时,初始化内容过多,则会造成程序加载的时间比较长。我们需要将instance的初始化对象移动到GetSingleton()函数里去。
type singleton struct{}
var instance *singleton
func GetSingleton() *singleton {
if instance == nil {
instance = &singleton{}
}
return instance
}
相比较上一种单例,这个单例是在GetSingleton()函数内部调用初始化instance的值。所以第一次调用的延迟到了GetSingleton()中。
这种需要判断instance == nil的情况,但是仅判断nil并不十分可靠。如果存在多个goroutine同时调用,GetSingleton()则无法保证并发安全。
那么这种情况就需要加一个锁,如果同时调用,这样就能保证并发安全。代码参考如下:
import "sync"
type singleton struct{}
var instance *singleton
var mtx sync.Mutex
func GetSingleton() *singleton {
if instance == nil {
mtx.Lock()
defer mtx.Unlock()
if instance == nil {
instance = &singleton{}
}
}
return instance
}

作为一家起源于EasyDarwin开源框架的技术型企业,在开发过程中,我们也乐于和所有的技术开发爱好者们一起交流代码技术、分享开发经验,为大家提供一些小小的参考。
TSINGSEE青犀视频的平台可拓展性强、兼容性高,操作简单、易于集成,在线下场景中均有大量落地应用。为了便于用户调用、集成与二次开发,我们的平台均提供了丰富的API接口供用户自由使用。感兴趣的用户可以前往演示平台进行体验或部署测试。
边栏推荐
- No converter found for return value of type: class
- Bat Android Engineer interview process analysis + restore the most authentic and complete first-line company interview questions
- Luogu p1775 stone merger (weakened version)
- Learning note 3 -- Key Technologies of high-precision map (Part 1)
- SAP ui5 beginner tutorial XXI - trial version of custom formatter of SAP ui5
- [image enhancement] vascular image enhancement based on frangi filter with matlab code
- I Brief introduction of radio energy transmission technology
- NeRV: Neural Reflectance and Visibility Fields for Relighting and View Synthesis
- 只是以消费互联网的方式和方法来落地和实践产业互联网,并不能够带来长久的发展
- Global and Chinese markets for maritime services 2022-2028: Research Report on technology, participants, trends, market size and share
猜你喜欢

Day 13 of hcip (relevant contents of BGP agreement)

Finally got byte offer, 25-year-old inexperienced experience in software testing, to share with you

About asp Net core uses a small detail of datetime date type parameter

SAP ui5 beginner tutorial 20 - explanation of expression binding usage of SAP ui5

Learning note 24 - multi sensor post fusion technology

浅浅了解Servlet

Infiltration records of CFS shooting range in the fourth phase of the western regions' Dadu Mansion

【疾病检测】基于BP神经网络实现肺癌检测系统含GUI界面

k线图形态这样记(口诀篇)

Exclusive delivery of secret script move disassembly (the first time)
随机推荐
Global and Chinese market of aircraft MRO software 2022-2028: Research Report on technology, participants, trends, market size and share
CTF daily question day45 sensor
[IVX junior engineer training course 10 papers] 06 database and services
969 interlaced string
What are the affordable Bluetooth headsets? Student party parity Bluetooth headset recommendation
Docker安装Oracle_11g
[IVX junior engineer training course 10 papers] 04 canvas and a group photo of IVX and me
How does schedulerx help users solve the problem of distributed task scheduling?
笔者更加愿意将产业互联网看成是一个比消费互联网要丰富得多的概念
学习笔记24--多传感器后融合技术
基于SSM实现微博系统
Minimize the error
The pain of Xiao Sha
关于ASP.NET CORE使用DateTime日期类型参数的一个小细节
How does schedulerx help users solve the problem of distributed task scheduling?
Recommend an online interface mock tool usemock
Basic usage of three JS high-order functions --filter---map---reduce
[Obsidian] wechat is sent to Obsidian using remotely save S3 compatibility
[IVX junior engineer training course 10 papers to get certificates] 0708 news page production
[Chongqing Guangdong education] Tianshui Normal University universe exploration reference