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...

 swoole

————————————————
原文作者:huxiaobai_001
转自链接:https://learnku.com/articles/42577
版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值