galang的例程
#编程 #go #并发性 #线程

介绍

galang的主要优势是轻松的虚拟多时间

什么是线程?

在操作系统中,Hile或Hebra(来自英语线程),繁殖过程或订阅是人们在操作中可以执行的大部分较小贷款的问题。 (速度拼写)

这些过程通常由微处理器的几个杂务执行,因此,如果您有多项处理器,则这些过程可以由不仅仅是核心执行。操作系统提供了一个调度程序,该调度程序启动和管理这些执行线程,并设法避免condiciones de carrera

进行例程==光线

Galang的例程通常是光线,由 Virtual Columnos 由运行时de Galang生成。

平行性与同意

为什么并发而不是使用平行性?主要区别在于,当两个任务同时执行时,这些任务是平行的,这些任务是使用相同物理处理器的2个杂务执行的,因此可以同时执行2个指令。

但是,当应用程序同时发生时,GO的运行时间在同一核心内生成虚拟线程,因此虚拟线程的指令在同一核心中执行,但相交,因此最终是逐步的。<<<<<<<<<<<<<< /p>

示例:

Thread 1      | Thread 2
--------------|--------------
Instrucción 1 | 
Instrucción 2 | 
              | Instrucción 3
Instrucción 4 | 
              | Instrucción 5
...

调度程序(或计划计划者)

调度程序是负责选择该过程的操作系统的一部分,并且需要多长时间。
我们可以列出的一些任务是:

  • 进行每个过程的状态控制,确定哪个过程将使用处理器以及将使用多长时间。这将避免使用整个处理器的某些过程。
  • 在将过程分配给处理器时建立执行的上下文。
  • 业务,它将从流程中删除处理器,并保留以后执行的上下文。

简而言之,SO调度程序会承担大量工作并将其分配给其拥有的资源。

V GO运行时操作系统

操作系统规划器能够执行并行进程,即在处理器的不同核心中,而GO运行时会创建虚拟线程,以说每条执行线将在处理器的同一核心中执行其指令作为另一个。
在这种情况下,我们发现GO的运行时间使用SO Scheduler。

例子

一切都不是理论,让我们看看一个实用的例子:

package main

import (
   "fmt"
   "time"
)

func say(word string) {
   for j := 0; j < 5; j++ {
      time.Sleep(time.Millisecond * 100)
      fmt.Println(word)
   }
}

func main() {
   go say("Hello")
   say("world")
}

在这种情况下,我们看到我们的主线程将执行kude1,而我们的例程将执行say("hello")。如果我们执行这些说明,我们将意识到结果:

Ejecución de una Go Rutina

Link al ejemplo

结论

最后,我留下一些结论:

  • GO例程是线程:这是因为GO例程占据了2 kb的堆栈空间,这是OS线程的极紧密的固定堆栈空间。
  • 不要滥用例程:由于一切都不好,因此可以成为许多例程。对它们的控制很重要,因为在某个时候,如果我们要取消程序的执行,我们可以符合几个常规执行和占用我们想要的资源,您是免费的。
  • 可以用GO工具跟踪控制:手头,我们可以使用GO工具跟踪来控制我们的例程。但是我们将在Algear Post后部谈论这一点。