Goroutine是一种比线程更加轻盈、更省资源的协程。当Go语言引入了goroutine概念后,执行输入和输出过程的函数,在调用前使用关键字go,让该函数能以goroutine方式执行,利用函数具有的多值输出特点,引入信道的通信机制,使得并发编程变得非常简单。
具体的例子这在前几篇文章中已经详细论述,Go语言通过使用goroutine,而不是操作系统的并发机制,通过系统的线程来多路派遣这些函数的执行,使得每个用go关键字执行的函数可以运行成为一个单位协程。当一个协程阻塞的时候,调度器就会自动把其他协程安排到另外的线程中去执行,从而实现了程序无等待并行化运行。而且调度的开销非常小,一颗CPU调度的规模不下于每秒百万次,这使得我们能够创建大量的goroutine,从而可以很轻松地编写高并发程序,达到我们想要的目的。
同时Go语言用channel(通道)轻巧地实现了CSP模型(Communicating Sequential Process),一个并发系统由若干并行运行的顺序进程组成,每个进程不能对其他进程的变量赋值。进程之间通过通信实现协作,方便地进行跨goroutine的通信。通信过程中利用sync包提供了完备的读写锁功能,使运行在同一个内存地址空间中的一个进程内创建的所有goroutine,访问内存变量前先获取相应的读写锁。即:通过通信来共享内存。使Go语言让并发编程变得更加轻盈和安全。
启动goroutine之前先通过设置环境变量GOMAXPROCS的值来设置使用CPU核心,使GO语言实现了高并发,多核并行的优雅运行。
分享成果,随喜正能量。
图
领取专属 10元无门槛券
私享最新 技术干货