当前位置: 首页 > 编程日记 > 正文

高并发大流量专题---8、动态语言的并发处理

高并发大流量专题---8、动态语言的并发处理

一、总结

一句话总结:

和本科毕业论文连起来了:基于消息中间件Rocket MQ的研究;用于并发处理的消息队列

1、什么是进程、线程、协程?

进程(Process)是计算机中的【程序关于某数据集合上的一次运行活动】,是系统进行资源分配和调度的基本单位,是操作系统结构的基础
线程,有时被称为【轻量级进程】(Lightweight Process,LWP),是程序执行流的最小单元。
协程是一种【用户态的轻量级线程】,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。

2、进程的三态模型(多道程序系统中,进程在处理器上交替运行,状态不断地发生变化)?

运行、就绪、阻塞

运行:当一个进程在处理机上运行时,则称该进程处于运行状态。处于此状态的进程的数目小于等于处理器的数目,对于单处理机系统,处于运行状态的进程只有一个。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。
就绪:当一个进程获得了除处理机以外的一切所需资源,一旦得到处理机即可运行,则称此进程处于就绪状态。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。
阻塞:也称为等待或睡眠状态,一个进程正在等待某一事件发生(例如请求I/O而等待I/O完成等)而暂时停止运行,这时即使把处理机分配给进程也无法运行,故称该进程处于阻塞状态。

3、进程的五态模型(对于一个实际的系统,进程的状态及其转换更为复杂)?

新建态、活跃就绪/静止就绪、运行、活跃阻塞/静止阻塞、终止态

新建态:对应于进程刚刚被创建时没有被提交的状态,并等待系统完成创建进程的所有必要信息。
终止态:进程已结束运行,回收除进程控制块之外的其他资源,并让其他进程从进程控制块中收集有关信息。
活跃就绪:是指进程在主存并且可被调度的状态。
静止就绪(挂起就绪):是指进程被对换到辅存时的就绪状态,是不能被直接调度的状态,只有当主存中没有活跃就绪态进程,或者是挂起就绪态进程具有更高的优先级,系统将把挂起就绪态进程调回主存并转换为活跃就绪。
活跃阻塞:是指进程已在主存,一旦等待的事件产生便进入活跃就绪状态。
静止阻塞:进程对换到辅存时的阻塞状态,一旦等待的事件产生便进入静止就绪状态。

4、操作系统中线程的概念为什么被引进?

由于用户的并发请求,为每一个请求都创建一个进程显然是行不通的,从系统资源开销方面或是响应用户请求的效率方面来看。因此操作系统中线程的概念便被引进了。

5、线程的特点?

线程是进程中的一个实体:是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源但它可与同属一个进程的其它线程共享进程所拥有的全部资源。
一个线程可以创建和撤消另一个线程:同一进程中的多个线程之间可以并发执行。
线程是程序中一个单一的顺序控制流程:进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。

6、多线程是什么?

在单个程序中同时运行多个线程完成不同的工作,称为多线程。

7、线程和进程的数量关系?

每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。

8、线程的状态?

就绪、阻塞、运行

就绪状态:线程具备运行的所有条件,逻辑上可以运行,在等待处理机。
运行状态:线程占有处理机正在运行。
阻塞状态:线程在等待一个事件(如某个信号量),逻辑上不可执行。

9、线程与进程的区别?

1.线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间
2.进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
3.线程是处理器调度的基本单位,但进程不是
4.每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制


1.线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间
2.进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
3.线程是处理器调度的基本单位,但进程不是
4.二者均可并发执行
5.每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制

10、线程与协程的区别?

1.一个线程可以多个协程,一个进程也可以单独拥有多个协程
2.线程进程都是同步机制,而协程则是异步
3.协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态

11、什么是多进程、多线程?

多进程:同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这就是多进程。边看慕课网视频,边使用WebIDE;多开一个进程,多分配一份资源,进程间通讯不方便
多线程:线程就是把一个进程分为很多片,每一片都可以是一个独立的流程。与多进程的区别是只会使用一个进程的资源,线程间可以直接通信

12、进程线程组合例子?

单进程单线程:一个人在一个桌子上吃菜
单进程多线程:多个人在同一个桌子上一起吃菜
多进程单线程:多个人每个人在自己的桌子上吃菜

13、同步阻塞中的多进程、多线程?

