• 协程与通道


    进程:计算机进行资源分配调度的基本单位。且运行在自己内存空间内的独立执行体
    (一个应用程序就是运行在机器上的一个进程)
    线程:进程内部共享进程内存资源的多个执行体(当一个线程进行IO时,换另一个线程执行)

    并行:同一个程序在某个时间点同时运行在多个处理器核心上。
    并发:同一时间段内,多个线程执行任务(提高ICU的时间使用率)

    协程:根据一个或多个线程的可用性,映射到线程之上(Go tuntime中调度)

    同步:进程的多个线程(或者协程)中数据一致

    协程工作在相同的地址空间中,所以共享内存(sync包)的方式一定是同步的。(不鼓励使用共享内存的方式来达到同步)
    Go使用channels来同步协程
    当系统调用(IO等待等)当前线程的当前协程被阻塞时,当前线程的其余协程会继续在其它线程上工作。
    协程(特别轻量,只有4k)
    协程可以运行在多个操作系统线程之间(多个线程之间来回跑。),也可以运行在线程之内(呆在一个线程上面)

    两种并发方式:
    确定性的(明确定义排序),Go的通道,先发送者后接收者(有先后之分)
    非确定性的(加锁/互斥),Java的多线程,随机,谁抢到就是谁的
    线程通过关键字go调用一个方法或函数实现(也可以时匿名函数)
    在当前线程开始一个同时运行的协程。go sum(a,b)
    协程的栈(自己建的)会根据需要进行伸缩,不会出现栈溢出。协程没有返回值
    main() 也可以看作一个协程。
    协程可以在init()(程序初始化)中运行。
    runtime.Gosched()。当前协程让出处理器。


    GOMAXPROCS,Go应用程序的线程数量(并行协程的最大数量,不过肯定是要小于处理器核心数的)。

    如果GOMAXPROCS >= n,则这些线程会被分散到n个处理器核心上(假设计算机处理核心有n个)


    在代码中指定使用的线程数
    使用flags包
    var numCores = flag.Int("n",2,"number of CPU cores to use")
    flag.Parse()
    runtime.GOMAXPROCS(*numCores)

  • 相关阅读:
    数据存储 twisted
    数据存储 mongodb
    数据存储 redis
    数据存储 txt
    同时使用有线内网与无线外网
    使用xshell从服务器下载文件
    everything使用技巧
    【吴恩达机器学习】第8章 正则化
    python文件重命名
    【统计学习】 第5章 决策树
  • 原文地址:https://www.cnblogs.com/mcmx/p/11390896.html
Copyright © 2020-2023  润新知