![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang
文章平均质量分 79
飞翔的乌龟
这个作者很懒,什么都没留下…
展开
-
Go的并发练习题目
现在有4个协程,分别对应编号为1,2,3,4,每秒钟就有一个协程打印自己的编号,要求编写一个程序,让输出的编号总是按照1,2,3,4,1,2,3,4这样的规律一直打印下去。原创 2024-01-16 11:00:51 · 643 阅读 · 0 评论 -
Go语言中的Pool
sync.Pool是一个非常有用的工具,它可以提高资源的利用率,减少资源的创建和销毁带来的开销,提高程序的性能。当一个用户访问web应用程序时,应用程序会从pool中获取一个数据库连接,并在处理完用户的请求后将数据库连接归还给pool。Go语言中的pool是一个资源池,它可以存储一定数量的资源,这些资源可以被多个goroutine共享。Pool可以提高资源的利用率,减少资源的创建和销毁带来的开销。sync.Pool还可以减少资源的创建和销毁带来的开销,从而提高程序的性能。原创 2024-01-15 17:35:06 · 1455 阅读 · 0 评论 -
Go语言网络轮询器
Go语言的网络轮询器是一个非常强大的工具,它可以帮助我们轻松地实现网络并发编程。网络轮询器的工作原理是将多个网络连接映射到一个或多个操作系统线程上,并根据网络连接的状态来决定哪个网络连接应该在哪个线程上进行读写操作。阻塞式网络轮询器是指网络轮询器在等待网络连接可读或可写时会阻塞当前线程。非阻塞式网络轮询器是指网络轮询器在等待网络连接可读或可写时不会阻塞当前线程。Go语言的网络轮询器是基于非阻塞式 I/O 模型实现的,这意味着它不会阻塞当前线程。原创 2024-01-13 21:10:52 · 676 阅读 · 0 评论 -
Go语言的调度器
Go语言的调度器是一个非常强大的工具,它可以帮助我们轻松地实现并发编程。调度器的工作原理是将多个协程映射到多个操作系统线程上,并根据协程的状态来决定哪个协程应该在哪个线程上运行。协作式调度是指协程主动放弃 CPU 时间片,以便其他协程有机会运行。抢占式调度是指调度器强制剥夺一个协程的 CPU 时间片,以便另一个协程可以运行。Go语言的调度器使用的是抢占式调度算法,这意味着调度器可以随时中断一个协程的执行,并将 CPU 时间片分配给另一个协程。原创 2024-01-13 21:03:22 · 482 阅读 · 0 评论 -
Go定时器
Go语言的定时器是一个非常强大的工具,它可以帮助我们轻松地实现各种定时任务和超时控制。定时器算法的原理也很简单,它是一种基于时间轮算法实现的。原创 2024-01-13 20:56:33 · 737 阅读 · 0 评论 -
Go语言中的Channel
Channel是Go语言中一种重要的并发原语,它允许goroutine之间安全地交换数据。Channel是一个类型化的队列,它可以存储一个特定类型的值。goroutine可以通过发送和接收操作来向channel中写入和读取数据。原创 2024-01-12 13:48:34 · 658 阅读 · 1 评论 -
Go 语言 panic 和 recover 详解
panic()和recover()是 Go 语言中用于处理错误的两个重要函数。panic()函数用于中止程序并引发panic,而recover()函数用于捕获panic并恢复程序的执行。原创 2024-01-11 17:34:17 · 1163 阅读 · 0 评论 -
Go 语言中的锁
并发是同时发生多个计算或事件的能力。并发通常通过同时执行多个任务或进程来实现,这些任务或进程共享相同的资源(例如内存或处理器)。并发使用的基本机制被称为锁。在Go语言中,锁是一个类型变量,它包含一个内部计数器,用于跟踪已获取的锁的数量。当一个goroutine获取一个锁时,它会将计数器增加一;当一个goroutine释放一个锁时,它会将计数器减少一。Go语言中提供了五种类型的锁:互斥锁(mutex)、读写锁(RWMutex)、等待组(WaitGroup)、一次性锁(Once)和条件变量(Cond)。原创 2024-01-12 10:28:19 · 679 阅读 · 0 评论 -
Go语言中的同步原语:ErrGroup、Semaphore和SingleFlight
并发是同时发生多个计算或事件的能力。并发通常通过同时执行多个任务或进程来实现,这些任务或进程共享相同的资源(例如内存或处理器)。并发使用的基本机制被称为锁。在Go语言中,锁是一个类型变量,它包含一个内部计数器,用于跟踪已获取的锁的数量。当一个goroutine获取一个锁时,它会将计数器增加一;当一个goroutine释放一个锁时,它会将计数器减少一。原创 2024-01-12 13:39:57 · 1411 阅读 · 0 评论 -
Go语言的垃圾回收器
Go语言的GC是一个高效、自动的内存管理系统。GC可以帮助程序员避免内存泄漏和内存错误,从而提高程序的稳定性和可靠性。GC使用标记-清除算法来回收内存,并采用了逃逸分析、内存池和大对象分配等优化策略来提高性能。在实际项目中,可以通过减少内存分配次数、避免分配大对象、使用逃逸分析和使用性能分析工具等方式来优化GC的性能。原创 2024-01-12 16:15:51 · 1185 阅读 · 0 评论 -
Go语言的内存分配器
Go语言的内存分配器是一个高效、低延迟的内存分配器,它可以满足Go语言并发编程的需求。内存分配器使用Bump-the-pointer的分配策略,并采用了逃逸分析、内存池和大对象分配等优化策略来提高性能。在实际项目中,可以通过减少内存分配次数、避免分配大对象、使用逃逸分析和使用性能分析工具等方式来优化内存分配器的性能。原创 2024-01-12 15:43:03 · 1054 阅读 · 0 评论 -
Go语言中的Select:深度解析与实战案例
select是操作系统中的系统调用,我们以前在学校中学习操作系统课程或者在工作当中,肯定都使用过或者了解过selectpoll和epoll等函数构建 I/O 多路复用模型提升程序的性能。Go 语言的select与操作系统中的select很相似,今天这篇文章会深度解析 Go 语言select关键字。在Go语言中,select语句用于处理多个通信操作,如通道操作。它允许我们等待多个操作完成,并根据条件执行相应的代码块。select语句在并发编程中非常有用,特别是当我们需要处理多个通道操作时。select。原创 2024-01-10 18:54:44 · 1550 阅读 · 0 评论 -
Go语言的指针(深度解析)
通过以上内容的学习和理解,我们可以更好地掌握Go语言中的指针概念、使用方法和注意事项。在编写代码时,我们应该遵循类型匹配的原则,避免空指针和内存泄漏的风险。同时,了解指针的运算和比较操作可以帮助我们更好地利用指针进行编程和优化性能。尽管Go语言提供了一些自动管理内存的工具和机制,但我们仍然需要了解指针的基本概念和使用技巧来编写更加高效和可靠的代码。原创 2024-01-10 14:43:54 · 1543 阅读 · 0 评论 -
Go语言的编译过程
Go 语言和Java语言一样都是一门需要编译才能运行的编程语言,也就是说代码在运行之前需要通过编译器生成二进制机器码。Go 语言编译器的源代码在目录中,目录下的文件共同组成了 Go 语言的编译器,而编译过程是一个多阶段的过程,它将源代码转换为机器代码。词法分析:将源代码分解为标记(token)。语法分析:将标记组合成语法结构。类型检查:检查语法结构是否符合Go语言的类型系统。代码生成:将语法结构转换为机器代码。链接:将机器代码链接成一个可执行程序。原创 2024-01-09 23:17:05 · 1391 阅读 · 0 评论