![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang
vierhang
这个作者很懒,什么都没留下…
展开
-
卷毛-网络编程基础(三)Tcp通信
Tcp通信下图是一次TCP通讯的时序图。TCP连接建立断开。包含大家熟知的三次握手和四次握手。三次握手:谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。好比两个人在打电话:Client:“喂,你听得到吗?”Server:“我听得到,你听得到我吗?”Client:“我能听到你,今天balabala…”建立连接(三次握手)的过程:客户端发送一个带SYN标志的TCP报文到服务器。这是上图中三次原创 2020-08-26 11:55:36 · 427 阅读 · 0 评论 -
卷毛-网络编程基础(二)什么是socket
Socket编程什么是SocketSocket,英文含义是【插座、插孔】,一般称之为套接字,用于描述IP地址和端口。可以实现不同程序间的数据通信。Socket起源于Unix,而Unix基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现,网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用:Socket(),该函数返回原创 2020-08-25 17:47:55 · 297 阅读 · 0 评论 -
卷毛-网络编程基础(一)网络协议
卷毛-go-网络编程基础(一)网络概述网络协议从应用的角度出发,协议可以理解为“规则”,即数据的发送端与接收端共同遵守的规则。举一个简单的自定义协议,我们给他命名为“卷毛文件传输协议”规定:传输文件原始名,接收方回答1表示收到文件名传输文件大小,接收方回答2表示收到文件大小传输文件内容,接收方接受数据完成回答3,表示文件内容接收完成由此,当有人想跟我传输文本,就要遵守我的协议,通过三次数据交互来完成文件的传输。而这个自定义规定,也可以说是属于卷毛与别人的协议。当这个协议越来越多人使用,原创 2020-08-25 17:31:15 · 241 阅读 · 0 评论 -
卷毛0基础学习Golang-并发编程-05锁与条件变量
卷毛0基础学习Golang-并发编程-05锁与条件变量条件变量条件变量的作用并不保证在同一时刻仅有一个协程(线程)访问某个共享的数据资源,而是在对应的共享数据的状态发生变化时,通知阻塞在某个条件上的协程(线程)。条件变量不是锁,在并发中不能达到同步的目的,因此条件变量总是与锁一块使用。如果仓库队列满了,我们可以使用条件变量让生产者对应的goroutine暂停(阻塞),但是当消费者消费了某个产品后,仓库就不再满了,应该唤醒(发送通知给)阻塞的生产者goroutine继续生产产品。GO标准库中的sys.原创 2020-08-18 16:32:23 · 233 阅读 · 0 评论 -
卷毛0基础学习Golang-并发编程-04生产者与消费者模型
卷毛0基础学习Golang-并发编程-04生产者与消费者模型生产者消费者模型单向channel最典型的应用是“生产者消费者模型”所谓“生产者消费者模型”: 某个模块(函数等)负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数、协程、线程、进程等)。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者。单单抽象出生产者和消费者,还够不上是生产者/消费者模型。该模式还需要有一个缓冲区处于生产者和消费者之间,作为一个中介。生产者把数据放入缓冲区,而消费者从缓冲区原创 2020-08-11 10:28:43 · 148 阅读 · 0 评论 -
卷毛0基础学习Golang-并发编程-03 channel管道
channelchannel是Go语言中的一个核心类型,可以把它看成管道。并发核心单元通过它就可以发送或者接收数据进行通讯,这在一定程度上又进一步降低了编程的难度。channel是一个数据类型,主要用来解决协程的同步问题以及协程之间数据共享(数据传递)的问题。goroutine运行在相同的地址空间,因此访问共享内存必须做好同步。goroutine 奉行通过通信来共享内存,而不是共享内存来通信。引⽤类型 channel可用于多个 goroutine 通讯。其内部实现了同步,确保并发安全。定义cha原创 2020-08-11 10:14:55 · 171 阅读 · 0 评论 -
卷毛0基础学习Golang-并发编程-02 Goroutine
Goroutinegoroutine是Go并行设计的核心。goroutine说到底其实就是协程,它比线程更小,十几个goroutine可能体现在底层就是五六个线程,Go语言内部帮你实现了这些goroutine之间的内存共享。执行goroutine只需极少的栈内存(大概是4~5KB),当然会根据相应的数据伸缩。也正因为如此,可同时运行成千上万个并发任务。goroutine比thread更易用、更高效、更轻便。一般情况下,一个普通计算机跑几十个线程就有点负载过大了,但是同样的机器却可以轻松地让成百上千个go原创 2020-08-10 17:22:42 · 149 阅读 · 0 评论 -
卷毛0基础学习Golang-并发编程,01 什么是并发
卷毛0基础学习Golang-并发编程,什么是并发Go并发编程概述简而言之,所谓并发编程是指在一台处理器上“同时”处理多个任务。随着硬件的发展,并发程序变得越来越重要。Web服务器会一次处理成千上万的请求。平板电脑和手机app在渲染用户画面同时还会后台执行各种计算任务和网络请求。即使是传统的批处理问题–读取数据,计算,写输出–现在也会用并发来隐藏掉I/O的操作延迟以充分利用现代计算机设备的多个核心。计算机的性能每年都在以非线性的速度增长。宏观的并发是指在一段时间内,有多个程序在同时运行。并发在微观原创 2020-08-10 16:47:21 · 164 阅读 · 0 评论 -
卷毛0基础学习Golang-基础-struct结构体
卷毛0基础学习Golang-基础-struct结构体持续更新中-----结构体类型有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性。显然单独定义以上变量比较繁琐,数据不便于管理。结构体是一种聚合的数据类型,它是由一系列具有相同类型或不同类型的数据构成的数据集合。每个数据称为结构体的成员。结构体初始化type Student struct { id int name string sex byte age int addr st原创 2020-08-07 14:19:25 · 198 阅读 · 0 评论 -
卷毛0基础学习Golang-基础-map字典
卷毛0基础学习Golang-基础-map字典持续更新中-----欢迎收藏Go语言中的map(映射、字典)是一种内置的数据结构,它是一个无序的key-value对的集合,比如以身份证号作为唯一键来标识一个人的信息。Go语言中并没有提供一个set类型,但是map中的key也是不相同的,可以用map实现类似set的功能。map格式为: map[keyType]valueType在一个map里所有的键都是唯一的,而且必须是支持==和!=操作符的类型,切片、函数以及包含切片的结构类型这些类型由于具有原创 2020-08-07 14:07:40 · 176 阅读 · 0 评论 -
卷毛0基础学习Golang-基础-slice切片
卷毛0基础学习Golang-基础-slice切片切片简述数组的长度在定义之后无法再次修改;数组是值类型,每次传递都将产生一份副本。显然这种数据结构无法完全满足开发者的真实需求。Go语言提供了数组切片(slice)来弥补数组的不足。Slice(切片)代表变长的序列,序列中每个元素都有相同的类型。一个slice类型一般写作[]T,其中T代表slice中元素的类型;slice的语法和数组很像,只是没有固定长度而已。数组和slice之间有着紧密的联系。一个slice是一个轻量级的数据结构,提供了访问数组子序原创 2020-08-07 11:46:35 · 179 阅读 · 0 评论 -
卷毛0基础学习Golang-基础-指针
卷毛0基础学习Golang-基础-指针指针是一个代表着某个内存地址的值。这个内存地址往往是在内存中存储的另一个变量的值的起始位置。Go语言保留了指针,但与C语言指针有所不同。主要体现在:默认值 nil操作符 “&” 取变量地址, “*” 通过指针访问目标对象不支持指针运算,不支持 “->” 运算符,直接⽤ “.” 访问目标成员new 函数表达式new(T)将创建一个T类型的匿名变量,所做的是为T类型的新值分配并清零一块内存空间,然后将这块内存空间的地址作为结果返回,而这个结果原创 2020-08-07 11:06:02 · 173 阅读 · 0 评论