当前位置: 首页 > news >正文

图书网站开发背景wordpress互联网访问

图书网站开发背景,wordpress互联网访问,软件开发合同样本,浙江建设网站公司1. goroutine 基础知识 1.1 进程 进程(process) 是一个程序的实例,具有某些专用资源,如内存空间、处理器时间、文件句柄(例如,Linux 中的大多数进程都有 stdin、stdout 和 stderr) 和至少一个线程。我们称其为实例&am…

1. goroutine 基础知识

1.1 进程

        进程(process) 是一个程序的实例,具有某些专用资源,如内存空间、处理器时间、文件句柄(例如,Linux 中的大多数进程都有 stdin、stdout 和 stderr) 和至少一个线程。我们称其为实例(instance),这是因为同一个进程可以用来创建多个进程。

        在大多数通用操作系统中,每个进程都与其他进程隔离,因此任何两个希望通信实用程序来完成。

        当进程终止时,为该进程分配的所有内存都将被释放,所有打开的文件都将被关闭,并且所有线程都将被终止。

1.2 线程

        线程( thread ) 是一个执行上下文,包含运行指令序列所需的所有资源。通常,它包含堆栈和处理器寄存器的值。堆栈对于保持该线程内嵌套函数调用的顺序以及存储在该线程中执行的函数中声明的值是必需的。一个给定的函数可能在许多不同的线程中执行,因此该函数在线程中运行时使用的局部变量将存储在该线程的堆栈中。

1.3 调度程序

        调度程序 (scheduler) 可以将处理器时间分配给线程。有些调度程序是抢占式的,可以随时停止一个线程以切换到另一个线程。有些调度程序是协作的,必须等待线程才能切换到另一个线程。线程通常由操作系统管理。

1.4 goroutine 

        goroutine 是由 Go 运行时管理的执行上下文(而不是由操作系统管理的线程)。goroutine 的启动开销通常比操作系统线程小得多。

        goroutine 从一个小堆栈开始,并根据需要进行增长。创建新的 goroutine 比创建操作系统线程更快、更便宜。Go 调度程序将分配操作系统线程来运行 goroutine。

在 Go 程序中, goroutine 是使用 go 关键字创建的,后跟函数调用:

go f()
go g(i,j)
go func(){...
}()
go func(i,j int) {...
}(1,2)

         go 关键字在新的 goroutiine 中启动给定的函数。现有的 goroutine 继续与新创建的 goroutine 并发运行。

        作为 goroutine 运行的函数可以接收参数,但不能返回值。goroutine 函数的参数在 goroutine 启动之前进行评估,并在 goroutine 开始运行时传递给函数。

        你可能会问,为什么需要开发一个全新的线程系统,只是为了获得轻量级线程?

        goroutine 不仅仅是轻量级线程。它们是通过在准备运行的 goroutine 之间有效共享处理能力来提高吞吐量的关键。这是该思想的要点。

        Go 运行时使用的操作系统线程数等于平台上的处理器/内核数(除非你通过设置 GOMAXPROCS 环境变量或调用 runtime.GOMAXPROCS 函数来更改此设置)。这是平台可以并行执行的操作数量。除些之外,操作系统将不得不求助于分时系统。

        由于 GOMAXPROCS 线程并行运行,因此操作系统级别没有上下文切换开销。Go 调度程序将 goroutine 分配给操作系统线程,以便在每个线程上完成更多工作,而不是在许多线程上完成更少的工作。

        较小的上下文切换并不是 Go 调度程序比操作系统调度程序性能更好的唯一原因。 Go 调度程序之所以表现更好,是因为它知道唤醒哪些 goroutine 以充分利用它们。操作系统不知道通道操作或互斥体,这两种操作都是由 Go 运行时在用户空间中管理的。

1.5 线程和 goroutine 之间的区别

        除了 goroutine 更为轻量级,线程和 goroutine 之间还有一些更细微的区别。

        线程通常具有优先级。当优先级线程与高优先级线程竞争共享资源时,高优先级线程有更好的机会获得共享资源。

        goroutine 没有预先分配的优先级。也就是说,该语言规范允许有一个有利于某些 goroutine 的调度程序。例始, Go 运行时的更高版本包括将选择饥饿 goroutine 的调度算法。

        不过,一般来说,正确的并发 Go 程序不应该依赖于调度行为。许多语言都具有诸如使用可配置调度算法的线程池之类的功能。这些功能是基于 “线程创建是一项昂贵的操作” 这一假设而开发的,而 Go 的情况并非如此。

        另一个区别是 goroutine 堆栈的管理方式。一个 goroutine 以一个小堆栈开始(1.19 之后的 Go 运行时使用历史平均值,早期版本使用 2KB),每个函数调用都会检查剩余的堆栈空间是否足够。如果不足,则调整堆栈大小。

        反观操作系统线程则通常以一个大得多的堆栈(以兆字节为单位)开始,并且该堆栈通常不会增长。

http://www.yayakq.cn/news/547362/

相关文章:

  • 最火的深圳网站建设vue.js和vs做网站比较
  • 微信文件传输助手网页版seo和sem推广
  • 哪里有网站开发网站 数据备份
  • 网站设计专业需要什么软件领手工在家做的网站2019
  • 佛山小学网站建设wordpress 获取分类下的文章
  • 不懂编程如何做网站傻瓜化免费自助建站
  • 广州公司摇号申请网站比较好的网站建设品牌设计
  • 给公司做的东西放到私人网站上聊城专业网站建设公司电话
  • 网站建设平台选择大气企业响应式网站
  • php做简单网站教程长春南关网站建设
  • 静态网站挂马属于网站建设过程规划和准备阶段的是
  • 服务器网站环境c 网站开发需要的技术
  • 做图表的网站wordpress 文字颜色
  • 专业做淘宝网站网络宣传网站建设定制
  • 上线了建站教程wordpress如何更改会员中心
  • 交易类网站建设百度推广账号注册流程
  • 龙海做网站费用做网站怎么选云主机
  • 深圳企业网站建设开发费用财务软件开发公司简介
  • 水果网站系统的建设与实现免费自助建站排名
  • 网站后台添加网页加速器怎么开
  • 网站优化多少钱遵义网站开发公司电话
  • 企业网站seo实网站备案信息被注销
  • 网站建设阶段性工作重点做 淘宝客最大的网站是叫什么名字
  • 江苏建设培训网站品牌营销推广策划方案
  • 做网站的费属于什么费用石家庄飞数科技
  • 网站建设分金手指专业十四简述网络营销的含义
  • 公司网站赏析太原网站设计
  • 石家庄微网站建设公司哪家好包装回收网站建设
  • 房屋租赁系统网站开发wordpress文章排序方式
  • 重庆大渡口营销型网站建设公司哪家专业seo网站推广优化