腾讯云
开发者社区
文档
建议反馈
控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
登录/注册
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
物流IT圈
专栏作者
举报
280
文章
500763
阅读量
97
订阅数
订阅专栏
申请加入专栏
全部文章
微服务
数据库
sql
编程算法
api
电商
企业
分布式
it
大数据
java
物联网
费用中心
网站
http
缓存
运维
云数据库 SQL Server
云数据库 Redis
打包
存储
开源
网络安全
数据分析
spring
https
系统架构
供应链
神经网络
容器
erp
rpc
数据挖掘
机器学习
nosql
github
深度学习
消息队列 CMQ 版
腾讯云测试服务
uml
安全
机器人
架构设计
产品
产品经理
管理
系统
其他
硬件开发
git
apache
nginx
文件存储
devops
压力测试
jvm
sql server
微信
数据可视化
信息流
云计算
kafka
app
excel
系统设计
需求分析
php
python
javascript
go
html
嵌入式
mvc
jar
搜索引擎
linux
unix
访问管理
短信
图像处理
金融
数据安全
工业物联
serverless
数据迁移
hadoop
mybatis
tcp/ip
socket编程
windows
5g
验证码
数据集成
gsp
产品设计
软件
负载均衡
人脸识别
比特币
数字货币
自动驾驶
tensorflow
ios
xcode
c 语言
bash
servlet
vue.js
react
node.js
xml
css
jquery
json
单片机
symfony
oracle
access
flask
sqlalchemy
ide
lucene/solr
负载均衡缓存
apt-get
tornado
laravel
批量计算
云直播
短视频
API 网关
SSL 证书
数据加密服务
物联网通信
mongodb
人工智能
微服务与微计算
日志数据
智慧物流
codeigniter
自动化
黑客
爬虫
spark
无人驾驶
hive
面向对象编程
spring boot
推荐系统
seo
自动化测试
cdn
aop
dubbo
spring cloud
数据处理
数据结构
hbase
腾讯云开发者社区
任务调度
虚拟化
mvcc
utf8
测试策略
es
数据库管理
应用安全开发
Elasticsearch Service
智能推荐平台
项目管理
adapter
axure
bug
dashboard
ddd
device
frequency
host
layer
ps
saas
sap
sh
usb
表单
产品运营
工作
基础
监控
解决方案
开发
连接
模型
配置
设计
数据
算法
同步
效率
异常
异常处理
原型
搜索文章
搜索
搜索
关闭
异步编程:协作性多任务处理
编程算法
socket编程
react
如何确保同时处理多个请求,我们可以使用线程或进程进行多任务处理实现,但还有一个选择 - 协作性多任务处理。 这个选项是最困难的。在这里我们说操作系统当然很酷,它有调度程序/计划程序,它可以处理进程,线程,组织它们之间的切换,处理锁等,但它仍然不知道应用程序是如何工作的,而这些工作原理应该是我们作为开发人员所知道的。 我们知道在CPU上会有短暂的时刻执行某些计算操作,但大多数时候我们都期望网络I / O能更清楚何时在处理多个请求之间切换。 从操作系统的角度来看,协作式多任务只是一个执行线程,在其中,应用程序在处理多个请求/命令之间切换。通常情况是:只要一些数据到达,就会读取它们,解析请求,将数据发送到数据库,这是一个阻塞操作;而非堵塞操作时在等待来自数据库的响应时,可以开始处理另一个请求,它被称为“合作或协作”,因为所有任务/命令必须通过合作以使整个调度方案起作用。它们彼此交错,但是有一个控制线程,称为协作调度程序,其角色只是启动进程并让这些线程自动将控制权返回给它。 这比线程的多任务处理更简单,因为程序员总是知道当一个任务执行时,另一个任务不会执行,虽然在单处理器系统中,线程应用程序也将以交错模式执行这种模型,但使用线程的程序员仍应考虑此方法的缺陷,以免应用程序在移动到多处理器系统时工作不正常。但是,即使在多处理器系统上,单线程异步系统也总是以交错方式执行。 编写这样的程序的困难在于,这种切换,维护上下文的过程,将每个任务组织为一系列间歇性执行的较小步骤,落在开发人员身上。另一方面,我们获得了效率,因为没有不必要的切换,例如,在线程和进程之间切换时切换处理器上下文没有问题。 有两种方法可以实现协作式多任务处理 :回调和绿色线程。 回调 由于所有阻塞操作都会导致某个动作将在未来的某个时间发生,并且我们的执行线程应该在准备就绪时返回结果。因此,为了获得结果,我们必须注册回调 - 当请求/操作成功时,它将执行一个回调,或者如果它不成功,它将执行另一个回调。回调是一个明确的选项 - 开发人员应该以这样的方式编写程序,使他不知道何时将调用回调函数。 这是最常用的选项,因为它是显式的,并且得到了大多数现代语言的支持。 利弊:
物流IT圈
2019-08-13
717
0
没有更多了
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
立即发文
Python精品学习库
代码在线跑,知识轻松学
立即查看
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
立即体验
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
立即查看
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档