Golang
文章平均质量分 70
Ostrich5yw
I'm here,As always
展开
-
Go学习笔记—并发高级
Go并发机制 协程:一个线程可以对应多个协程,协程串行运行在用户空间。协程运行在线程之上,当一个协程执行完成后,可以选择主动让出,让另一个协程运行在当前线程之上。协程并没有增加线程数量,只是在线程的基础之上通过分时复用的方式运行多个协程,而且协程的切换在用户态完成,切换的代价比线程从用户态到内核态的代价小很多。 Go摒弃线程、进程、协程,提出goroutine:M(machine):一个M代表一个内核线程(与KSE一一对应)P(processor):一个P代表执行一个Go代码片段所必须的资源原创 2021-12-12 21:03:21 · 423 阅读 · 0 评论 -
Go学习笔记—锁(sync包)
并发安全和锁1. sync.Mutex—实现互斥锁var lock sync.Mutexvar x intfunc add() { //这样,在多个goroutine同时访问x时,才不会造成x错误 for i := 0; i < 5000; i++ { lock.Lock() // 加锁 x = x + 1 lock.Unlock() // 解锁 }}2. sync.RWMutex—实现读写互斥锁 读写锁分为两种:读锁和写锁。当一个goroutine获取读锁之后,其原创 2021-12-01 11:42:50 · 253 阅读 · 0 评论 -
Go学习笔记—标准库Context
标准库Context 由于goroutine没有父子关系,多个goroutine都是被平行的调度,所以在拉起多个goroutine后,程序的执行模型并没有维护树状结构的goroutine树,所以无法靠语法层面,通知树中所有goroutine退出。context库就是为了解决这个问题而被引入,目的:(1) 退出通知机制:通知可以传递给整个goroutine调用树上的每一个goroutine(2) 传递数据:数据可以传递给goroutine调用树上的每一个goroutine1. context—基础原创 2021-12-01 11:41:52 · 231 阅读 · 0 评论 -
Go学习笔记—Channel通道
Go并发通信——Channel Go语言的并发模型是CSP(Communicating Sequential Processes),提倡通过通信共享内存而不是通过共享内存而实现通信。(DO NOT COMMUNICATE BY SHARING MEMORY; INSTEAD, SHARE MEMORY BY COMMUNICATING.) 如果说goroutine是Go程序并发的执行体,channel就是它们之间的连接。channel是可以让一个goroutine发送特定值到另一个gorouti原创 2021-12-01 11:40:48 · 545 阅读 · 0 评论 -
Go学习笔记—Go并发基础
Go并发基础并行:程序在任意时刻内都是同时运行的并发:程序在单位时间内都是同时运行的扇入:多条通道聚合到一条通道中(select聚合,加密解密服务)扇出:一条通道发散到多条通道中(goroutine实现并发,Web服务器并发处理用户请求) 在java/c++中我们要实现并发编程的时候,我们通常需要自己维护一个线程池,并且需要自己去包装一个又一个的任务,同时需要自己去调度线程执行任务并维护上下文切换。 Go语言中的goroutine就是这样一种机制,goroutine的概念类似于线程,原创 2021-12-01 11:38:54 · 309 阅读 · 0 评论 -
Go学习笔记—多线程
多线程编程 一个进程可以包含多个线程,这些线程运行的一定是同一个程序(进程==程序),且都由当前进程中已经存在的线程通过系统调用的方式创建出来。进程是资源分配的基本单位,线程是调度运行的基本单位,线程不可独立于进程存在。 所有线程都有自己的线程栈,以此存放自己的私有数据(包含在进程的虚拟内存地址中)。一个进程中的很多资源也会被线程所共享,包括在当前进程虚拟内存地址中存放的代码段、数据段、堆、信号处理函数、文件描述符(非负整数)。正因如此,创建一个线程时不会像创建一个进程时那原创 2021-12-01 10:31:52 · 7138 阅读 · 0 评论 -
Go学习笔记—基于Go的进程间通信
IPC(Inter-Process Communication 进程间通信)一般方法:(1) 半双工Unix管道 (2) FIFOs(命名管道) (3) 消息队列 (4) 信号量 (5) 共享内存 (6) 网络Socket (7) RPC(远程过程调用)原创 2021-12-01 10:20:42 · 8267 阅读 · 0 评论 -
strconv---用来基本类型之间的转换
strconv---用来基本类型之间的转换字符串转int:Atoi(s string)(i int,err error)int转字符串: Itoa(i int)stringstring转换为对应TP类型:ParseBool()、ParseFloat()、ParseInt()、ParseUint()。因为string转其它类型可能会失败,所以这些函数都有第二个返回值表示是否转换成功strconv.ParseBool(str string)(value bool,err error)//接受1、0原创 2021-04-09 16:00:13 · 974 阅读 · 0 评论