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

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. HDU 4352 XHXJ's LIS HDU(数位DP)

    HDU 4352 XHXJ's LIS HDU 题目大意 给你L到R区间,和一个数字K,然后让你求L到R区间之内满足最长上升子序列长度为K的数字有多少个 solution 简洁明了的题意总是让人无从下 ...

  2. Codeforces 1292C Xenon's Attack on the Gangs 题解

    题目 On another floor of the A.R.C. Markland-N, the young man Simon "Xenon" Jackson, takes a ...

  3. 一题搞定static关键字

    基础不牢,地动山摇 开篇一道题,考察代码执行顺序: public class Parent { static { System.out.println("Parent static init ...

  4. 基层教师 - CMD命令之net命令与IPC连接

    1)建立空连接: net use \\IP\ipc$ "" /user:"" (一定要注意:这一行命令中包含了3个空格) 2)建立非空连接: net use \ ...

  5. python 输出日志到文件和控制台

    import logging # 第一步,创建一个logger logger = logging.getLogger() logger.setLevel(logging.INFO) # Log等级总开 ...

  6. java 面向对象(三十二):泛型一 泛型的理解

    1.泛型的概念所谓泛型,就是允许在定义类.接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型.这个类型参数将在使用时(例如,继承或实现这个接口,用这个类型声明变量.创建对象时确定 ...

  7. Python函数06/装饰器

    Python函数06/装饰器 目录 Python函数06/装饰器 内容大纲 1.装饰器 1.1 开放封闭原则 1.2 装饰器 2.今日练习 内容大纲 1.装饰器 1.装饰器 1.1 开放封闭原则 扩展 ...

  8. 在Java中使用AES加密

    本文转载https://blog.csdn.net/z69183787/article/details/82746686

  9. Web For Pentester靶场(xss部分)

    配置 官网:https://pentesterlab.com/ 下载地址:https://isos.pentesterlab.com/web_for_pentester_i386.iso 安装方法:虚 ...

  10. GPO - Folder Mapping via GPO

    Create a Group Policy on AD DC Server. The GPO policy will come into effect on the next login, or us ...