摘要: # go语言select ## 使用 ```go func main() { ch1 := make(chan int, 1) ch2 := make(chan int, 1) go func() { time.Sleep(1 * time.Second) ch1 <- 1 }() go func( 阅读全文
posted @ 2023-05-31 20:20 每天提醒自己要学习 阅读(90) 评论(0) 推荐(0)
摘要: # TCP/IP详解-地址解析协议ARP(1) IP协议的设计目标是为跨越不同类型物理网络的分组交换提供互操作。这需要网络层软件使用的地址和底层网络硬件使用的地址之间进行转换。网络接口硬件通常有一个主要的硬件地址定位到正确的接口;否则,无法传输数据。但是,一个传统IPv4网路偶需要使用自己的地址:3 阅读全文
posted @ 2023-05-30 23:26 每天提醒自己要学习 阅读(123) 评论(0) 推荐(0)
摘要: # go语言调度gmp原理(5) ## 线程管理 go语言的运行时会通过调度器改变线程的所有权,它也提供了runtime.lockOSthread和runtime.UnlockOSthread,让我们能绑定goroutine和线程完成一些比较特殊的操作。goroutine应该在调用操作系统服务或者依 阅读全文
posted @ 2023-05-23 23:41 每天提醒自己要学习 阅读(115) 评论(0) 推荐(0)
摘要: # go语言调度gmp原理(4) ## 触发调度 下面简单介绍所有触发调度的时间点。因为调度器的runtime.schedule会重新选择goroutine在线程上执行,所以我们只要找到该函数的调用方,就能找到所有触发调度的时间点 这里重点介绍运行时触发调度的几条路径 * 主动挂起——runtime 阅读全文
posted @ 2023-05-17 23:57 每天提醒自己要学习 阅读(132) 评论(0) 推荐(0)
摘要: go语言调度gmp原理(3) 调度循环 调度器启动之后,go语言运行时会调用runtime.mstart和runtime.mstart1,前者会初始化g0的stackguard0和stackguard1字段,后者会初始化线程并调用runtime.schedule进入调度循环 func schedul 阅读全文
posted @ 2023-05-16 21:14 每天提醒自己要学习 阅读(67) 评论(0) 推荐(0)
摘要: # go语言调度gmp原理(2) ## 创建goroutine 通过runtime.newproc函数调用,runtime.newproc的入参是参数大小和表示函数的指针funcval,它会获取goroutine以及调用方的程序计数器,然后调用runtime.newproc1函数获取新的gorout 阅读全文
posted @ 2023-05-16 21:14 每天提醒自己要学习 阅读(139) 评论(0) 推荐(0)
摘要: # go语言调度gmp原理(1) ## 调度器启动 运行时通过runtime.schedinit初始化调度器 ```go func schedinit() { lockInit(&sched.lock, lockRankSched) lockInit(&sched.sysmonlock, lockR 阅读全文
posted @ 2023-05-14 20:30 每天提醒自己要学习 阅读(80) 评论(0) 推荐(0)
摘要: go语言调度gmp数据结构 g 表示goroutine,它是待执行的任务 m 表示操作系统的线程,它由操作系统的调度器调度和管理 p 表示处理器,可以把它看作在线程上运行的本地调度器 G goroutine是go语言调度器中待执行的任务,它在运行时调度器中的地位和线程在操作系统中的地位差不多,但是它 阅读全文
posted @ 2023-05-13 17:34 每天提醒自己要学习 阅读(65) 评论(0) 推荐(0)
摘要: redis事务 概述 redis中事务是一组命令的集合。事务同命令一样是redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行。 事务的原理是先将属于一个事务的命令发送给redis,然后再让redis依次执行这些命令 redis保证一个事务中的所有命令要么都执行,要么都不执行。除此之外, 阅读全文
posted @ 2023-05-11 16:57 每天提醒自己要学习 阅读(49) 评论(0) 推荐(0)
摘要: go语言channel 设计原理 go语言中提倡:不要通过共享内存方式进行通信,而应该通过通信的方式共享内存。 在很多编程语言中,多个线程传递数据的方式一般是共享内存,为了解决线程竞争,我们需要限制同一时间能够读写这些变量的线程数量,然而这与go语言的设计并不相同。 虽然在go语言中也能使用共享内存 阅读全文
posted @ 2023-04-29 18:44 每天提醒自己要学习 阅读(63) 评论(0) 推荐(0)