首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解阻塞和非阻塞框架

理解阻塞和非阻塞框架
EN

Software Engineering用户
提问于 2012-04-17 19:44:47
回答 3查看 7.7K关注 0票数 6

有人能帮我理解阻塞框架和非阻塞框架之间的区别吗?

到目前为止,我了解到当请求到阻塞框架时,它为该请求创建新线程并对其进行处理,如果第二个请求在第一个请求执行之前到达服务器,它将创建另一个线程。

现在,对于非阻塞服务器,当一个请求到达一个web服务器时,它不会创建一个线程,而是等待一个请求完成,如果另一个请求在第一个执行完成之前到达一个框架,它将无法在返回第一个请求的结果之前处理它。

另一个问题是,在非阻塞框架中,第二个请求到底会发生什么?浏览器只是等待服务器响应,直到请求到期或者发生其他事情?

如果非阻塞框架可以一次处理一个请求,那么使用非阻塞框架构建的web应用程序如何处理比使用阻塞框架构建的请求更多的请求(假设上述声明是正确的)。这是否意味着,对于服务器上的每个阻塞框架实例,我们实际上会部署多个非阻塞框架实例?

EN

回答 3

Software Engineering用户

发布于 2015-05-01 15:22:36

什么是非阻塞框架?

把它解释成我5岁:想象一下你想把存款存入你的银行账户。你走进来,注意到没有排队等候的人。

银行出纳员的标志上写着:“非阻塞出纳员”。你走过来让出纳员处理你的存款,出纳员回答说:“我正忙着做另一笔交易,以后再试一次。”

你等一段时间,然后再试一次。如果您想继续尝试处理或不处理您的事务,您可以自己做出决定。您尝试和第五次尝试,您的交易将立即处理。

“阻塞出纳员”会告诉你“排队作为FIFO队列”。非阻塞出纳员说:“稍后再试”。你更喜欢和哪个银行出纳员打交道,为什么?

定义:非阻塞框架提供服务并立即返回结果,而不是期望其他请求资源的程序等待。

换句话说:当客户端程序对框架进行调用时,调用总是会立即返回,并得到它对您的任何响应,而不会期望您坐在那里等待什么。这个保护器对于那些不想担心编程的程序员来说是很好的,因为框架要求我们等待5分钟。

一个具体的编程示例:假设您的框架希望提供对保存在服务器端的文件的互斥访问。“非阻塞调用”的一个例子是try_lock。如果客户端希望访问该文件,框架将响应:“不,稍后再试”,而不是将您放在队列中等待。

客户端一直在尝试锁,直到它得到它,一旦它得到它,它就做它的业务,并解锁它。这样做的好处是,无论你尝试什么,都会立即产生效果。

非阻塞框架的缺点:当非阻塞框架有太多的工作要做时,客户端被拒绝,并且不强制执行公平,只有最困扰服务器的客户端才能访问服务。太不公平了。

票数 6
EN

Software Engineering用户

发布于 2012-04-18 00:55:49

我做得对吗?

我觉得你倒过来了。

“阻塞”是指在处理一项任务时禁止其他事情继续进行。

服务器监听端口上的请求。当它接收到一个请求时,它可以(a)处理请求(在这样做时不监听更多请求,在工作完成之前阻止进一步的请求),或者(b)生成一个线程来处理请求,然后立即返回侦听端口以获得更多请求。

或者,它可以将请求分派给它正在管理的线程池中已经生成的线程。

票数 1
EN

Software Engineering用户

发布于 2012-04-18 01:49:13

我认为您所描述的是混淆了两种不同的东西-同步/异步调用机制和反应堆设计模式 (这是长期运行的服务应用程序处理多个服务请求的一种方法)。

阻塞是同步调用的另一个名称,调用方在恢复之前等待任务完成。

非阻塞是异步调用的另一个名称,调用方在进行调用后立即返回,然后在任务完成时通过事件(或回调)通知调用方。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/144878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档