我的编程空间,编程开发者的网络收藏夹
学习永远不晚

golang有没有进程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

golang有没有进程

这篇文章主要介绍“golang有没有进程”,在日常操作中,相信很多人在golang有没有进程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”golang有没有进程”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

golang有进程。进程就是程序在操作系统中的一次执行过程,是由系统进行资源分配和调度的基本单位;进程是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进程都有一个自己的地址空间。go语言支持多进程,它线程模型是MPG模型,整体上Go程与内核线程是多对多对应的。

一、关于进程和线程

1. 进程(Process)

进程就是程序在操作系统中的一次执行过程,是由系统进行资源分配和调度的基本单位,进程是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进程都有一个自己的地址空间。一个进程至少有5种基本状态:初始态、执行态、等待状态、就绪状态、终止状态。

通俗讲:进程就是一个正在执行的程序。

2. 线程

线程是进程的一个执行实例,是程序执行的最小单元,它是比进程更小的能独立运行的基本单位。

通俗讲:一个进程可以创建多个线程,同一个进程中的多个线程可以并发执行,一个程序要运行的话至少有一个进程。

golang有没有进程

golang有没有进程

二、关于并发和并行

1. 并发

多个线程同时竞争一个位置,竞争到的才可以执行,每一个时间段只有一个线程在执行。

golang有没有进程

2. 并行

多个线程可以同时执行,每一个时间段,可以有多个线程同时执行。

golang有没有进程

3. 通俗讲

多线程程序在单核cpu上运行就是并发,在多核cpu上运行就是并行。如果线程数大于cpu核数,则多线程程序在多个cpu上既有并发也有并行。

三、goroutine协程以及主线程

1. 主线程

可以理解为线程或进程,在一个golang程序的主线程上可以启用多个协程。golang中多协程可以实现并发或者并行。

2. 协程

可以理解为用户级别的线程,这是对内核透明的,也就是系统并不知道有协程的存在,是完全由用户自己的程序进行调度的。golang的一大特色就是从语言方面原生支持协程,在函数或方法前面加一个go关键词就可以创建一个协程。可以说golang中的协程就是goroutine。

golang有没有进程

Golang 中的多协程有点类似其他语言中的多线程。

3. 多协程和多线程

Golang 中每个 goroutine (协程) 默认占用内存远比 Java 、C 的线程少。 OS 线程(操作系统线程)一般都有固定的栈内存(通常为 2MB 左右),一个 goroutine (协程) 占用内存非常小,只有 2KB 左右,多协程 goroutine 切换调度开销方面远比线程要少。 这也是为什么越来越多的大公司使用 Golang 的原因之一。

四、go关键词实操

1. 顺序执行

