文章目录互斥锁mutex加解锁自旋加锁模式基本使用读写锁rwmutex接口互斥写阻塞读读阻塞写避免饿死 锁是为了避免竞争而建立的并发控制手段,为有序地访问共享资源。 互斥锁mutexMutex为一结构体类型,对外暴露Lock与Unlock接口。加锁与解锁要成对出现(应加锁后,立即用defer解锁),重复解锁会引起panic。Mutex内存布局:Mutex有以下状态:Locked:是否已被锁定(
锁的介绍分布式锁是一种排他锁,在分布式情况下只有一个线程(一台机器)能够抢到锁。 读写锁是一种互斥锁,里面分为读锁和写锁,读锁和读锁不互斥,读锁和写锁互斥,写锁和写锁也互斥。使用场景当系统的两个地方使用同一份数据的时候,并且不能同时使用时可以加一个读写锁进行阻塞,如刷新缓存的时候不允许使用缓存,使用的时候不允许刷新。 分布式锁可以在多个线程(机器)同时使用同一资源时使用,比如启动初始化,多集群只要
文章目录goroutine与thread比较M:N模型调度策略可运行队列协作式调度系统调用同步调用异步调用scheduler的陷阱 goroutine是Go语言中的轻量级线程实现,由Go运行时(runtime)管理。 goroutineGo提供一种机制,可在线程中自己实现调度,上下文切换更轻量(达到线程数少,而并发数并不少的效果)。Goroutine的主要概念:G(Goroutine):Go的协
转载 2024-06-10 10:30:05
68阅读
# Golang 操作 Redis 需要读写锁吗? 在使用 Go 语言操作 Redis 数据库时,程序员常常会面对并发读写的场景。在这种情况下,是否需要使用读写锁,成为一个重要的话题。本文将探讨这个问题,并提供相应的代码示例。 ## Redis 的并发模型 Redis 是一个高性能的内存数据库,设计上是单线程的,这意味着在同一时间内,只有一个命令会被处理。这使得 Redis 自身无需担心并发
原创 2024-08-11 06:41:45
124阅读
目录前言一、实现思路二、项目结构三、源码修改zinx/znet/connection.go四、完整源码 前言之前connection使用StartReader对客户端的数据接下来我们就要对Zinx做⼀个⼩⼩的改变,就是与客户端进修数据交互的Gouroutine由⼀个变成两个,⼀个专⻔负责从客户端读取数据,⼀个专⻔负责向客户端写数据。这么设计有什么好处,当然是⽬的就是⾼内聚,模块的功能单⼀Serv
1. 标准输入输出 os提供了标准输入输出文件: 2. os包读取文件 文件使用os.File类型的指针来表示,也叫作文件句柄。File是struct,表示一个open file descriptor。标准输入输出os.Stdin/os.Stdout都是*os.File。 os.File与unix
转载 2019-10-03 18:10:00
517阅读
2评论
# 使用 Golang 读写 MySQL 的完整指南 在掌握 Golang 读写 MySQL 之前,我们需要了解实现的整体流程。以下是一个简化的流程图,描述了从环境配置到数据读写的步骤。 ## 流程步骤 | 步骤 | 描述 | |------|--------------------| | 1 | 配置 MySQL 数据库 | | 2 | 建立 Gol
原创 2024-09-25 08:52:16
36阅读
go version go1.15.14 linux/amd64相关项目地址为:点我跳转 目录一、前言二、思路三、实现 一、前言  最近在写一个golang实现的字符串搜索与替换程序练手,其中一个很大的问题就是程序不能识别二进制文件与文本文件,导致搜索出来的内容会乱码,非常的不雅观。如果再不小心替换一下的话,就会造成很大的影响,所以这个问题必须解决。  我简单看了一下相关的标准库函数,发现gol
一、错误案例package main import ( "fmt" "time" ) var TestMap map[string]string func init() { TestMap = make(map[string]string, 1) } func main() { for i := 0; i < 1000; i++ { go Write("aaa") g
转载 2024-01-12 08:50:08
39阅读
读写文件,不添加文件路径,默认写入到GOPATH路径下 终端读写: 源码 文本I/O缓冲: 源码 - 打开文件,读取 ReadString源码 -读取一行的字符个数 package main import ( "fmt" "os" ) /* 从终端读取一行字符串,统计英文、数字、空格以及其他字符的数
原创 2021-05-11 15:06:41
597阅读
利用 excelize 工具包即可完成 xlsx 文件的读写,示例代码如下。 import ( "fmt" "github.com/360EntSecGroup-Skylar/excelize" "github.com/smartystreets/goconvey/convey" "strconv"
原创 2022-05-02 14:35:51
1239阅读
目录sqlx库使用指南sqlx介绍安装sqlx基本使用连接数据库查询插入、更新和删除NamedExecNamedQuery事务操作sqlx.Insqlx.In的批量插入示例表结构结构体bindvars(绑定变量)自己拼接语句实现批量插入使用sqlx.In实现批量插入使用NamedExec实现批量插入sqlx.In的查询示例in查询in查询和FIND_IN_SET函数sqlx库使用指南在项目中我们通
转载 2024-10-19 22:07:20
139阅读
package redistoolimport ( "github.com/fwhezfwhez/e
原创 2022-11-22 11:40:22
119阅读
go的系统包没有yaml读写的,需要下载第三方库go get gopkg.in/yaml.v2package mainimport ( "fmt" "gopkg.in/yaml.v2" "io/ioutil" "strconv"
原创 2022-07-14 15:23:59
1234阅读
package mainimport ( "encoding/json" "fmt" "io/ioutil" "strconv")type Study struct{ CourseName string `json:"CourseName"
原创 2022-07-14 15:24:04
1068阅读
文章目录golang 常用输入输出常用:读取文件成 []byte一种是生成 File,再利用 File 读或者写;另一种通过 ioutil 包直接对
原创 2022-05-31 07:02:02
453阅读
原文链接如何在 Golang 中使用 Redis 订阅/发布订阅,取消订阅和发布实现了发布/订阅消息范式(引自wikipedia),发送者(发布者)不是计划发送消息给特定的接收者(订阅者)。而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅。订阅者对一个或多个频道感兴趣,只需接收感兴趣的消息,不需要知道什么样的发布者发布的。这种发布者和订阅者的解耦合可以带来更大的扩展性和更加动态的网络拓扑
转载 2023-06-01 14:48:01
377阅读
前沿:         这两天试着用golang做一些高性能的api,不想把压力到聚合在平台的接口上。平台因为要做很多耗时间的操作,uwsgi下会出现少许错误,找了一圈不知道如何解决该问题。 暂时先绕道而行,先拿简单的接口来做测试,慢慢的把复杂的操作也迁移到golang上。           话说以前高性能
推荐 原创 2014-03-21 09:49:17
4897阅读
6点赞
5评论
原文出处:http://rfyiamcool.blog.51cto.com/1030776/1380754请支持该文原创作者 rfyiamcool 的博客 峰云,就她了。前沿:        这两天试着用golang做一些高性能的api,不想把压力到聚合在平台的接口上。平台因为要做很多耗时间的操作,uwsgi下会出现少许错误,找了一圈不知道如何解决该问题。
转载 精选 2014-03-31 13:06:54
941阅读
     利用主从数据库来实现读写分离,从而分担主数据库的压力。在多个服务器上部署mysql,将其中一台认为主数据库,而其他为从数据库,实现主从同步。其中主数据库负责主动写的操作,而从数据库则只负责主动读的操作(slave从数据库仍然会被动的进行写操作,为了保持数据一致性),这样就可以很大程度上的避免数据丢失的问题,同时也可减少数据库的连接,减轻主数据库的负载。一、数
转载 2023-08-21 12:48:13
126阅读
  • 1
  • 2
  • 3
  • 4
  • 5