swoole 当中协程的理解包括(进程、线程的讲解)

什么是进程?

进程是系统中正在运行的一个程序,程序一旦运行就是进程。
进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等。

什么是线程?

一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。线程与进程的一个主要区别是,统一进程内的一个主要区别是,同一进程内的多个线程会共享部分状态,多个线程可以读写同一块内存(一个进程无法直接访问另一进程的内存)。同时,每个线程还拥有自己的寄存器和栈,其他线程可以读写这些栈内存。
线程是进程的一个实体,是进程的一条执行路径。
线程是进程的一个特定执行路径。当一个线程修改了进程的资源,它的兄弟线程可以立即看到这种变化

上边这些话是我从百度到的
接下里咱们用栩栩如生的例子来讲明白什么是进程和线程?协程先等等哈,讲明白这两个在下边再讲协程;
譬如以你为首的打架团伙,就是一个进程,
真正出去打架不得有干活的吗?
团伙里面真正打架的这些人就是线程 最苦逼的就是线程 他得打架啊!
团伙里面的数据 各个打架成员都是可以共享的 比如今晚去干张三 他家在新乐大街1999号 他家有三口 还有枪,这些数据在团伙成员当中都是共享的!
但是你这个团伙和另外的大家团伙之间的数据是不能共享的 今晚去要账大家 你总不能把这事告诉别的打架的团伙吧?
然后咱们再回到swoole当中 手册里面讲到的worker_num = 4 就是开了几个打架团伙
进程、线程、协程理解
放到swoft2里面就是bean配置文件里面的worker_num
进程、线程、协程理解
这里的worker_num的数值的设置是有要求的,假设你开了4个 worker_num = 4 表示派出去了4个打架团伙 那得有场地啊,总不能4个打架团伙都憋在一个房间里面干吧 那不都打乱了吗!
咱们就假设让团伙去各个宾馆里面的房间里干架,假设我们有1个宾馆,这个宾馆有4个房间,这个宾馆就代表的是cpu,这4个房间就代表的是cpu的核数 那么在swoole当中这个团队worker_num的值 = cpu数*核数的一到四倍 最小可以是4最大可以是16个打架团伙
这样说你应该明白什么是进程 线程 以及理解swoole手册或者swoft2里面讲到的worker_num的含义了吧?
再不理解请访问“程序员在囧途”加群让我师傅帮你点化点化吧!

什么是协程?

之前写过一篇博客 放到csdn上了 https://blog.csdn.net/weixin_39166924/arti...
当然博客里面也没写的多么的清晰
协程比较抽象 它是程序内部的一定调度机制 就跟打架一样 这个worker得要告诉大家怎么打 是2打一 还是1打1 还是3打一 还是你来先打他一个然后你三个再去打他一个 这是一种调度机制 程序内部自己决定的 比如小三去打对方的李二,打不过了 程序会执行调度机制让胖五去干对方的李二,调取机制 比较抽象吧?如果是单纯的线程化的可能cpu就安排五个打五个了 万一一个打不过就被干死了 就是阻塞了!
程的特点在于是一个线程执行,那和多线程比,协程有何优势?
最大的优势就是协程极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。
第二大优势就是不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。
因为协程是一个线程执行,那怎么利用多核CPU呢?最简单的方法是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。
协程并不是切换的线程 而是切的自身内部的程序!
通俗的说,协程就是一段段协作方式执行的程序,协作来完成一件事,协作就是协同作业。我们知道团队协同来做事,比个人单独来做事,效率肯定要高,因为团队协同可以发挥各成员的能动性、优势互补。这是拿人来比喻。我们拿做事来比喻举个例子:比如我们做饭,比如有以下环节洗菜、切菜、烧水、炒菜、煮米饭,人作为主体来操作,那么如果按部就班的做,先烧水,再洗菜,在切菜,再炒菜,再煮饭,那这顿饭要做很长时间比如总共30分钟吧,如果我们通过协同方式,先烧水,放灶火上就可以做其他洗菜、切菜的准备,再煮米饭,然后再来洗菜、切菜,再查看煮米饭,再炒菜,…,如此循环往复切换,最后水烧好,米饭也煮好了,菜也炒好了,饭也OK了,这样我们耗时可能只有10-15分钟,看到了吗,这就是生活中的“协程”,由人来合理调度安排不同的环节,充分利用各种不同的资源和时间,来达到提高效率。协程是计算机程序,调用的则是不同的程序,处理者主要由CPU完成,处理对象是各种IO资源,处理的方式是不同的语言编写的程序。我们知道,CPU可以调度不同的程序,让程序调用不同的IO资源,最初的进程是通过CPU频繁的切换来完成调用程序的,是操作系统按一定算法分配的时间片抢占被动方式来切换的,未考虑程序实际执行状况,这样切换程序会带来一定问题,而协程作为一种新的工作模式,可以让程序协作方式来执行,在需要使用CPU时,交给程序处理,遇到耗时的IO资源操作时会让出CPU,交给处理其他程序,这样互相协作来执行,而不是抢占式的,就像交通规则,大家都遵守按一定规则礼让先行,不随便抢道,协同方式,程序都会执行的良好。
————————————————
版权声明:本文为CSDN博主「胡小白001」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39166924/arti...

本作品采用《CC 协议》,转载必须注明作者和本文链接
胡军
讨论数量: 1

协程是一种用户态的轻量级线程。刚好最近看了一些协程的文章,楼主可以参考下。

https://blog.csdn.net/qq910894904/article/...

https://kaijuan.co/topics/27/read-this-wee...

4年前 评论
huxiaobai_001 (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!