最早的服务器端程序都是通过多进程、多线程来解决并发IO的问题
多进程:一个请求创建一个进程,然后子进程进入循环同步堵塞地与客户端连接进行交互,收发处理数据
多线程:用多线程模式实现非常简单,线程中可以直接向某一个客户端连接发送数据

14、同步阻塞中 多线程 步骤 总结?

|||-begin

创建一个socket
进入while循环,阻塞在进程accept操作上,等待客户端连接进入
主进程在多进程模型下通过fork创建子进程
多线程模型下可以创建子线程
子进程/线程创建成功后进入while循环,阻塞在recv调用上,等待客户端向服务器发送数据
收到数据后服务器程序进行处理然后使用send向客户端发送响应
当客户端连接关闭时,子进程/线程退出并销毁所有资源。主进程/线程会回收掉此子进程/线程。

|||-end

socket和多线程的结合

15、同步阻塞模型的缺点?

这种模型 【严重依赖进程的数量】  解决并发问题
启动大量进程会带来额外的【进程调度消耗】

16、php 异步非阻塞 实现?

epoll:现在各种高并发异步IO的服务器程序都是基于epoll实现的
Reactor模型:IO复用异步非阻塞程序使用经典的Reactor模型,Reactor顾名思义就是反应堆的意思,它本身不处理任何数据收发。只是可以监视一个socket句柄的事件变化

17、异步非阻塞 Reactor有4个核心的操作?

1.add添加socket监听到reactor
2.set修改事件监听,可以设置监听的类型,如可读、可写
3.del从reactor中移除,不再监听事件
4.callback,事件发生后对应的处理逻辑,一般在add/set时制定

Reactor模型
Add:添加一个SOCKET到Reactor
Set:修改SOCKET对应的事件,如可读可写
Del:从Reactor中移除
Callback:事件发生后回调指定的函数

18、异步非阻塞模型实例?

Nginx:多线程Reactor
Swoole:多线程Reactor+多进程Worker

19、PHP并发编程实践?

PHP的Swoole扩展
消息队列
接口的并发请求

20、PHP的Swoole扩展 介绍?

异步、并行、高性能网络通信引擎:PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询
多个并发数据结构和IPC通信机制:除了异步IO的支持之外,Swoole为PHP多进程的模式设计了多个并发数据结构和IPC通信机制,可以大大简化多进程并发编程的工作。
协程:Swoole2.0支持了类似Go语言的协程,可以使用完全同步的代码实现异步程序

21、swoole WebSocket Server 实例?

|||-begin

WebSocket Server
<?php
$server = new swoole_websocket_server("127.0.0.1", 9502);$server->on('open', function($server, $req) {echo "connection open: {$req->fd}\n";
});$server->on('message', function($server, $frame) {echo "received message: {$frame->data}\n";$server->push($frame->fd, json_encode(["hello", "world"]));
});$server->on('close', function($server, $fd) {echo "connection close: {$fd}\n";
});$server->start();

|||-end

官网有实例代码,比较好上手

22、消息队列应用场景?

2、应用解耦:用户下单后,订单系统需要通知库存系统
3、流量削锋:秒杀活动,流量瞬时激增,服务器压力大
4、日志处理:解决大量日志的传输
5、消息通信:多个客户端订阅同一主题,进行消息发布和接收

1、用户注册后,需要发注册邮件和注册短信

23、超级大量 用户注册后,需要发注册邮件和注册短信,如何解决(用消息队列)?

串行方式:将注册信息写入数据库成功后,发送注册邮件,再发送注册短信
并行方式:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信
消息队列方式:将注册信息写入数据库成功后,将成功信息写入队列,此时直接返回成功给用户,写入队列的时间非常短,可以忽略不计,然后异步发送邮件和短信

24、超级大量 用户下单后,订单系统需要通知库存系统,如何解决(用消息队列做 应用解耦)?

1、消息队列:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功
2、发布订阅:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作

消息队列 的另一种应用:应用解耦
场景说明:用户下单后,订单系统需要通知库存系统。
假如库存系统无法访问,则订单减库存将失败,从而导致订单失败

订单系统与库存系统解耦

引用队列
用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功
订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作

25、秒杀活动,流量瞬时激增,服务器压力大,如何解决(用消息队列做 流量削锋)?

发起请求,服务器接收后,先写入消息队列。假如消息队列长度超过最大值,则直接报错或提示用户。后续程序读取消息队列再做处理

