线程池+同步io和异步io(浅谈)
来自于知乎大佬的一个评论 我们的系统代码从同步方式+线程池改成异步化之后压测发现性能提高了一倍,不再有大量的空闲线程,但是CPU的消耗太大,几乎打满,后来改成协程化之后减少了线程数,提高了性能(相比异步化的代码,性能又提高了一倍以上),降低了资源消耗(主要是CPU)。
本片文章只是进行浅谈理解可能欠缺以后加以改正
首先最近一直在写负载均衡器 对与每个客户端的请求做了一个任务队列,然后采用线程池的模型,采用epoll 将有时间的io挂载到任务队列通过多个线程去处理,显而易见,epoll 在模型中也是同步io方式,只不过他是一种伪异步的方式,具体如何伪异步,他只检测当前事件是否到来如果到来就将对应的fd放到就绪队列.具体请看epoll 代码。
其实对于异步和同步我有自己的认识,当数据没来时在同步和非同步下,都要去缓冲区中看一下,他们都要自己去处理。对于异步的方式而言,如果异步的处理方式而言,每次事件发生都是由内核帮我将数据拷贝到用户态一般采用回调函数处理,效率明显比过了不就去看一下啊的然后在进行处理的方式高很多。对于cpu的占用也不是很高;他只有在回调处理时处于阻塞态.
其实这种模型对应是半同步半异步模型
异步线程等待客户端请求,同步线程处理客户端事件;提高效率.

但对于任务队列而言有一个加锁和解锁的操作感觉效率不高;
同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
虽然异步有很多好处但是如果开辟太多的线程会 造成cpu占用率高,并且异步编程过于难晦涩难懂,c++aio或者异步编程 推荐c++ 并发编程这本书 因此所以出现了协程这个东西。并且线程上下文切换也需要时间
协程就是用户态线程,比内核线程低廉,切换阻塞成本低; 单调度器下,访问共享资源无需上锁,用于提高cpu单核的并发能力缺点是 无法利用多核资源,只能开多进程才行,不过现在使用协程的语言都用到了多调度器的架构,单进程下的协程也能用多核了协程可以用来解决很多问题,比如node js的嵌套回调,Erlang以及Golang的并发模型实现。并且所有协成同属一个线程。因此不需要进行加锁解锁操作。
doto。。。。。。。。。。。。。。。。。。。。。。。。。。。
线程池+同步io和异步io(浅谈)的更多相关文章
- 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...
- 转 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
此文章为转载,如有侵权,请联系本人.转载出处,http://blog.chinaunix.net/uid-28458801-id-4464639.html 同步(synchronous) IO和异步( ...
- 并发编程 --进、线程池、协程、IO模型
内容目录: 1.socket服务端实现并发 2.进程池,线程池 3.协程 4.IO模型 1.socket服务端实现并发 # 客户端: import socket client = socket.soc ...
- 阻塞IO、非阻塞IO、同步IO、异步IO等
https://www.cnblogs.com/zingp/p/6863170.html 阅读目录 1 基础知识回顾 2 I/O模式 3 事件驱动编程模型 4 select/poll/epoll的区别 ...
- 《Windows核心编程系列》十谈谈同步设备IO与异步设备IO之异步IO
同步设备IO与异步设备IO之异步IO介绍 设备IO与cpu速度甚至是内存访问相比较都是比较慢的,而且更不可预测.虽然如此,通过使用异步设备IO我们仍然能够创造出更高效的程序. 同步IO时,发出IO请求 ...
- Windows内核原理-同步IO与异步IO
目录 Windows内核原理-同步IO与异步IO 背景 目的 I/O 同步I/O 异步I/O I/O完成通知 总结 参考文档 Windows内核原理-同步IO与异步IO 背景 在前段时间检查异常连接导 ...
- 5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO
POSIX 同步IO.异步IO.阻塞IO.非阻塞IO,这几个词常见于各种各样的与网络相关的文章之中,往往不同上下文中它们的意思是不一样的,以致于我在很长一段时间对此感到困惑,所以想写一篇文章整理一下. ...
- 阻塞IO与非阻塞IO、同步IO与异步IO
在学习nodejs时,了解到nodejs的一个重要特征是非阻塞IO,且nodejs中的所有IO都是异步的.既然有非阻塞IO.异步IO,那么必然就有阻塞IO.同步IO了,为了彻底搞清楚这几个概念,在网上 ...
- Python_Day11_同步IO和异步IO
同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network IO. ...
随机推荐
- module method
null 参考链接: https://www.cnblogs.com/lvdabao/p/5953884.html
- 学习Spring-Data-Jpa(二)---JPA基本注解
基本注解 1.@Entity :用于添加在实体类上,定义该JAVA类成为被JPA管理的实体,将映射到指定的数据库表.如定义一个实体类Category,它将映射到数据库中的category表中. 2.@ ...
- 导入外部proto获取商品信息
Models.proto syntax = "proto3"; package services; //商品模型 message ProdModel { int32 prod_id ...
- How To Set The Hostname On Ubuntu Or Debian?
$ sudo hostnamectl set-hostname your-hostname $ sudo vim /etc/hosts Open the hosts file and add the ...
- Acwing P288 休息时间 题解
Analysis 首先假设一天的第N小时与后一天的第一个小时不相连, 这种情况下DP转移比较好想 dp[i][j][0/1]dp[i][j][0/1]表示 考虑一天的前i个小时,已经休息了j小时,且第 ...
- NOIP2015 D1 解题报告
T1 神奇的幻方 题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1 ...
- CF1097D 【Makoto and a Blackboard】
我们考虑对于一个\(N\),他如果变成了他的约数\(x\),那又会变成一个子问题 我们定义\(F(n, k)\)为n操作k次的期望个数 那么我们有\(F(n, k) =\sum_{x|n} F(x, ...
- 利用Synplify Pro 加时钟约束的问题
可以改名称为"design.ucf"加成新约束. 在使用Xilinx ISE进行综合时,可以与Synplify Pro软件配合,实现较高的综合性能.但是,有时会出现如下问题: “E ...
- Android Studio导入google training example gradle失败
Error:Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Request 每次从github的Google ...
- AspNetCore3.0 和 JWT
添加NuGet引用 IdentityModel Microsoft.AspNetCore.Authorization.JwtBearer 在appsettings.json中添加JwtBearer配置 ...