iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >golang有没有进程
  • 952
分享到

golang有没有进程

2023-07-04 21:07:12 952人浏览 薄情痞子
摘要

这篇文章主要介绍“golang有没有进程”,在日常操作中,相信很多人在Golang有没有进程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”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有没有进程”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: golang有没有进程

本文链接: https://www.lsjlt.com/news/347479.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • golang有没有进程
    这篇文章主要介绍“golang有没有进程”,在日常操作中,相信很多人在golang有没有进程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”golang有没有进程”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-07-04
  • golang 没有class
    Go语言中的对象和类在众多编程语言中,面向对象编程(Object-Oriented Programming,简称OOP)是一种流行的编程范式,它通过将数据与方法打包在一起,以创建模块化、可重用的代码。在传统的OOP语言(如Java、C++等...
    99+
    2023-05-16
  • golang没有class
    Golang是一种强大的编程语言,在程序员中非常流行。但是,与其他流行的语言如Java和C++不同,Golang没有类。在Golang中,结构体是替代类的主要方式。在传统的面向对象编程语言中,类是创建对象的基本单位。类是一组相关属性和方法的...
    99+
    2023-05-16
  • golang中有没有类
    golang中没有类。golang不是一门纯面向对象编程语言,它没有class(类)的概念,也就没有继承的说法,但Go也可以模拟面向对象的编程方式。在Go中,可以将struct比作其它语言中的class;通过struct定义结构体,表征一类...
    99+
    2023-05-14
    go语言 Golang
  • golang有没有指针
    这篇文章主要介绍了golang有没有指针的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇golang有没有指针文章都会有所收获,下面我们一起来看看吧。golang有指针。Go语言为程序员提供了控制数据结构指针的能...
    99+
    2023-07-04
  • golang有进程吗
    golang有进程。进程就是程序在操作系统中的一次执行过程,是由系统进行资源分配和调度的基本单位;进程是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进程都有一个自己的地址空间。go语言支持多进程,它线程模型是MPG模型,...
    99+
    2023-05-14
    go语言 Golang 进程
  • golang 没有类
    概述Go语言是一种快速、开源的编程语言,由21世纪初Google公司开发。它在不久后便受到了广大程序员的欢迎,成为当今热门的编程语言之一。然而,与其他编程语言不同的是,Go语言并没有类(class)的概念。这篇文章将深入地探讨Go语言没有类...
    99+
    2023-05-16
  • linux中进程有没有优先级
    今天小编给大家分享一下linux中进程有没有优先级的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2023-04-20
    linux
  • golang有没有动态库
    golang没有动态库,需通过使用外部函数和cgo机制,才可以在golang程序中使用动态库。动态库,也称为共享库或动态链接库,是一种包含可被不同程序共享、加载的代码和数据的文件,与静态库相比,动态库具有更高的灵活性和可移植性,在运行时,程...
    99+
    2023-07-14
  • golang 没有core文件
    在golang的开发和调试过程中,有时会遇到程序崩溃或出现异常,这时候我们可能会想要查看程序产生的core文件,以便于排除问题和调试程序。不过,你会发现golang实际上并没有生成core文件。这是为什么呢?下面我们来探究一下golang没...
    99+
    2023-05-14
  • idea golang 插件没有
    谈谈为什么idea Golang插件没有在开发Golang项目的过程中,大家都知道有两个最常用的IDE,一个是JetBrains公司的IntelliJ IDEA,另一个是Microsoft公司的Visual Studio Code。对于ID...
    99+
    2023-05-15
  • go语言有没有缩进
    go语言有缩进。在go语言中,缩进直接使用gofmt工具格式化即可(gofmt使用tab进行缩进);gofmt工具会以标准样式的缩进和垂直对齐方式对源代码进行格式化,甚至必要情况下注释也会重新格式化。本教程操作环境:windows7系统、G...
    99+
    2023-05-14
    go语言 Golang Go
  • golang没有面向对象
    近年来,Golang作为一门新兴的编程语言备受瞩目。由于其出色的并发处理能力、高效的内存管理和亲民的语法设计,Golang成为越来越多开发者选择的语言。然而,一直以来有一件事情困扰着使用Golang的开发者们,那就是Golang没有传统意义...
    99+
    2023-05-14
  • golang没有解释器吗
    golang没有解释器,在golang中,代码被编译成二进制文件,这意味着它是一种编译型语言。与解释器相比,编译器将源代码翻译成可执行的机器代码,然后在运行时直接执行,解释器则逐行读取和解释源代码,然后逐行执行,由于解释器需要解析和执行每一...
    99+
    2023-07-19
  • golang怎么查看所有进程
    在Golang中,可以使用os包来获取和操作进程相关的信息。要查看所有进程,可以使用os.Process的AllProcesses(...
    99+
    2023-10-21
    golang
  • 钉钉有没有进销存管理
    首先,我们来看一下钉钉进销存功能的基本功能。该功能支持企业内部的采购、销售、库存管理等业务,可以帮助企业管理好企业的采购、销售、库存等数据,实现数据的实时更新和管理。具体来说,该功能有以下几个特点: 全面的采购管理:企业可以通过钉钉平台...
    99+
    2023-10-28
    进销存管理 钉钉有
  • 钉钉有没有进销存系统
    对于阿里巴巴来说,他们的进销存系统是一套完整的ERP系统,包括采购、销售、库存、财务等方面的功能。在企业内部,它可以帮助企业管理商品、财务、库存、销售等方面的业务,从而提高企业的运营效率和利润率。此外,进销存系统还可以实现对供应链的全面管控...
    99+
    2023-10-28
    进销存系统 钉钉有
  • javascript有没有多线程
    这篇文章主要介绍“javascript有没有多线程”,在日常操作中,相信很多人在javascript有没有多线程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”javascri...
    99+
    2024-04-02
  • php中cgi进程没有的解决方法
    小编给大家分享一下php中cgi进程没有的解决方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php cgi进程没有的解决办法:1、打开相应的配置文件;2、将p...
    99+
    2023-06-21
  • Golang Cobra 多个标志没有值
    问题内容 我是 golang 新手,正在使用 cobra 框架尝试我的第一个 cli 应用程序。 我的计划是使用很少的命令,使用很多标志。 这些标志不必附加值,因为它们可以简单地使用 ...
    99+
    2024-02-06
    overflow
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作