![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go
gengqianyu
不要半途而废
展开
-
使用glang实现的栈及测试
代码stack.gopackage stack//defined a element structtype Element struct { value interface{} prev *Element}// Prev get the prev elementfunc (e *Element) Prev() *Element { if p := e.prev; p !=...原创 2020-03-21 16:24:11 · 230 阅读 · 0 评论 -
Go语言的协程,系统线程以及CPU管理
创建系统线程以及在系统线程间切换,会对程序的内存和性能造成较大的开销。Go的目标是尽量利用CPU多核资源。设计之初就考虑了高并发性。M,P,G 模型为了达到这个目标,Go拥有一个将协程调度到系统线程执行的调度器。这个调度器定义了三个核心概念,在Go源码中是这样解释的:M - worker thread, or machine. 工作线程P - processor(逻辑处理器), 执...翻译 2019-12-20 20:58:40 · 3571 阅读 · 0 评论 -
Golang协程goroutine
进程,线程和协程概念需要区分进程、线程(内核级线程)、协程(用户级线程)三个概念。进程进程是程序在一个数据集上的一次运行过程。进程是操作系统进行资源分配的基本单位。每个进程都有自己的独立内存空间,不同进程通过进程间同步信号量来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。线程线程是进程中的一个...原创 2019-12-12 22:35:12 · 522 阅读 · 0 评论 -
Golang并发编程原理
前引Go语言是为并发而生的语言,Go语言是为数不多的在语言层面实现并发编程的语言;也正是Go语言的并发特性,吸引了全球无数的开发者。并发vs并行并发(concurrency)两个或两个以上的任务在一段时间内被执行。我们不必在意这些任务在某一个时间点是否是同时执行,可能同时执行,也可能不是,我们只关心在一段时间内,哪怕是很短的时间(一秒或者两秒)是否执行解决了两个或两个以上任务。并行(...原创 2019-12-11 14:29:16 · 369 阅读 · 0 评论