进程和线程和协程:进程是程序在操作系统中的一次执行过程,每个进程中至少包含一个线程(主线程)。线程是CPU调度的基本单位,一个线程上可以跑多个协程(协程是轻量级的线程)。goroutine就是由官方实现的"线程池"。一个协程对应一个函数,每个go关键字都会创建一个协程。也可以创建多个goroutine执行相同的函数。并发和并行并发:多线程程序在单核cpu上运行。并行:多线程程序在多核cpu上运行。
转载 2024-07-20 17:05:04
19阅读
这是Go语言单元测试系列教程的第4篇,介绍了如何在单元测试中使用gomock和gostub工具mock接口和打桩。在上一篇《Go单元测试 — 数据库 CRUD 的 Mock 测试》中,我们介绍了如何使用go-sqlmock和miniredis工具进行数据库测试。除了网络和数据库等外部依赖之外,我们在开发中也会经常用到各种各样的接口类型。本文就举例来演示如何在编写单元测试的时候对接口类型进行mock
转载 2024-03-01 20:08:26
40阅读
# Golang中使用MySQL表操作 在软件开发中,数据库是一个非常重要的组成部分,而MySQL作为一个流行的关系型数据库,经常被用于存储数据。在某些情况下,我们需要对数据库中的表进行锁定以保证数据的一致性和完整性。本文将介绍如何在Golang中使用MySQL进行表操作,并提供代码示例。 ## 什么是表是一种数据库,用于限制对数据库表的访问。在进行一些特定操作时,可能需要对表
原创 2024-06-26 03:40:28
141阅读
MySQL了解吗 当数据库有并发事务的时候,可能会产生数据的不一致,这时候需要一些机制来保证访问的次序,机制就是这样的一个机制。就像酒店的房间,如果大家随意进出,就会出现多人抢夺同一个房间的情况,而在房间上装上锁,申请到钥匙的人才可以入住并且将房间锁起来,其他人只有等他使用完毕才可以再次使用。隔离级别与的关系 在Read Uncommitted级别下,读取数据不需要加共享,这样就不会跟
的引入如果A有100元,同时对B、C转账,若处理是同时的,则此时同时读取A的余额为100元,在对两人转账后写回,A的余额不是0元而是50元。因此,为了防止这种现象的出现,要引入的概念,如只有在A对B的转账完成后,才可对C转账。机制用于管理对共享资源的并发访问。的基本类型悲观和乐观悲观(X Lock),正如其名,具有强烈的独占和排他特性。它指的是对数据被外界(包括本系统当前的其他事务,
转载 2023-12-01 11:12:21
83阅读
作者:八怪(高鹏) 水平有限,如有错误请谅解。源码版本8.0.21。在处理一个故障的时候怀疑大量的删除数据导致了查询比较慢,但是自己对purge线程的工作流程一直不太清楚,本文不做深入解析,只做工作流程解析,待着如下问题进行:del flag记录是否能够及时清理为什么History list length持续不为0,是否代表del flag记录没有清理purge线程触发的规则是什么一、p
转载 2023-08-27 19:44:59
100阅读
在做5.6.12 vs 5.6.11的性能对比时,大量update产生了很长的purge history list。手贱把innodb_fast_shutdowns设置为0了,结果Purge线程一直干活了,差不多两个小时才结束…. 我们知道,在MySQL5.5版本中,就已经开始将purge 任务从master线程中独立出来,而到了5.6,已经支持多个purge线程同时进行,简单的理了下代码逻
Go 语言机制Go 语言互斥Go语言的sync包中实现了两种 Mutex (互斥)和 RWMutex (读写),其中 RWMutex 是基于 Mutex 实现的,只读的实现使用类似引用计数器的功能。互斥Mutex 是互斥,有 Lock()加锁、Unlock()解锁两个方法,使用Lock()加锁后,便不能再次对其进行加锁,直到利用 Unlock()解锁对其解锁后才能再次加锁。适用于读
转载 2023-07-11 22:56:36
188阅读
Golang的包sync实现了两种类型的: syn
原创 2023-06-21 21:45:18
296阅读
1 show processlist; SHOW PROCESSLIST显示哪些线程正在运行。您也可以使用mysqladmin processlist语句得到此信息。如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程(也就是,与您正在使用的MySQL账户相关的线程)。如果有线程在update或者insert 某个表,此时进程的status为updating 或者 sen
转载 2024-02-02 10:46:24
62阅读
文章目录使用 SHOW 命令查看连接线程使用 information_schema.processlist使用 performance_schema.threads使用 mysqladmin 工具查看连接线程使用 CONNECTION_ID() 函数查看当前连接使用 KILL 命令终止线程使用 mysqladmin 工具终止线程 大家好,我是只谈技术不剪发的 Tony 老师,今天给大家介绍一下如
并发场景,机制尤为关键,我们一起通俗易懂的了解下golang吧 ...
转载 2021-08-19 14:34:00
349阅读
2评论
一、前言前两天做了一个导入的功能,导入开始的时候非常慢,导入2w条数据要1分多钟,后来一点一点的优化,从直接把list怼进Mysql中,到分配把list导入Mysql中,到多线程把list导入Mysql中。时间是一点一点的变少了。非常的爽,最后变成了10s以内。下面就展示一下过程。二、直接把list怼进Mysql使用mybatis的批量导入操作:@Transactional(rollbackFor
转载 2023-07-24 17:08:01
236阅读
Golang互斥
原创 2024-05-25 22:04:12
14阅读
## Golang Redis - 保护共享资源的常用方法 在并发编程中,保护共享资源是一个非常重要的问题。当多个goroutine同时访问临界区时,可能会导致数据竞争和不确定的结果。为了解决这个问题,我们可以使用来保护共享资源。在本文中,我们将介绍如何使用Golang和Redis实现一个简单的分布式。 ### 什么是分布式? 分布式是一种用于在分布式系统中协调并发访问的机制。它确
原创 2023-08-23 08:57:48
104阅读
线程原理之synchronized的原理的分类偏向轻量级重量级的命令waitnotifynotifyAll 我们先引入两张c++中的存储分布 java对象在c++中对应的对象分为三个部分,对象头、对象实例、对齐填充(不用管),主要是对象头中,存储了关于的信息 markoop的数据类型和可能存储的数据如下所示的分类原本synchronized是一个重量级,因为加锁和释放还是比
转载 2024-01-25 17:04:28
48阅读
func TryLockFile(filePath string) (bool, *os.File) { file, err := os.OpenFile(filePath, os.O_CREATE|os.O_RDWR, 0644) if err != nil { return false, nil
原创 3月前
38阅读
一、什么场景下需要用到当程序中就一个线程的时候,是不需要加锁的,但是通常实际的代码不会只是单线程,有可能是多个线程同时访问公共资源,所以这个时候就需要用到了,那么关于的使用场景主要涉及到哪些呢? 1. 多个线程在读相同的数据时2. 多个线程在写相同的数据时3. 同一个资源,有读又有写时 二、G ...
转载 2021-10-31 15:37:00
186阅读
2评论
go
原创 精选 2022-07-28 23:36:53
7857阅读
1点赞
并发情况下如何保证数据安全,一直都是开发人员每天都要面对的问题,稍不注意就会出现数据异常,造成不可挽回的结果。笔者根据自己的实际开发经验,总结了下面几种保证数据安全的技术手段:无状态不可变安全的发布volatilesynchronizedlockcasthreadlocal一.无状态我们都知道只有多个线程访问公共资源的时候,才可能出现数据安全问题,那么如果我们没有公共资源,是不是就没有这个问题呢?
  • 1
  • 2
  • 3
  • 4
  • 5