消息队列 的另一种应用:流量削锋

应用场景:秒杀活动,流量瞬时激增,服务器压力大。
发起请求,服务器接收后,先写入消息队列。假如消息队列长度超过最大值,则直接报错或提示用户。后续程序读取消息队列再做处理

26、消息队列 用于 流量削锋的好处?

控制请求量
缓解高流量

27、解决大量日志的传输,如何解决(用消息队列 做 日志处理)?

日志采集程序将程序写入消息队列,然后通过日志处理程序的订阅消费日志

消息队列 的另一种应用:日志处理

应用场景:解决大量日志的传输

日志采集程序将程序写入消息队列,然后通过日志处理程序的订阅消费日志

28、聊天室中,消息队列如何解决消息通讯?

多个客户端订阅同一主题,进行消息发布和接收

消息队列 的另一种应用:消息通讯

应用场景:聊天室

多个客户端订阅同一主题,进行消息发布和接收

29、常见消息队列产品?

Kafka、ActiveMQ、ZeroMQ、RabbitMQ、Redis等

30、php如何做接口的并发请求?

php的curl_multi_init函数 系列

二、内容在总结中

转载于:https://www.cnblogs.com/Renyi-Fan/p/11048679.html

相关文章:

1. 文件系统——磁盘分区、各目录功能、硬盘

一、磁盘分区及文件访问入口在前文中介绍过&#xff0c;Linux的整个文件系统像一棵倒置的数&#xff0c;最顶层的是根文件系统&#xff0c;其下有很多一级子目录&#xff0c;一级子目录下面是二级子目录&#xff0c;依此类推&#xff1a;/&#xff1a;根目录/bin&#xff0c;/s…

吴恩达老师深度学习视频课笔记:逻辑回归公式推导及C++实现

逻辑回归(Logistic Regression)是一个二分分类算法。逻辑回归的目标是最小化其预测与训练数据之间的误差。为了训练逻辑回归模型中的参数w和b&#xff0c;需要定义一个成本函数(cost function)。成本函数(cost function)&#xff1a;它是针对整个训练集的。衡量参数w和b在整个训…

网络运行时间提高100倍,Google使用的AI视频理解架构有多强?

译者 | 刘畅出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;视频理解是一个很有挑战性的问题。由于视频包含时空数据&#xff0c;因此图像的特征表示需要同时提取图像和运动信息。这不仅对自动理解视频语义内容有重要性&#xff0c;还对机器人的感知和学习也至关重要…

iOS学习笔记(十三)——获取手机信息(UIDevice、NSBundle、NSLocale)

2019独角兽企业重金招聘Python工程师标准>>> iOS的APP的应用开发的过程中&#xff0c;有时为了bug跟踪或者获取用反馈的需要自动收集用户设备、系统信息、应用信息等等&#xff0c;这些信息方便开发者诊断问题&#xff0c;当然这些信息是用户的非隐私信息&#xff0…

吴恩达老师深度学习视频课笔记:单隐含层神经网络公式推导及C++实现(二分类)

关于逻辑回归的公式推导和实现可以参考&#xff1a; http://blog.csdn.net/fengbingchun/article/details/79346691 下面是在逻辑回归的基础上&#xff0c;对单隐含层的神经网络进行公式推导&#xff1a;选择激活函数时的一些经验&#xff1a;不同层的激活函数可以不一样。如果…

「2019中国大数据技术大会」超值学生票来啦!

大会官网&#xff1a;https://t.csdnimg.cn/U1wA经过11年的沉淀与发展&#xff0c;中国大数据技术大会见证了大数据技术生态在中国的建立、发展和成熟&#xff0c;已经成为国内大数据行业极具影响力的盛会&#xff0c;也是大数据人非常期待的年度深度分享盛会。在新的时代背景下…

校验正确获取对象或者数组的属性方法(babel-plugin-idx/_.get)

背景&#xff1a; 开发中经常遇到取值属性的时候&#xff0c;需要校验数值的有效性。 例如&#xff1a; 获取props对象里面的friends属性 props.user && props.user.friends && props.user.friends[0] && props.user.friends[0].friends 对于深层的对…

Ring Tone Manager on Windows Mobile

2019独角兽企业重金招聘Python工程师标准>>> 手机铃声经常能够体现一个人的个性&#xff0c;有些哥们儿在自习室不把手机设置成震动&#xff0c;一来电就#$^%^&^%#$&$*&#xff0c;声音还很大&#xff0c;唯恐别人听不到。 Windows Mobile设备上如何来设置手…

