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