本文只是概念性的知识,内容比较零散,下篇文章再进行代码分析。

Workerman是什么,他的优势在哪?

 官方给的解释是高性能socket框架,我的个人理解是实现多进程的通讯的服务框架。

 与传统的PHP框架不同,并非注重功能的实现,而是专注于性能和通讯服务。

 优势:

  1.与传统的web服务不同,Workerman第一次运行就将环境变量、对象等资源常驻内存

  2.传统的web基本只实现http协议,但Workerman可以实现多种应用层协议(比如http、websocket、text等)


 

socket:

 套接字,是网络中不同主机间双向通信的端点的抽象层,位于TCP/IP四层中传输层和应用层之间,是一种约定或方式的接口。


进程:

 进程:是系统资源调用的最小单元,程序和程序之间默认不共享数据和地址空间。想要实现进程间通信可以用:队列、管道、信号量和共享内存、信号等。

 孤儿进程:父进程fork出子进程后,父进程自己退出,则子进程为孤儿进程。

 僵尸进程:父进程在fork出子进程后,子进程在结束后,父进程并没有调用wait或者waitpid等完成对其清理善后工作,导致改子进程进程ID、文件描述符等依然保留在系统中,极大浪费了系统资源。叫做僵尸进程。

 守护进程:是运行在后台的一种特殊进程。创建守护进程的过程:

      1.父进程创建子进程,父进程退出。

      2.子进程创建新会话

      3.禁止子进程重新打开终端

      4.设置当前目录为根目录

      5.设置文件权限掩码

      6.关闭文件描述符

 线程:是cpu调用的最小单元,同一进程中的线程共享数据和地址空间。

 进程组:每一个进程都属于一个进程组,进程组是一个或多个进程的集合,进程组中有一个进程组长。

 会话:是一个或多个进程组的集合,建立会话的进程是会话的首领进程,会话中每个进程组称为一个作业。


libevent:

 libevent是用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。


epoll、poll、select:https://www.cnblogs.com/aspirant/p/9166944.html

 都是I/O多路复用模型的实现,对用户请求进行回调执行。

 select:当I/O事件发生时,会无差别轮询所有socket完成调度,浪费cpu资源。且最大连接数受内存影响。参考:https://www.cnblogs.com/Anker/p/3258674.html

 poll:和select本质上没有区别,但是没有最大连接数限制。参考:https://www.cnblogs.com/Anker/p/3261006.html

 epoll:可以理解为event poll,当I/O事件发生时不会采用轮询的方式,而是把哪个流发生了怎样的I/O事件通知我们。参考:https://www.cnblogs.com/Anker/p/3263780.html

    epoll提供了三个函数:epoll_create(创建)、epoll_ctl(事件注册)、epoll_wait(事件等待)

    epoll在事件注册时已经将已经将fd复制到内核中并未每个fd指定了回调函数


reuseport :

 开启监听端口复用后允许多个无亲缘关系的进程监听相同的端口,并且由系统内核做负载均衡,决定将socket连接交给哪个进程处理,避免了惊群效应,可以提升多进程短连接应用的性能。

 未开启时:多个进程监听一个socket,没有请求时这些进程处于挂起状态。当有请求时,内核会唤醒这些进程让他们竞争去处理这个连接,这个过程耗费cpu资源,叫做惊群效应。

 开启reuseport后:一个端口可以被多个socket同时监听,内核可以做到将客户端连接均匀地发送到监听统一端口的一群 Socket 上。当有客户端连接到来时,内核转发连接到一个 Socket 上,而这个 Socket 只会唤醒自己隶属的那个 Worker,避免惊群效应。

 参考:https://www.jianshu.com/p/97cc8c52d47a

  

 

Workerman学习笔记(一)初步认识的更多相关文章

  1. Android_Mars学习笔记_S01_001activity初步

    一.activity初步 1.程序启动会先读配置文件AndroidManifest.xml找activity 2.activity会在onCreate方法中读取activity_main.xml文件, ...

  2. Python学习笔记--语音处理初步

    语音处理最基础的部分就是如何对音频文件进行处理. 声音的物理意义:声音是一种纵波,纵波是质点的振动方向与传播方向同轴的波.如敲锣时,锣的振动方向与波的传播方向就是一致的,所以声波是纵波.纵波是波动的一 ...

  3. 0034 Java学习笔记-反射-初步2-操作对象

    通过反射创建对象 通过反射创建对象有两种方式,一种通过Class对象的newInstance()方法,一种是获取到Class对象的Constructor后,再调用newInstance()方法,前者要 ...

  4. 0033 Java学习笔记-反射-初步1

    先看看通过反射能干嘛 示例:修改对象的private实例变量 package testpack; import java.lang.reflect.Field; public class Test1 ...

  5. HBASE学习笔记-初步印象

    HBASE概念: HBASE是一个分布式架构的数据库,通过对数据进行多层的分块打散储存.从而改写传统数据库的储存能力和读取速度. HBASE的集群服务器: HBASE的集群主要分为Zookeeper集 ...

  6. ANDROID_MARS学习笔记_S01_003layout初步

    一.layout介绍 二.测试linear_layout1.activity_main.xml <?xml version="1.0" encoding="utf- ...

  7. 学习笔记<4>初步控件布局

    一.控件布局基本概念 指控制控件在Activity当中的位置.大小.颜色以及其他控件样式属性 二.控件布局两种方法 1.使用布局文件完成控件布局(eclipse可视化拖拽控件实现) 2.在JAVA代码 ...

  8. Oracle学习笔记_01_SQL初步

    1.分类 SQL语句分为以下三种类型: DML: Data Manipulation Language        数据操纵语言       DDL: Data Definition Languag ...

  9. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

随机推荐

  1. centos-pip不存在安装失败的解决办法

    1.centos下安装pip失败 2.解决办法 需要先安装扩展源EPEL. EPEL(http://fedoraproject.org/wiki/EPEL) 是由 Fedora 社区打造,为 RHEL ...

  2. 链表中倒数第k个节点(剑指offer-14)

    /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ ...

  3. python学习笔记之文件操作(三)

    这篇博客小波主要介绍一下python对文件的操作 对文件的操作主要分为三步: 1.打开文件获取文件的句柄,句柄也是文件描述符 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件,是小波随写的周杰伦 ...

  4. unity position 记录

    localPosition为自身矩形中心点(Pivot)与其父节点矩形中心点(Pivot)的相对位置坐标,与自身锚点(Anchors)无关.anchoredPosition为矩形中心点(Pivot)与 ...

  5. web 部署专题(一):Gunicorn运行与配置方法

    Gunicorn“绿色独角兽”是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务器,移植自Ruby的独角兽(Unicorn )项目,使用pre-fork worker模式,具有使 ...

  6. IDEA 2020.1 查看内存使用情况

  7. Go的100天之旅-07条件和循环

    目录 条件语句 if条件语句 switch条件语句 循环语句 for循环 goto语句 条件语句 Go的条件语句和其它语言类似,主要是不支持三目运算符所以?:这种条件判断是不支持的.Go提供的条件判断 ...

  8. MySQL数据库---前言

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS ...

  9. 【java面试】- 集合篇

    Java 集合概览 从下图可以看出,在Java中除了以Map结尾的类之外, 其他类都实现了Collection接口.并且,以Map结尾的类都实现了Map接口 List.Set.Map三者的区别 Lis ...

  10. Java Object类中的equals方法

    Object类中的equals方法用于检测一个对象是否等于另外一个对象.在Object类中,这个方法将判断两个对象是否具有相同的引用.如果两个对象具有相同的引用,它们一定是相等的.从这点上看,将其作为 ...