OpenCV3.3中K-Means聚类接口简介及使用

OpenCV3.3中给出了K-均值聚类(K-Means)的实现&#xff0c;即接口cv::kmeans&#xff0c;接口的声明在include/opencv2/core.hpp文件中&#xff0c;实现在modules/core/src/kmeans.cpp文件中,其中&#xff1a;下面对此接口中的参数作个简单说明&#xff1a;(1)、data&#xff1a…

一文读懂对抗机器学习Universal adversarial perturbations | CSDN博文精选

作者 | Icoding_F2014来源 | CSDN博客本文提出一种 universal 对抗扰动&#xff0c;universal 是指同一个扰动加入到不同的图片中&#xff0c;能够使图片被分类模型误分类&#xff0c;而不管图片到底是什么。示意图&#xff1a;形式化的定义&#xff1a;对于d维数据分布 μ&…

Reactor模式与Proactor模式

博主一脚刚踏进分布式的大门&#xff08;看《分布式Java应用》&#xff0c;如果大家有啥推荐的书欢迎留言~&#xff09;&#xff0c;发现书中对NIO采用的Reactor模式、AIO采用的Proactor模式一笔带过&#xff0c;好奇心趋势我找了一下文章&#xff0c;发现两篇挺不错的文章&…

linux下使profile和.bash_profile立即生效的方法

使profile生效的方法1.source /etc/profile使用.bash_profile生效的方法1 . .bash_profile2 source .bash_profile3 exec bash --login转载于:https://blog.51cto.com/shine20/1436473

吴恩达老师深度学习视频课笔记:多隐含层神经网络公式推导(二分类)

多隐含层神经网络的推导步骤非常类似于单隐含层神经网络的步骤&#xff0c;只不过是多重复几遍。关于单隐含层神经网络公式的推导可以参考&#xff1a; http://blog.csdn.net/fengbingchun/article/details/79370310 逻辑回归是一个浅层模型(shadow model)&#xff0c;或称单层…

Python中的元编程:一个关于修饰器和元类的简单教程

作者 | Saurabh Kukade译者 | 刘畅出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;最近&#xff0c;作者遇到一个非常有趣的概念&#xff0c;它就是用 Python 进行元编程。我想在本文中分享我对该主题的见解。作者希望它可以帮助解决这个问题&#xff0c;因为很多人说…

获取用户电脑的上网IP地址

在项目中经常要获取用户的上网的IP地址&#xff0c;如何获取用户的IP地址&#xff0c;方法很多&#xff0c;现在介绍以下2种。 /// <summary> /// 获取本机在局域网的IP地址 /// </summary> /// <returns></returns> …

数学图形(1.40)T_parameter

不记得在哪搞了个数学公式生成的图形. vertices 1000t from 0 to (2*PI) r 2.0 x r*(5*cos(t) - cos(6*t)) y r*(3*sin(t) - sin(4*t)) 给线加上一维变量的变化,使之变成面: vertices D1:360 D2:21u from 0 to (2*PI) D1 v from 0 to 20 D2x (v2)*cos(u) - cos((v3)*u…

K-均值聚类(K-Means) C++代码实现

K-均值聚类(K-Means)简介可以参考&#xff1a; http://blog.csdn.net/fengbingchun/article/details/79276668 以下是K-Means的C实现&#xff0c;code参考OpenCV 3.3中的cv::kmeans函数&#xff0c;均值点初始化的方法仅支持KMEANS_RANDOM_CENTERS。以下是从数据集MNIST中提取…

让学生网络相互学习,为什么深度相互学习优于传统蒸馏模型?| 论文精读

作者 | Ying Zhang&#xff0c;Tao Xiang等译者 | 李杰出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;蒸馏模型是一种将知识从教师网络&#xff08;teacher&#xff09;传递到学生网络&#xff08;student&#xff09;的有效且广泛使用的技术。通常来说&#xff0c;…

mac apache 配置

mac系统自带apache这无疑给广大的开发朋友提供了便利&#xff0c;接下来是针对其中的一些说明 一、自带apache相关命令 1. sudo apachectl start 启动服务&#xff0c;需要权限&#xff0c;就是你计算机的password 2. sudo apachectl stop 终止服务 ####3. sudo apachectl rest…

jQuery学习---------认识事件处理

3种事件模型&#xff1a;原始事件模型DOM事件模型IE事件模型原始事件模型&#xff08;0级事件模型&#xff09;1、事件处理程序被定义为函数实例&#xff0c;然后绑定到DOM元素事件对象上&#xff0c;实现事件的注册。例子&#xff1a;var btn document.getElementsByTagName(…

C++中的虚函数表介绍

在C语言中,当我们使用基类的引用或指针调用一个虚成员函数时会执行动态绑定。因为我们直到运行时才能知道到底调用了哪个版本的虚函数&#xff0c;所以所有虚函数都必须有定义。通常情况下&#xff0c;如果我们不使用某个函数&#xff0c;则无须为该函数提供定义。但是我们必须…

AI如何赋能金融行业?百度、图灵深视等同台分享技术实践

近日&#xff0c;由BTCMEX举办的金融技术创新研讨会在北京举办。BTCMEX投资人李笑来&#xff0c;AI技术公司TuringPass、百度、美国Apache基金会项目Pulsar、区块链安全公司SlowMist等相关专家参加了此次会议&#xff0c;共同探讨了金融技术在创新方面的现状。 图灵深视副总裁许…

【Win32 API学习]打开可执行文件

