并发
1、并发:
在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一时刻点上只有一个程序在处理机上运行。
也就是在某个时间点,有多少个访问同时到来。
高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。
响应时间:系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。
吞吐量:单位时间内处理的请求数量。
QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。
并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。
2、php并发编程实践:
Swoole:Swoole 使用纯 C 语言编写,提供了 PHP 语言的异步多线程服务器,异步 TCP/UDP 网络客户端,异步 MySQL,异步 Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端。
除了异步 IO 的支持之外,Swoole 为 PHP 多进程的模式设计了多个并发数据结构和IPC通信机制,可以大大简化多进程并发编程的工作。其中包括了并发原子计数器,并发 HashTable,Channel,Lock,进程间通信IPC等丰富的功能特性。
Swoole2.0 支持了类似 Go 语言的协程,可以使用完全同步的代码实现异步程序。PHP 代码无需额外增加任何关键词,底层自动进行协程调度,实现异步。
3、 数据库缓存
MySQL等一些常见的关系数据库的数据存储在磁盘中,在高并发场景下,业务应用对MySQL产生的增、删、改、查的操作造成巨大的I/O开销和查询压力,
这无疑对数据库和服务器都是一种巨大的压力,为了解决此类问题,缓存数据库应运而生
4、线程,进程
进程:进程是计算机中的程序关于某数据集合上的的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础 进程是一个“执行中的程序”
线程:线程是程序中一个单一的顺序控制流程。进程内有一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指令运行时的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程
线程与进程之间的区别:
1.线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,而进程有自己独立的空间地址
2.进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
3.线程是处理器调度的基本单位,但进程不是
4.二者都可以并发执行
5.每个独立的线程有一个程序的入口,顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
多进程与多线程 * 多进程:同一个计算机在同一时间允许系统中两个个或两个以上的进程处于运行状态,这就是多进程 * 多线程:线程就是把一个进程分为多个片段,每个进程占据一个独立的片段