Golang并发应用
文章平均质量分 61
qq_34893654
这个作者很懒,什么都没留下…
展开
-
go中尽量不使用全局变量
在Go中,全局变量的使用存在安全隐患,因为全局变量可能会被多个线程并发访问和修改,这样就会导致数据的不一致性或者出现竞态条件。这些问题可能会导致程序运行时崩溃或者产生无法预测的结果。另外,全局变量还会破坏代码的可读性和可维护性,尤其是当项目变得越来越大和复杂时,全局变量的使用会使代码更难以理解和调试。因此,建议尽可能地避免使用全局变量,而是使用函数参数、局部变量或者结构体成员等方式来实现对数据的共享和管理。总之,虽然全局变量可能很方便,但是如果不注意安全和代码的可维护性,可能会给程序带来很多麻烦。原创 2023-05-23 22:07:59 · 555 阅读 · 0 评论 -
死锁的场景
当一个锁已经被一个 goroutine 获取了,另一个 goroutine 尝试获取相同的锁时,会发生死锁。当一个 goroutine 执行一个需要长时间处理的操作时,如果其他 goroutine 尝试获取该 goroutine 持有的锁,则会被阻塞。当一个 goroutine 持有资源 A,尝试获取资源 B,而另一个 goroutine 持有资源 B,尝试获取资源 A,会发生死锁。当一个 goroutine 在持有一个锁的情况下递归调用函数,而该函数尝试获取相同的锁时,会导致死锁。原创 2023-03-10 13:46:35 · 138 阅读 · 0 评论 -
深入讲解竞态
当两个或多个 goroutine 同时访问和修改共享变量时,就会发生竞态条件。这种情况下,程序的行为就不再可预测,可能会导致数据不一致或者崩溃等问题。竞态条件是并发程序中常见的问题,因此在 Golang 中,有很多机制可以帮助我们避免竞态条件。原创 2023-03-09 19:57:53 · 106 阅读 · 0 评论 -
实现高性能的MySQL 连接库
在每个 goroutine 中,首先从连接池中获取一个连接,然后执行 SQL 操作。批量处理:对于需要大量执行的 SQL 语句,可以使用批量处理的方式,将多个 SQL 语句打包成一个请求发送到数据库中,从而减少了网络传输的开销和数据库的操作次数,从而提高了查询的效率。封装常用的数据库操作方法,如查询、插入、更新和删除等,并使用预处理语句执行 SQL,提高执行效率和防止 SQL 注入攻击。使用 Go 语言特性如 channel 和 goroutine,实现异步并发执行 SQL 操作,提高数据库操作的性能。原创 2023-02-27 10:05:41 · 97 阅读 · 0 评论 -
atomic并发场景应用案例
需要注意的是,自旋锁适用于竞争激烈但持锁时间较短的情况下,例如对于一个临界区的读写操作,自旋锁可以大大减少上下文切换和锁竞争的开销,提高程序的性能。资源池是一种常用的优化技术,它维护了一组已经初始化好的资源,并在需要时分配这些资源,使用完毕后将其放回池中,而不是每次都重新创建资源。包提供了原子操作的相关函数,可以在不使用锁的情况下,实现多个goroutine之间的数据同步,以避免出现竞争条件和锁竞争的问题。自旋锁是一种基于忙等待的锁,即在竞争激烈的情况下,每个线程都会反复检查锁是否被释放。原创 2023-02-25 10:41:26 · 275 阅读 · 0 评论 -
互斥锁并发场景应用案例
互斥锁最常见的应用场景是对共享的数据结构进行读写操作。在 Go 语言中,map 是一种常见的数据结构,在多个 goroutine 并发读写时需要使用互斥锁来保证操作的安全性。原创 2023-02-25 10:42:31 · 51 阅读 · 0 评论 -
互斥锁并发场景应用案例
互斥锁(Mutex)是 Go 语言中最基础、最常用的并发控制方式之一,其主要目的是在不同的 goroutine 中保护共享资源,保证同一时间只有一个 goroutine 能够访问该资源,避免竞态条件(Race Condition)的发生。不过,过度使用互斥锁也会带来一些副作用,比如降低程序的性能,增加程序的复杂度等等,因此在实际开发中需要根据具体情况权衡使用。在 Go 语言中,map 是一种常见的数据结构,在多个 goroutine 并发读写时需要使用互斥锁来保证操作的安全性。slice、数组、链表。原创 2023-02-25 10:40:03 · 315 阅读 · 0 评论 -
waitGroup并发场景应用案例
然后我们启动了多个goroutine执行这些任务,每个goroutine完成任务后都会调用waitGroup的Done()方法,表示任务已经完成。在输出结果中,我们可以看到所有任务都被正确地执行,并且最后输出了“所有任务执行完毕”的信息。在Golang的并发编程中,经常需要同时请求多个HTTP接口,然后将它们返回的数据组合起来使用,这个过程可以通过waitGroup实现。在最后,我们调用waitGroup的Wait方法,等待所有的goroutine执行完成后,再将数据打印出来。原创 2023-02-25 10:29:47 · 93 阅读 · 0 评论 -
channel并发场景应用案例
并发 channel 案例, 多个 channel 同时读取,生产者和消费者模型原创 2023-02-24 12:25:19 · 106 阅读 · 1 评论