![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Go语言
文章平均质量分 92
Mr_tianyanxiaobai
这个作者很懒,什么都没留下…
展开
-
Go由浅入深(1): 常见数据结构原理
channel 是Golang在语言层面提供的goroutine间的通信方式,比Unix管道更易用也更轻便。channel主要用于进程内各goroutine间通信,如果需要跨进程通信,建议使用分布式系统的方法来解决。源代码循环队列 chan内部实现了一个环形队列作为其缓冲区buf,队列的长度是创建chan时指定的,存储了recvx 和 sendx 两个指针,表示现在已经读到了哪里,接下来往哪里写等待队列 recvq 和 sendq类型信息:一个channel只能传递一种类型的值,类型信息存储在hch原创 2022-06-01 09:57:27 · 229 阅读 · 0 评论 -
服务网格:service_mesh
简介Service Mesh 翻译为“服务网格”,作为服务间通信的基础设施层。它负责构成现代云原生应用程序的复杂服务拓扑来可靠地交付请求。在实践中,Service Mesh 通常以轻量级网络代理的形式实现,这些代理与应用程序代码部署在一起,对应用程序来说无需感知代理的存在。提出目的Service Mesh 目的是 解决系统架构微服务化后的服务间通信和治理问题。服务网格由Sidecar节点组成,这个模式的精髓在于实现了数据面(业务逻辑)和控制面的解耦。具体到微服务架构中,即给每一个微服务实原创 2022-05-16 20:14:49 · 384 阅读 · 0 评论 -
Go 语言入门:并发编程3(GMP调度原理)
GMP 原理与调度历史的发展(1) 单进程时代不需要调度器我们知道,一切的软件都是跑在操作系统上,真正用来干活 (计算) 的是 CPU。早期的操作系统每个程序就是一个进程,知道一个程序运行完,才能进行下一个进程,就是 “单进程时代”早期的单进程操作系统,面临 2 个问题:单一的执行流程,计算机只能一个任务一个任务处理。进程阻塞所带来的 CPU 时间浪费。(2) 多进程 / 线程时代有了调度器需求在多进程 / 多线程的操作系统中,就解决了阻塞的问题,因为一个进程阻塞 cpu 可以立刻切原创 2022-05-05 17:48:53 · 425 阅读 · 1 评论 -
Go 语言入门:并发编程2(多路复用与加锁)
并发编程(2)多路复用在某些场景下我们需要同时从多个通道接收数据。通道在接收数据时,如果没有数据可以接收将会发生阻塞。你也许会写出如下代码使用遍历的方式来实现:for{ // 尝试从ch1接收值 data, ok := <-ch1 // 尝试从ch2接收值 data, ok := <-ch2 …}这种方式虽然可以实现从多个通道接收值的需求,但是运行性能会差很多。为了应对这种场景,Go内置了select关键字,可以同时响应多个通道的操作原创 2022-05-05 16:51:21 · 630 阅读 · 0 评论 -
Go 语言入门:并发编程1(Goroutine与Channel的入门)
Goroutinegoroutine的概念类似于线程,但 goroutine是由Go的运行时(runtime)调度和管理的。Go程序会智能地将 goroutine 中的任务合理地分配给每个CPU。使用goroutineGo语言中使用goroutine非常简单,只需要在调用函数的时候在前面加上go关键字,就可以为一个函数创建一个goroutine。一个goroutine必定对应一个函数,可以创建多个goroutine去执行相同的函数。启动单个goroutine启动goroutine的原创 2022-05-05 16:05:32 · 788 阅读 · 0 评论 -
Go和 websocket 实现聊天室
websocekt 的导入WebSocket是一种在单个TCP连接上进行全双工通信的协议WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输需要安装第三方包:cmd中:go get -u -v github.com/gorilla/websocketwebsocket 聊天室数据结构分析需要有一个客户端 client 的 man原创 2022-05-04 11:22:07 · 711 阅读 · 0 评论