编程语言
首页 > 编程语言> > go语言进阶总结:与并发编程相关标准库内容学习

go语言进阶总结:与并发编程相关标准库内容学习

作者:互联网

前言

学习使用包括osos/execruntimesyncsync/atmoicos/signalcontext等在内的多个标准库。

进程管理

进程调度算法通过变更进程的状态,使CPU资源的利用率最大化。对进程的管理涉及进程从创建,执行,销毁的全过程。
涉及标准库,包括:

  • pkg/os:提供了不依赖平台的操作系统函数的接口.
  • pkg/os/exec:执行外部命令.

创建进程

在Go语言中,Linux下创建进程使用的系统调用是clone。而与进程相关的结构体为:os.Process,通过如下方式可以创建一个进程。

  • osfunc StartProcess(name string, argv []string, attr *ProcAttr) (*Process, error)是一个低级别的接口
  • os/exectype Cmd struct的相关方法,是一个高级别的接口封装。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

// 通过 exec.Command 函数产生 Cmd 实例
func (name string, arg ...string) *Cmd
// 调用 Run(),它内部会先调用 Start(),接着调用 Wait();
func (c *Cmd) Run() error
// 调用 Start(),接着调用 Wait(),然后会阻塞直到命令执行完成;
func (c *Cmd) Start() error
func (c *Cmd) Wait() error
// Output() 是 Run() 的简便写法,外加获取外部命令的输出
func (c *Cmd) Output() ([]byte, error)
// CombinedOutput() 组合 Stdout 和 Stderr 的输出
func (c *Cmd) CombinedOutput() ([]byte, error)
func (c *Cmd) StderrPipe() (io.ReadCloser, error)
func (c *Cmd) StdinPipe() (io.WriteCloser, error)
func (c *Cmd) StdoutPipe() (io.ReadCloser, error)

一般应该尽量使用 os/exec

销毁进程

  • os.Exit(code int)

Goroutine

在并发编程中,同步是在最大化利用CPU资源时,同时保证执行单位(线程/进程)互斥访问临界资源的目的。线程/进程通信机制是达到同步的手段。
在Go的并发调度模型中,最小的执行单位是协程(goroutine),使用go关键字开启一个新的协程。goroutine是非常轻量的,除了给它分配栈空间(4k),它所占用的内存空间是微乎其微的。
Go倾向使用基于管道channel的消息通信模型代替传统的基于共享内存的锁机制进行协同操作。

sync包

  • pkg/sync;提供了互斥锁这类的基本的同步原语

  • 锁机制

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Locker接口代表一个可以加锁和解锁的对象
    type Locker interface

    // 互斥锁
    type Mutex struct
    func (m *Mutex) Lock()
    func (m *Mutex) Unlock()
    // 读写锁
    type RWMutex struct
    func (rw *RWMutex) Lock() // 写锁
    func (rw *RWMutex) Unlock()
    func (rw *RWMutex) RLock() // 读锁
    func (rw *RWMutex) RUnlock()
    func (rw *RWMutex) RLocker() Locker
  • 其它操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    大专栏

标签:编程,进阶,Cmd,进程,func,error,go,os,RWMutex
来源: https://www.cnblogs.com/dajunjun/p/11699221.html