摘要:
Go 语言中的字符类型主要有两种: byte (uint8 的别名) 用于表示 ASCII 字符 占用 1 个字节 用单引号表示,如 'a' rune (int32 的别名) 用于表示一个 Unicode 码点(code point) 占用 4 个字节 用单引号表示,如 '中' 用于处理中文、日文等 阅读全文
摘要:
sync.RWMutex (读写锁) 和 sync.Mutex (互斥锁) 的主要区别在于它们的锁定机制: sync.Mutex (互斥锁): var mutex sync.Mutex // 加锁 mutex.Lock() // 解锁 mutex.Unlock() 同一时间只允许一个 gorouti 阅读全文
摘要:
无缓冲通道和有缓冲通道在Go语言中用于不同的场景,它们的选择主要取决于你的应用需求、并发模型以及你希望如何管理goroutine之间的通信。 无缓冲通道 特点: 发送和接收操作是同步的。也就是说,发送方只有在接收方准备好接收数据时才能成功发送数据,反之亦然。 提供了一种自然的方式来实现gorouti 阅读全文
摘要:
在 Go 语言中,遍历通道时选择 for range 还是普通 for 循环,取决于具体场景和需求。以下是两者的对比和最佳实践总结: 1. 使用 for range 的场景 当通道会被明确关闭,且需要接收所有数据直到关闭时,for range 是最简洁和安全的选择: ch := make(chan 阅读全文
摘要:
goroutine 泄漏(goroutine leak)是指创建的 goroutine 无法被正常结束和回收,一直处于阻塞状态,占用系统资源。这就像内存泄漏一样,会逐渐消耗系统资源。 让我用几个典型的例子来说明 goroutine 泄漏的情况: 1. channel 发送阻塞导致泄漏:```gofu 阅读全文
摘要:
### 线程安全与线程不安全 **线程安全**是指一个多线程程序中的对象或资源可以在多个线程之间共享,而不会导致数据损坏、竞态条件(race conditions)或其他未定义行为。为了实现线程安全,通常需要使用同步机制,如锁(locks)、信号量(semaphores)、原子操作(atomic o 阅读全文
摘要:
死锁是指两个或多个goroutine(或者进程、线程)相互等待对方持有的资源,结果导致这些goroutine都无法继续执行的情况。换句话说,每个goroutine都在等待一个永远不会发生的事件,因为触发这个事件的条件依赖于其他同样被阻塞的goroutine。 在Go语言中,死锁常常发生在使用通道(c 阅读全文
摘要:
都可以用 for range 但是channel的遍历会移除元素 slice的不会 遍历channel前,最好close intChan := make(chan int, 4)for i := 1; i <= 4; i++ { intChan <- i}close(intChan)for num 阅读全文
摘要:
查看和设置Linux内核的网络参数,如`tcp_syncookies`、`tcp_max_syn_backlog`等,可以通过命令行工具`sysctl`来完成。以下是具体的操作步骤: ### 查看当前参数值 要查看当前的内核参数设置,可以使用`sysctl`命令加上参数名称。例如,要查看与TCP S 阅读全文
摘要:
https://blog.csdn.net/u014361280/article/details/142909966 阅读全文