当前位置: 首页 > news >正文

python 网站架构软通动力外包怎么样

python 网站架构,软通动力外包怎么样,简约大方自助建站模板,删除标题wordpress系列文章目录 第四章 网络设计与redis、memcached、nginx组件(一) 第五章 网络设计与redis、memcached、nginx组件(二) 文章目录 系列文章目录[TOC](文章目录) 前言一、reactor模型#xff1f;二、Reactor 开发1.建立连接 三、典型reactor 模型单reactor 模型典型 readisradi…系列文章目录 第四章 网络设计与redis、memcached、nginx组件(一) 第五章 网络设计与redis、memcached、nginx组件(二) 文章目录 系列文章目录[TOC](文章目录) 前言一、reactor模型二、Reactor 开发1.建立连接 三、典型reactor 模型单reactor 模型典型 readisradis 中优化 多reactor 模型 多线程(one eventloop per thread)典型 memcached为什么支持多线程 多reactor 多reactor 模型 多进程 (one eventloop per process)典型引用 nginxnginx流程 总结 前言 此文章主要是是介绍一下reactor 模型和典型的reactor模型开源软件介绍分析。 一、reactor模型 Reactor 模型的核心就是把对网络IO的处理转变成对事件的处理。 把网络IO检测功能交由IO多路复用(epoll select poll)实现检测fd 状态针对时间的处理进行IO操作不同职能事件通过不同的事件函数处理。IO多路复用的主要功能是检测多条链路的状态(可读 可写 错误 断开等)但不具备具体IO操作的功能比如读写数据。IO多路复用都是同步网络IO 常见的IO多路复用器有select、pollepoll他们是对IO的管理检测接入的IO触发IO事件注意这三个都是同步IO。 之所以把IO就绪检测的功能交由IO多路复用器是因为对于服务端而言某一时刻只有少量的连接有数据交互如果让IO函数自己检测在阻塞IO时每个连接都需要一个线程非阻塞IO时每个连接都需要通过while在应用层进行检测。 二、Reactor 开发 1.建立连接 代码如下示例 //1.服务端作为被动建立连接 // listenfd 注册监听listenfd 的事件 struct epoll_event ev; ev.events EPOLLIN; ev.date.fd listenfd;epoll_ctl(epfd, EPOLL_CTL_ADD, listenfd, ev);// 触发listenfd 的读事件调用accept 接受新的连接 clientfd acceptlisten_fd,(struct sockaddr *)addr, sizeofaddr ev.events EPOLLIN; ev.date.fd clientfd; epoll_ctl(epfd, EPOLL_CTL_ADD,clientfd, ev); .//服务端主动 // 1. 创建 socket 建立连接 int connectfd socket(AF_INET, SOCK_STREAM, 0); connect(connectfd, (struct sockaddr *)addr, sizeof(addr)); // 2. 注册监听 connectfd 的写事件 struct epoll_event ev; ev.events EPOLLOUT; ev.data.fd connetfd epoll_ctl(efd, EPOLL_CTL_ADD, connectfd, ev); // 3. 当 connectfd 写事件被触发连接建立成功 if (status e_connecting e-events EPOLLOUT) { status e_connected; // 这里需要把写事件关闭 epoll_ctl(epfd, EPOLL_CTL_DEL, connectfd, NULL); } 三、典型reactor 模型 单reactor 模型 典型 readis redis命令行采用了单reactor 网络事件模型在启动时会创建一个I/O多路复用的事件处理器即reactor用于监听链路的状态然后将所有客户端请求都注册到该事件处理器中。当有新连接到达或者已有连接有数据可读写时事件处理器就会触发相应的回调函数进行处理。 由于redis是单线程运行的因此只需要一个reactor即可满足其并发处理需求。通过合理地利用CPU资源和异步非阻塞IO技术redis可以实现高效地处理大量并发请求。 radis 中优化 需要注意的是当Redis遇到某些长时间执行的命令时可能会导致其他请求被阻塞而影响整个系统性能。比如三个客户端同时向服务端发送数据服务端是按先后顺序接收处理。这种就会出现如果先到的数据处理比较耗时会导致后续客户端出现饥饿现象。优化方式是 1、如果IO耗时把IO操作放到IO线程池处理主线程处理computer。read 、write、encode 、decode等丢入线程池处理 2、如果computer耗时采用分治思想或者不同时间复杂度的算法 多reactor 模型 多线程(one eventloop per thread) 模型图 典型 memcached memcached是一个基于事件驱动的内存缓存服务器它使用多个reactor来处理并发连接。开启多个线程每个线程中都有一个独立的reactor 对象。 为什么支持多线程 多reactor memcached 也是kv类型的数据库但是value 支持数据结构比较单一不支持多种数据结构 对于锁的处理比较简单。 具体来说memcached使用一个主线程和多个工作线程。每个工作线程都有自己的reactor用于处理客户端连接和请求。当有新连接到达时主线程master epoll )会将新的fd分配给某个工作线程并且该工作线程的reactor会负责处理这个连接的所有事件。 多reactor 模型 多进程 (one eventloop per process) 模型 典型引用 nginx nginx是一个基于事件驱动的服务器它通过多个reactor处理并发连接它采用多进程的方式(master、slave worker)模型 具体来说Nginx使用一个主进程(master)和多个worker进程。每个worker进程都有自己的reactor队形用于处理客户端连接和请求。当有新连接到达时主进程会将其分配给某个worker进程并且该worker进程的reactor会负责处理这个连接的所有事件。 在默认情况下Nginx的worker进程数等于CPU核心数。 nginx流程 Master process 创建的时候会监听listenfd, 然后在fork 出work 进程 work 进程当中都会有一个listenfd 的备份。每个work 进程会创建自己的epoll 对象。并且把listenfd交割epoll 对象管理. 多个进程都监听了listenfd 的读事件如果listenfd 的全链接队列当中加入节点的时候他就会给每一个epoll 对象发送信号每个epoll 对象都会去触发读事件。这样就产生了惊群现象。在用户层解决这个问题通过在work 进程当中添加共享锁的方式解决。 总结 单线程单reactor模型典型是radis 可以把IO放入线程池也可以把业务计算部分放入线程池。通过回调的方式处理 多线程多reactor模型 如果业务之间交互比较多但加锁简单可以用多线程memcached 多进程多reactor模型 如果业务之间交互比较少可以用多进程ngnix
http://www.hkea.cn/news/14437831/