在MFC中打开其他可执行文件常用到的方法有&#xff1a;WinExec、ShellExecute、CreatProcess。 1.WinExec WinExec 主要运行EXE文件&#xff0c;用法简单&#xff0c;只有两个参数&#xff0c;前一个指定命令路径&#xff0c;后一个指定窗口显示方式&#xff1a; UINT WinExec(…

支付宝接口使用文档说明 支付宝异步通知

支付宝接口使用文档说明 支付宝异步通知(notify_url)与return_url. 现支付宝的通知有两类。 A服务器通知&#xff0c;对应的参数为notify_url&#xff0c;支付宝通知使用POST方式 B页面跳转通知&#xff0c;对应的参数为return_url&#xff0c;支付宝通知使用GET方式 &#xff…

完全隐藏Master Page Site Actions菜单只有管理员才可以看见

1. 在Master Page Head 增加下面的Style <style type"text/css"> .ms-cui-tt{visibility:hidden;} </style> 2. 增加SPSecurityTrimmedControl <SharePoint:SPRibbonPeripheralContent runat"server" Location"TabRowLeft&qu…

深度学习中的随机梯度下降(SGD)简介

随机梯度下降(Stochastic Gradient Descent, SGD)是梯度下降算法的一个扩展。机器学习中反复出现的一个问题是好的泛化需要大的训练集&#xff0c;但大的训练集的计算代价也更大。机器学习算法中的代价函数通常可以分解成每个样本的代价函数的总和。随着训练集规模增长为数十亿…

推荐系统中的前沿技术研究与落地:深度学习、AutoML与强化学习 | AI ProCon 2019...

整理 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;个性化推荐算法滥觞于互联网的急速发展&#xff0c;随着国内外互联网公司&#xff0c;如 Netflix 在电影领域&#xff0c;亚马逊、淘宝、京东等在电商领域&#xff0c;今日头条在内容领域的采用和推动&…

运维日志管理系统

因公司数据安全和分析的需要&#xff0c;故调研了一下 GlusterFS lagstash elasticsearch kibana 3 redis 整合在一起的日志管理应用&#xff1a;安装&#xff0c;配置过程&#xff0c;使用情况等续一&#xff0c;glusterfs分布式文件系统部署&#xff1a;说明&#xf…

NLP学习思维导图,非常的全面和清晰

作者 | Tae Hwan Jung & Kyung Hee编译 | ronghuaiyang【导读】Github上有人整理了NLP的学习路线图&#xff08;思维导图&#xff09;&#xff0c;非常的全面和清晰&#xff0c;分享给大家。先奉上GitHub地址&#xff1a;https://github.com/graykode/nlp-roadmapnlp-roadm…

Go在windows10 64位上安装过程

1. 从 https://golang.org/dl/ 下载最新的发布版本go1.10即go1.10.windows-amd64.msi; 2. 双击go1.10.windows-amd64.msi ,使用默认选项&#xff0c;默认会安装到C:\Go目录下&#xff1b; 3. 将C:\Go\bin目录添加到系统环境变量中(默认已自动添加)&#xff0c;此目录下有go.exe…