package mainimport "fmt"func test() {for i := 0; i < 5; i++ {fmt.Println("test执行", i)}}func main() {    // 正常顺序执行test()for i := 0; i < 5; i++ {fmt.Println("main执行", i)}}

2. 加入go

package mainimport "fmt"func test() {for i := 0; i < 5; i++ {fmt.Println("test执行", i)}}func main() {    // 加入goroutine后go test()for i := 0; i < 5; i++ {fmt.Println("main执行", i)}}

3. 加入时间

package mainimport (    "fmt"    "time")// 加入时间func test1() {for i := 0; i < 5; i++ {fmt.Println("test执行", i)time.Sleep(time.Millisecond * 100)}}func main() {    // 加入sleep之后再执行go test1()for i := 0; i < 5; i++ {fmt.Println("main执行", i)time.Sleep(time.Millisecond * 100)}}

4. 主线程执行快的情况

package mainimport (    "fmt"    "time")func test1() {for i := 0; i < 5; i++ {fmt.Println("test执行", i)time.Sleep(time.Millisecond * 100)}}func main() {    // 如果主线程执行的快会出现什么情况?go test1()for i := 0; i < 5; i++ {fmt.Println("main执行", i)time.Sleep(time.Millisecond * 20)}}

5. sync.WaitGroup解决不等待

package mainimport (    "fmt"    "time"    "sync")var wg sync.WiatGroupfunc test2() {for i := 0; i < 5; i++ {fmt.Println("test执行", i)time.Sleep(time.Millisecond * 100)}wg.Done()}func main() {    // sync.WaitGroup 完美解决,以后在项目中也会经常使用wg.Add(1)go test2()for i := 0; i < 5; i++ {fmt.Println("main执行", i)time.Sleep(time.Millisecond * 20)}wg.Wait()}

6. 多协程并发并行执行

package mainimport (    "fmt"    "time"    "sync")func hello(num int) {defer wg.Done()for i := 0; i < 5; i++ {fmt.Printf("第%v个协程执行--%v\n", num, i)}}func main() {    // 多协程并发执行for i := 0; i < 3; i++ {wg.Add(1)go hello(i)}wg.Wait()}

五、设置golang运行时占用的cpu核数量(不是很重要)

package mainimport (    "fmt"    "runtime")func main() {    // 设置程序占用几个cpu进行执行,默认是全部// 获取计算机cpu个数cpuNum := runtime.NumCPU()fmt.Println(cpuNum) // 6 我本机电脑是6核cpu// 设置占用cpu个数runtime.GOMAXPROCS(2)fmt.Println("ok")}

到此,关于“golang有没有进程”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

golang有没有进程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

golang有没有进程

这篇文章主要介绍“golang有没有进程”,在日常操作中,相信很多人在golang有没有进程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”golang有没有进程”的疑惑有所帮助!接下来,请跟着小编一起来学习吧
2023-07-04

golang中有没有类

golang中没有类。golang不是一门纯面向对象编程语言,它没有class(类)的概念,也就没有继承的说法,但Go也可以模拟面向对象的编程方式。在Go中,可以将struct比作其它语言中的class;通过struct定义结构体,表征一类对象,例“type person struct {...}”。
2023-05-14

golang有进程吗

golang有进程。进程就是程序在操作系统中的一次执行过程,是由系统进行资源分配和调度的基本单位;进程是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进程都有一个自己的地址空间。go语言支持多进程,它线程模型是MPG模型,整体上Go程与内核线程是多对多对应的。
2023-05-14

golang有没有指针

这篇文章主要介绍了golang有没有指针的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇golang有没有指针文章都会有所收获,下面我们一起来看看吧。golang有指针。Go语言为程序员提供了控制数据结构指针的能
2023-07-04

golang有没有动态库

golang没有动态库,需通过使用外部函数和cgo机制,才可以在golang程序中使用动态库。动态库,也称为共享库或动态链接库,是一种包含可被不同程序共享、加载的代码和数据的文件,与静态库相比,动态库具有更高的灵活性和可移植性,在运行时,程
2023-07-14

linux中进程有没有优先级

今天小编给大家分享一下linux中进程有没有优先级的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
2023-04-20

php cgi进程没有怎么办

php cgi进程没有的解决办法:1、打开相应的配置文件;2、将php-fpm.conf中的listen和nginx.conf或vhost中的conf listen保持一致即可。
2018-07-27

go语言有没有缩进

go语言有缩进。在go语言中,缩进直接使用gofmt工具格式化即可(gofmt使用tab进行缩进);gofmt工具会以标准样式的缩进和垂直对齐方式对源代码进行格式化,甚至必要情况下注释也会重新格式化。
2023-05-14

golang没有解释器吗

golang没有解释器,在golang中,代码被编译成二进制文件,这意味着它是一种编译型语言。与解释器相比,编译器将源代码翻译成可执行的机器代码,然后在运行时直接执行,解释器则逐行读取和解释源代码,然后逐行执行,由于解释器需要解析和执行每一
2023-07-19

golang怎么查看所有进程

在Golang中,可以使用os包来获取和操作进程相关的信息。要查看所有进程,可以使用os.Process的AllProcesses()方法。下面是一个简单的例子:gopackage mainimport ( "fmt" "os")func
2023-10-21

钉钉有没有进销存系统

对于阿里巴巴来说,他们的进销存系统是一套完整的ERP系统,包括采购、销售、库存、财务等方面的功能。在企业内部,它可以帮助企业管理商品、财务、库存、销售等方面的业务,从而提高企业的运营效率和利润率。此外,进销存系统还可以实现对供应链的全面管控,从而提高企业的生产效率和供应链的质量。对于腾讯来说,他们的进销存系统则更加注重
钉钉有没有进销存系统
2023-10-28

钉钉有没有进销存管理

首先,我们来看一下钉钉进销存功能的基本功能。该功能支持企业内部的采购、销售、库存管理等业务,可以帮助企业管理好企业的采购、销售、库存等数据,实现数据的实时更新和管理。具体来说,该功能有以下几个特点:全面的采购管理:企业可以通过钉钉平台,实现全面的采购管理,包括供应商、采购合同、采购订单、采购付款等信息。全面的销售管理:
钉钉有没有进销存管理
2023-10-28

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录