相关文章:

  • 设计灵感的网站php程序员网站开发
  • 做电视网站需要多大的服务器网站建设合作流程
  • 洛阳建设工程信息网站乔拓云网微信小程序制作
  • 知名网站建设公广州网站公司
  • wordpress网站嵌入商城网站备案信息更改审核要多久
  • 安卓开发者网站焊工培训
  • 平谷网站建设公司视频制作方法
  • 东营长安网站建设网站开发具体工作有那些
  • 提供网站推广公司电话企业宣传片文案大全
  • p2p网站功能模块2022双11各大电商平台销售数据
  • 企业网站官网建设电影分享网站源码
  • 集美培训网站建设做淘宝客淘宝网站被黑
  • 长沙开发网站的公司网站页面分类
  • 程序员自己做项目网站网站收录是什么
  • 网站建设难吗株洲品牌网站建设
  • 西部数码网站管理助手3.1网站建设制作设计公司哪家好
  • 宝安商城网站建设哪家效益快做网站只用前端知识可以吗
  • wordpress网站基础知识山东省建设安全监督站的网站
  • 广州网站建设推广专家团队wordpress资讯模板
  • 上海闵行网站建设线上外包平台
  • dedecms景区网站模板网页设计模板的结构
  • 咸阳商城网站开发设计杭州做网站一般多少钱
  • 做公众号编辑用什么网站辽宁电力建设监理有限公司网站
  • 怎么建网站app那种电影网站怎么建设
  • 依安县建设网站糕点网站设计
  • 律师行业做网站的必要性中轻成都设计院
  • 做纸箱在什么网站找客户域名申请好后 如何建设网站
  • 市桥网站建设培训哪里建设网站
  • 正规代加工项目提供邢台网站优化
  • 一般网站有哪些模块做视频付费网站